miniKimiK3 β€” 50M

A 50M parameter language model written from scratch in plain PyTorch, combining Kimi Delta Attention, Multi-head Latent Attention, a latent Mixture-of-Experts with auxiliary-loss-free load balancing, hyper-connection block residuals, and a Muon + AdamW hybrid optimizer. Trained on TinyStories on a single Apple Silicon GPU.

No Triton, no CUDA kernels, no transformers β€” every component is implemented directly so the math is readable end to end.

Code, full architecture notes and derivations: https://github.com/Shiveshrane/MiniKimiK3

Results

parameters 50.17M total, 36.71M active per token
validation loss 1.6429 (perplexity β‰ˆ 5.17)
trained on 82M tokens (10,000 steps Γ— 8,192 tokens), 1.22 epochs of 67M
hardware one Apple Silicon GPU via MPS, 16.1 hours
throughput ~2,300 tokens/s training, ~13 tokens/s single-stream decode

Samples

Prompt: Once upon a time there was a little girl who, temperature 0.8, top-k 50.

Once upon a time there was a little girl who loved to go to the park. One day she was walking with her mom and she saw a big tree. She wanted to climb the tree, but her mom said no.

The little girl was sad, but she kept walking. Suddenly, she saw a man walking towards the tree. He was very big and he had a bag in his hand.

The little girl was scared, so she ran away. But then she heard a voice in the tree. It was the voice of someone yelling.

Once upon a time there was a little girl who liked to take a bath. Her mommy would take her in the bathtub and filled it with warm water. The little girl liked to splash around in the warm water.

One day, the little girl was feeling very miserable. She had no water, so she lay down in the bathtub and cried out loud.

The mommy said, "What's wrong?"

The little girl said, "I'm so miserable. I don't want to get out of the bathtub."

Architecture

13 layers, 4n+1 rule    9 KDA + 4 MLA (layer 12 forced to MLA)
hidden 512              8 heads Γ— 64
KV / MoE latent 128     4Γ— compression
MoE per layer           16 routed (top-4) + 2 shared, StiGLU experts
vocab 8192              byte-level BPE, tied input/output embedding
  • Kimi Delta Attention β€” linear attention whose state update is one step of gradient descent on $\lVert S^\top k - v\rVert^2$, giving an error-correcting write instead of blind accumulation, with per-channel gated decay. Trains through a chunked parallel form; decodes as a recurrence with a fixed $64\times64$ state per head, so cost per token is constant in sequence length.
  • Multi-head Latent Attention every fourth layer, for exact long-range lookups a fixed-size state cannot hold.
  • Latent MoE β€” routed experts operate inside a 128-wide latent rather than the 512-wide model dimension, which is what makes 16 experts per layer affordable at this scale.
  • Quantile balancing β€” per-expert routing bias solved as a fixed point, so expert load is equalized with no auxiliary loss term and no loss weight to tune.
  • Muon for the 2-D hidden matrices (Newton-Schulz orthogonalized momentum, per-head on q/k/v projections), AdamW for embeddings, norms and biases.

Files

file
best.pt checkpoint: weights, both optimizers' state, step, val loss
tokenizer.json the byte-level BPE this checkpoint was trained with β€” ids are meaningless without it

Usage

git clone https://github.com/Shiveshrane/MiniKimiK3
cd MiniKimiK3

hf download ItsProtesilaus/MiniKimiK3 best.pt --local-dir checkpoints
hf download ItsProtesilaus/MiniKimiK3 tokenizer.json --local-dir data

python3 tests/generate.py "Once upon a time" --ckpt checkpoints/best.pt

The architecture is reconstructed from the checkpoint's stored config, so no flags need to match by hand.

Limitations

  • Trained only on TinyStories β€” simple-vocabulary children's stories. It has no world knowledge, no instruction following, no chat behaviour, and will not perform on any general benchmark.
  • 82M training tokens for 50M parameters is well under a compute-optimal budget (~20 tokens/parameter would be 1B), so it is undertrained.
  • No positional encoding of any kind: order information reaches the model only through KDA's decay and short convolutions plus the causal mask.
  • generate is single-sequence; batched sampling needs a rework.
  • Research and educational use. Not evaluated for safety, bias, or factuality.

Training details

corpus 300k TinyStories β†’ 66.99M train / 0.38M val tokens, uint16
batch 8 Γ— 4 accumulation Γ— 256 tokens = 8,192 tokens/step
optimizer Muon (lr 0.02) + AdamW (lr 3e-3), weight decay 0.1, grad clip 1.0
schedule 300 warmup steps, cosine to 10% over 10,000 steps
init $\mathcal{N}(0, 0.02)$ β€” required with tied embeddings, which would otherwise start at loss β‰ˆ 494 instead of $\ln 8192 \approx 9.0$
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Dataset used to train ItsProtesilaus/MiniKimiK3