A 777M-parameter Mixture-of-Experts language model, built and trained from scratch: tokenizer, attention, expert routing, training loop and chat server, all written from scratch and trained on rented GPU time. No fine-tuned base, no borrowed weights, no framework doing the hard part.
The architecture follows DeepSeek-V2: attention that compresses what it caches, and feed-forward layers where only a few experts fire for any given token. The third card is not a modelling idea at all, and without it the first two would still be training.
01
Multi-head Latent Attention
Instead of caching a key and a value for each of fourteen heads, the input is projected to one shared latent of 320 numbers and keys are rebuilt from it. Position rides separately on a 32-number rotary key, because a position-rotated key cannot be reconstructed from an unrotated latent. The cache holds 352 numbers per token instead of 1,792.
02
DeepSeekMoE routing
Every layer above the first holds 32 routed experts and one shared expert. A router picks the top 3, the shared expert always runs, so a token passes through 4 of 33. Seventy per cent of the parameters are idle for any given token, which is why 777M costs about as much to run as 161M.
03
Stacked expert dispatch
Experts are three stacked (32, hidden, ffn) tensors with capacity-based routing rather than 32 modules in a Python loop, which forced a GPU synchronisation thirty-two times per layer per step. That single change took training from 6,056 to 179,000 tokens per second.
Twelve GPU-hours, split across two machines
The two pretraining phases ran on separate machines. The learning rate is parameterised by elapsed fraction of training rather than by step, so the second resumed at 0.5227 and the cosine curve continued rather than restarting. Only the weights crossed the boundary.
Stage
Minutes
Tokens
Result
Pretrain phase 1
227
2.8B
val loss 3.1486
Pretrain phase 2
340
3.1B
val loss 2.9763
Chat fine-tune
80
2.7B
val loss 1.2484
Pretraining, phase 1
9,542 steps, 227 min. Steps 1,730-9,160 were never logged: the run that finished phase 1 lost its log with the machine, and what is drawn either side of the gap is the attempt that dropped at step 1,730 and the tail read back from retained console output.
Pretraining, phase 2
340 min in total, of which the first 105 are logged. Loss is nearly flat here because phase 1 had already taken it to 3.15 and the schedule was annealing.
Chat fine-tune
9,201 steps, 80 min, complete. Validation bottoms out at 1.2484 on step 7,800 and climbs afterwards, so the released weights are that checkpoint and not the last one.
What it scores, and why
Five-shot, 250 examples per benchmark, every model run through the same harness on the same items. All three Moonfrost checkpoints are shown, so the effect of instruction tuning can be read rather than assumed. One benchmark moves: ARC-Easy falls 54.8, 52.4, 44.4 across the base and the two tunes. Every other gap is inside the noise at this sample size. Figures copied from other model cards would compare harnesses as much as models: Qwen2.5-0.5B publishes 47.5 on MMLU and scores 34.4 here.
Moonfrost is last or near-last on most rows, and the architecture is not the reason. Six billion tokens for 777 million parameters is about eight tokens per parameter, against a compute-optimal ratio of roughly twenty and against reference models that read two to eighteen trillion at half the size. The budget bought behaviour rather than knowledge: it holds a conversation and writes short working code, but it does not know much.
Where it sits against everything else
MMLU is the one score published widely enough to put open and closed models on a single axis, which is the only way GPT-4, Claude and Gemini can appear at all: none of them has published a parameter count or a token budget, so they cannot be placed on the chart above. Bars marked here were measured on this machine; the rest are each developer’s own five-shot figure.
Moonfrostopen weightsclosedchance
Specification
Seventy per cent of the model is experts that stay idle for any given token. That is the whole trade: the capacity of a 777M model at roughly the compute of a 161M one.