| | --- |
| | language: |
| | - en |
| | license: apache-2.0 |
| | library_name: transformers |
| | tags: |
| | - pretraining |
| | - educational |
| | - pedagogical |
| | - sutra |
| | - smollm2 |
| | - llama |
| | pipeline_tag: text-generation |
| | model-index: |
| | - name: SmolLM2-70M |
| | results: |
| | - task: |
| | type: text-generation |
| | name: Text Generation |
| | dataset: |
| | type: ai2_arc |
| | name: ARC-Easy |
| | config: ARC-Easy |
| | metrics: |
| | - type: acc_norm |
| | value: 33.00 |
| | name: Normalized Accuracy (0-shot) |
| | - task: |
| | type: text-generation |
| | name: Text Generation |
| | dataset: |
| | type: ai2_arc |
| | name: ARC-Challenge |
| | config: ARC-Challenge |
| | metrics: |
| | - type: acc_norm |
| | value: 22.35 |
| | name: Normalized Accuracy (0-shot) |
| | - task: |
| | type: text-generation |
| | name: Text Generation |
| | dataset: |
| | type: boolq |
| | name: BoolQ |
| | metrics: |
| | - type: acc |
| | value: 39.66 |
| | name: Accuracy (0-shot) |
| | - task: |
| | type: text-generation |
| | name: Text Generation |
| | dataset: |
| | type: hellaswag |
| | name: HellaSwag |
| | metrics: |
| | - type: acc_norm |
| | value: 26.14 |
| | name: Normalized Accuracy (0-shot) |
| | - task: |
| | type: text-generation |
| | name: Text Generation |
| | dataset: |
| | type: piqa |
| | name: PIQA |
| | metrics: |
| | - type: acc_norm |
| | value: 54.84 |
| | name: Normalized Accuracy (0-shot) |
| | - task: |
| | type: text-generation |
| | name: Text Generation |
| | dataset: |
| | type: sciq |
| | name: SciQ |
| | metrics: |
| | - type: acc_norm |
| | value: 45.20 |
| | name: Normalized Accuracy (0-shot) |
| | - task: |
| | type: text-generation |
| | name: Text Generation |
| | dataset: |
| | type: winogrande |
| | name: WinoGrande |
| | metrics: |
| | - type: acc |
| | value: 50.04 |
| | name: Accuracy (0-shot) |
| | - task: |
| | type: text-generation |
| | name: Text Generation |
| | dataset: |
| | type: truthful_qa |
| | name: TruthfulQA MC2 |
| | metrics: |
| | - type: acc |
| | value: 48.02 |
| | name: Accuracy (0-shot) |
| | - task: |
| | type: text-generation |
| | name: Text Generation |
| | dataset: |
| | type: gsm8k |
| | name: GSM8K |
| | metrics: |
| | - type: exact_match |
| | value: 0.53 |
| | name: Exact Match (5-shot) |
| | - task: |
| | type: text-generation |
| | name: Text Generation |
| | dataset: |
| | type: cais/mmlu |
| | name: MMLU |
| | metrics: |
| | - type: acc |
| | value: 22.96 |
| | name: Accuracy (0-shot) |
| | - task: |
| | type: text-generation |
| | name: Text Generation |
| | dataset: |
| | type: openbookqa |
| | name: OpenBookQA |
| | metrics: |
| | - type: acc_norm |
| | value: 27.60 |
| | name: Normalized Accuracy (0-shot) |
| | base_model: HuggingFaceTB/SmolLM2-70M |
| | datasets: |
| | - codelion/sutra-10B |
| | --- |
| | |
| | # SmolLM2-70M |
| |
|
| | A SmolLM2-70M model pretrained on the [Sutra-10B](https://huggingface.co/datasets/codelion/sutra-10B) pedagogical dataset for 3 epochs (~30.6B tokens total). This model demonstrates that a 69M parameter model can be trained to near-capacity performance using dense, curated educational data. |
| |
|
| | ## Model Details |
| |
|
| | | Property | Value | |
| | |----------|-------| |
| | | Architecture | LlamaForCausalLM | |
| | | Parameters | 69.2M | |
| | | Hidden Size | 384 | |
| | | Layers | 32 | |
| | | Attention Heads | 6 (2 KV heads) | |
| | | Context Length | 8,192 | |
| | | Vocabulary | 49,152 | |
| | | Precision | bfloat16 | |
| | | Base Model | [SmolLM2-70M](https://huggingface.co/HuggingFaceTB/SmolLM2-70M) | |
| | | Training Dataset | [Sutra-10B](https://huggingface.co/datasets/codelion/sutra-10B) (10.2B tokens) | |
| |
|
| | ## Training |
| |
|
| | The model was trained for 3 epochs on the Sutra-10B dataset using a single NVIDIA L40S GPU (46GB). This checkpoint is the best perplexity checkpoint from epoch 3. |
| |
|
| | | Epoch | Tokens | Training Time | Learning Rate | Best Perplexity | |
| | |-------|--------|---------------|---------------|-----------------| |
| | | 1 | 10.2B | 25.82h | 3e-4 β 3e-5 | 39.50 | |
| | | 2 | 10.2B | 25.78h | 1e-4 β 1e-5 | 37.81 | |
| | | 3 | 10.2B | 26.16h | 3e-5 β 3e-6 | 37.72 | |
| | | **Total** | **30.6B** | **77.76h** | β | **37.72** | |
| |
|
| | Training configuration: |
| | - Optimizer: AdamW (fused), weight decay 0.1 |
| | - Schedule: Cosine with warmup |
| | - Batch size: 4 per device, gradient accumulation 8 (effective ~262K tokens/step) |
| | - Sequence length: 8,192 |
| | - Flash Attention 2, TF32 matmul, torch.compile |
| | - Throughput: ~110K tokens/sec |
| |
|
| | ## Benchmark Results |
| |
|
| | All benchmarks evaluated using [lm-evaluation-harness](https://github.com/EleutherAI/lm-eval) v0.4.11. All tasks are 0-shot except GSM8K (5-shot). |
| |
|
| | ### This Model vs Training Progression |
| |
|
| | | Benchmark | **E3-best** | E3-final | E2-best | E2-final | E1-final | |
| | |-----------|:-----------:|:--------:|:-------:|:--------:|:--------:| |
| | | ARC-Easy | **33.00** | 33.16 | 32.83 | 33.12 | 33.46 | |
| | | ARC-Challenge | **22.35** | 21.67 | 22.61 | 22.44 | 22.44 | |
| | | BoolQ | **39.66** | 39.66 | 39.79 | 39.54 | 39.79 | |
| | | HellaSwag | **26.14** | 26.03 | 26.08 | 25.91 | 26.03 | |
| | | PIQA | **54.84** | 55.01 | 54.24 | 54.13 | 54.62 | |
| | | SciQ | **45.20** | 46.30 | 44.10 | 45.50 | 43.60 | |
| | | WinoGrande | **50.04** | 49.33 | 50.51 | 48.70 | 48.78 | |
| | | TruthfulQA | **48.02** | 47.93 | 48.30 | 48.14 | 48.30 | |
| | | GSM8K | **0.53** | 0.61 | 0.68 | 0.83 | 0.15 | |
| | | MMLU | **22.96** | 22.87 | 23.00 | 22.98 | 22.99 | |
| | | OpenBookQA | **27.60** | 27.60 | β | β | β | |
| | | **Average (10)** | **34.27** | 34.26 | 34.21 | 34.13 | 34.02 | |
| |
|
| | ### Comparison with 1B Token Baselines (SmolLM2-70M) |
| |
|
| | These are results from training the same SmolLM2-70M model on various 1B-token datasets from the [Pre-training Dataset Samples](https://huggingface.co/collections/codelion/pre-training-dataset-samples-686bd760abf1a43b0ce32829) collection for 1 epoch, showing that Sutra-10B at 3 epochs achieves the highest performance for this model size. |
| |
|
| | | Dataset (1B tokens) | HellaSwag | PIQA | WinoGrande | ARC-C | MMLU | TruthfulQA | GSM8K | Avg | |
| | |---------------------|-----------|------|------------|-------|------|------------|-------|-----| |
| | | **Sutra-10B (3 epochs)** | **26.14** | **54.84** | **50.04** | **22.35** | 22.96 | **48.02** | 0.53 | **34.27** | |
| | | [Sutra-1B](https://huggingface.co/datasets/codelion/sutra-1B) | 25.43 | 53.86 | 49.41 | 23.04 | 22.91 | 49.09 | 1.14 | 32.13 | |
| | | [FineWiki-1B](https://huggingface.co/datasets/HuggingFaceFW/finewiki) | 25.56 | 51.69 | 48.86 | 24.15 | **23.34** | 51.16 | 0.91 | 32.24 | |
| | | [FinePDFs-1B](https://huggingface.co/datasets/HuggingFaceFW/FinePDFs) | 25.58 | 52.56 | 50.51 | 22.44 | 22.95 | 51.41 | 1.21 | 32.38 | |
| | | [DCLM-Baseline-1B](https://huggingface.co/datasets/codelion/dclm-baseline-1B) | 25.85 | 55.17 | 50.20 | 21.08 | 22.97 | 49.21 | 0.68 | 32.16 | |
| | | [FineWeb-Edu-1B](https://huggingface.co/datasets/codelion/fineweb-edu-1B) | 25.72 | 55.11 | 50.36 | 21.25 | 22.96 | 48.11 | 1.21 | 32.10 | |
| | | [Essential-Web-1B](https://huggingface.co/datasets/sumukshashidhar-archive/essential-web-v1.0-sample-1B) | 26.02 | 55.44 | 48.30 | 20.99 | 22.95 | 49.59 | 1.29 | 32.08 | |
| | | [Synth-1B](https://huggingface.co/datasets/codelion/synth-1B) | 26.63 | 50.98 | 48.78 | 21.93 | 23.24 | 47.10 | 1.29 | 31.42 | |
| |
|
| | ## Key Findings |
| |
|
| | 1. **Capacity ceiling**: The 70M parameter model reaches its capacity ceiling at approximately 10B tokens. Additional epochs (up to 30.6B total tokens) yield only marginal improvements in benchmark scores (+0.25 average from epoch 1 to epoch 3), despite continued perplexity improvement (39.50 β 37.72). |
| |
|
| | 2. **Perplexity vs benchmarks**: Perplexity continues to decrease across epochs, but downstream benchmark performance plateaus, suggesting the model's representational capacity is the bottleneck rather than data exposure. |
| |
|
| | 3. **Data quality matters**: Even at 1B tokens, Sutra outperforms or matches larger web-crawled datasets (DCLM, FineWeb-Edu, Essential-Web) on average, demonstrating the value of curated pedagogical content. |
| |
|
| | ## Usage |
| |
|
| | ```python |
| | from transformers import AutoModelForCausalLM, AutoTokenizer |
| | |
| | model = AutoModelForCausalLM.from_pretrained("codelion/SmolLM2-70M", trust_remote_code=True) |
| | tokenizer = AutoTokenizer.from_pretrained("codelion/SmolLM2-70M") |
| | |
| | input_text = "The theory of relativity states that" |
| | inputs = tokenizer(input_text, return_tensors="pt") |
| | outputs = model.generate(**inputs, max_new_tokens=100) |
| | print(tokenizer.decode(outputs[0], skip_special_tokens=True)) |
| | ``` |
| |
|
| | ## Limitations |
| |
|
| | - This is a 69M parameter base model (not instruction-tuned) β it generates completions, not conversational responses |
| | - Performance is at the capacity ceiling for this model size; larger models would benefit more from the Sutra-10B dataset |
| | - The model was trained primarily on English educational content |
| |
|
| | ## Related Resources |
| |
|
| | - **Dataset**: [codelion/sutra-10B](https://huggingface.co/datasets/codelion/sutra-10B) β 10B token pedagogical pretraining dataset |
| | - **Sutra Framework**: Generates structured educational content optimized for LLM pretraining |
| |
|
| | ## Citation |
| |
|
| | ```bibtex |
| | @article{sharma2026sutra, |
| | title={Scaling Pedagogical Pretraining: From Optimal Mixing to 10 Billion Tokens}, |
| | author={Sharma, Asankhaya}, |
| | year={2026}, |
| | url={https://huggingface.co/blog/codelion/scaling-pedagogical-pretraining-10-billion-tokens} |
| | } |
| | ``` |
| |
|
| | ## License |
| |
|
| | Apache 2.0 |
| |
|