CoolFace
Modelpublic

Banaxi-Tech/custom-optimizer-model-test

sourceHugging Faceapache-2.0updated 1mo agoView on Hugging Face
0likes60downloads
Model Card

BananaMind 2 Nano Custom Optimizer Test

This experimental base model uses the exact BananaMind 2 Nano architecture and tokenizer. It was trained from scratch with Aspect-Cautious Muon, an experimental optimizer that combines stock PyTorch Muon with a small cautious Adam residual on hidden matrices. The tied embedding and normalization weights use AdamW. Training used only streamed FineWeb-Edu data for 24,999,591,936 custom-tokenizer tokens.

Architecture

FieldValue
Parameters9,968,128
Layers10
Hidden size256
Intermediate size768
Query heads4
KV heads2
Head dimension64
Context4,096
Vocabulary8,192
EmbeddingsTied
AttentionGQA, pre-RoPE QK norm
MLPSwiGLU
Position encodingRoPE, theta 100,000

Training

FieldValue
DatasetHuggingFaceFW/fineweb-edu / sample-100BT
Dataset revision87f09149ef4734204d70ed1d046ddc9ca3f2b8f9
Data accessStreaming
Hidden-matrix optimizerAspect-Cautious Muon
Muon peak learning rate0.05
Muon momentum0.95, Nesterov
Muon Newton-Schulz steps5
Cautious Adam residual peak LR0.0003
Residual aspect scalingmin(2, sqrt(long_side / short_side))
Embedding/norm optimizerAdamW
AdamW peak learning rate0.003
AdamW betas(0.9, 0.95)
Global batch132 sequences
Tokens per optimizer step540,672
Optimizer steps46,238
Warmup1,750 steps
ScheduleWarmup-stable-decay, final 15% cosine cooldown
Weight decay0.1, then 0.01 after 12,000,000,000 tokens
Precisionbfloat16 autocast, float32 master weights
Hardware8 x NVIDIA RTX PRO 6000 Blackwell Server Edition
Seed1337

The original Nano effective batch was 12 micro-batches x 11 accumulation steps = 132 sequences. This distributed run preserves that exact global batch. Ranks receive 16 or 17 sequences and scale their local mean losses so DDP's averaged gradient is the true 132-sequence global mean.

Usage

python
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

model_id = "Banaxi-Tech/custom-optimizer-model-test"
tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    trust_remote_code=True,
    dtype=torch.bfloat16,
    device_map="auto",
)

This is a base model, not an instruction-tuned chat model.