Architecture
Llama-style decoder, 24 layers, hidden 2,048, FFN 8,192 (SwiGLU), attention heads / KV heads 16 / 4 (head dim 128), RMSNorm, RoPE base 10,000, untied embeddings, no biases, no QK-norm, sequence length 4,096. Tokenizer: SmolLM2 vocabulary (49,152) plus <|pad|>; <|endoftext|> is the end-of-document token.
Pretraining
Data: the 1PP conversations rewritten from those documents; loss on user and assistant turns (no loss on <|endoftext|>). One pass over 47.8M documents (66.2B tokens of original documents; 63.0B tokens as conversations), 31,777 steps at global batch 512 × 4,096 tokens, cross-document attention masking, best-fit packing with step-aligned document assignment. Optimizer: Muon (shape scaling, matrix LR 0.005) with Adam for embeddings and norms, warmup 2,000 steps, constant, linear decay over the last 10% to 1/100, weight decay 0.1, bf16.
Validation loss (per token, 2,433 held-out documents, final checkpoint):
Table with columns: assistant text, user text, document text| assistant text | user text | document text |
|---|
| 1.433 | 1.339 | 3.123 |
Supervised fine-tuning
One epoch over a 400k-conversation mix: jkminder/model-raising-pb-100k-3c-mt-sft (98.5k multi-turn, constitution-cited track), dlab-spp/sp-sft-normal-300k minus prompts duplicated in the first set (271.6k), and a 30k sample of dlab-spp/sp-sft-safety-180k. Same stack as pretraining (Megatron, Muon, ChatML without a system turn, loss on assistant turns only). Matrix LR 0.002 selected per model from {0.0005, 0.001, 0.002, 0.005} by held-out loss (on the seed-28 model; the replicate reuses it); global batch 128 × 4,096, linear decay to 1/10 after 3% warmup.
Held-out SFT loss (assistant tokens, 1,998 held-out conversations): 1.832
ChatML without a system turn (the models never saw one):
<|im_start|>user\n{message}<|im_end|>\n<|im_start|>assistant\n{reply}<|im_end|>\n
The bundled chat_template renders exactly this. Generation stops at <|im_end|> (id 2) or <|endoftext|> (id 0); both are listed in eos_token_id.
Verification
The HF weights were checked against the Megatron checkpoint by recomputing validation losses with this model:
Table with columns: set, HF loss, Megatron reference, abs. diff| set | HF loss | Megatron reference | abs. diff |
|---|
| sft_val segments [3, 4] | 1.8325 | 1.8324 | 0.0001 |
Links
- Training logs: wandb projects 1pp-training and 1pp-sft
- Research artifact from the 1PP project (EPFL DLAB); not a general-purpose assistant.