codelion commited on
Commit
c413b55
·
verified ·
1 Parent(s): 149eb54

Upload folder using huggingface_hub

Browse files
README.md ADDED
@@ -0,0 +1,243 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ language:
3
+ - en
4
+ license: apache-2.0
5
+ library_name: transformers
6
+ tags:
7
+ - pretraining
8
+ - educational
9
+ - pedagogical
10
+ - sutra
11
+ - smollm2
12
+ - llama
13
+ pipeline_tag: text-generation
14
+ model-index:
15
+ - name: SmolLM2-70M
16
+ results:
17
+ - task:
18
+ type: text-generation
19
+ name: Text Generation
20
+ dataset:
21
+ type: ai2_arc
22
+ name: ARC-Easy
23
+ config: ARC-Easy
24
+ metrics:
25
+ - type: acc_norm
26
+ value: 33.00
27
+ name: Normalized Accuracy (0-shot)
28
+ - task:
29
+ type: text-generation
30
+ name: Text Generation
31
+ dataset:
32
+ type: ai2_arc
33
+ name: ARC-Challenge
34
+ config: ARC-Challenge
35
+ metrics:
36
+ - type: acc_norm
37
+ value: 22.35
38
+ name: Normalized Accuracy (0-shot)
39
+ - task:
40
+ type: text-generation
41
+ name: Text Generation
42
+ dataset:
43
+ type: boolq
44
+ name: BoolQ
45
+ metrics:
46
+ - type: acc
47
+ value: 39.66
48
+ name: Accuracy (0-shot)
49
+ - task:
50
+ type: text-generation
51
+ name: Text Generation
52
+ dataset:
53
+ type: hellaswag
54
+ name: HellaSwag
55
+ metrics:
56
+ - type: acc_norm
57
+ value: 26.14
58
+ name: Normalized Accuracy (0-shot)
59
+ - task:
60
+ type: text-generation
61
+ name: Text Generation
62
+ dataset:
63
+ type: piqa
64
+ name: PIQA
65
+ metrics:
66
+ - type: acc_norm
67
+ value: 54.84
68
+ name: Normalized Accuracy (0-shot)
69
+ - task:
70
+ type: text-generation
71
+ name: Text Generation
72
+ dataset:
73
+ type: sciq
74
+ name: SciQ
75
+ metrics:
76
+ - type: acc_norm
77
+ value: 45.20
78
+ name: Normalized Accuracy (0-shot)
79
+ - task:
80
+ type: text-generation
81
+ name: Text Generation
82
+ dataset:
83
+ type: winogrande
84
+ name: WinoGrande
85
+ metrics:
86
+ - type: acc
87
+ value: 50.04
88
+ name: Accuracy (0-shot)
89
+ - task:
90
+ type: text-generation
91
+ name: Text Generation
92
+ dataset:
93
+ type: truthful_qa
94
+ name: TruthfulQA MC2
95
+ metrics:
96
+ - type: acc
97
+ value: 48.02
98
+ name: Accuracy (0-shot)
99
+ - task:
100
+ type: text-generation
101
+ name: Text Generation
102
+ dataset:
103
+ type: gsm8k
104
+ name: GSM8K
105
+ metrics:
106
+ - type: exact_match
107
+ value: 0.53
108
+ name: Exact Match (5-shot)
109
+ - task:
110
+ type: text-generation
111
+ name: Text Generation
112
+ dataset:
113
+ type: cais/mmlu
114
+ name: MMLU
115
+ metrics:
116
+ - type: acc
117
+ value: 22.96
118
+ name: Accuracy (0-shot)
119
+ - task:
120
+ type: text-generation
121
+ name: Text Generation
122
+ dataset:
123
+ type: openbookqa
124
+ name: OpenBookQA
125
+ metrics:
126
+ - type: acc_norm
127
+ value: 27.60
128
+ name: Normalized Accuracy (0-shot)
129
+ base_model: HuggingFaceTB/SmolLM2-70M
130
+ datasets:
131
+ - codelion/sutra-10B
132
+ ---
133
+
134
+ # SmolLM2-70M
135
+
136
+ 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.
137
+
138
+ ## Model Details
139
+
140
+ | Property | Value |
141
+ |----------|-------|
142
+ | Architecture | LlamaForCausalLM |
143
+ | Parameters | 69.2M |
144
+ | Hidden Size | 384 |
145
+ | Layers | 32 |
146
+ | Attention Heads | 6 (2 KV heads) |
147
+ | Context Length | 8,192 |
148
+ | Vocabulary | 49,152 |
149
+ | Precision | bfloat16 |
150
+ | Base Model | [SmolLM2-70M](https://huggingface.co/HuggingFaceTB/SmolLM2-70M) |
151
+ | Training Dataset | [Sutra-10B](https://huggingface.co/datasets/codelion/sutra-10B) (10.2B tokens) |
152
+
153
+ ## Training
154
+
155
+ 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.
156
+
157
+ | Epoch | Tokens | Training Time | Learning Rate | Best Perplexity |
158
+ |-------|--------|---------------|---------------|-----------------|
159
+ | 1 | 10.2B | 25.82h | 3e-4 → 3e-5 | 39.50 |
160
+ | 2 | 10.2B | 25.78h | 1e-4 → 1e-5 | 37.81 |
161
+ | 3 | 10.2B | 26.16h | 3e-5 → 3e-6 | 37.72 |
162
+ | **Total** | **30.6B** | **77.76h** | — | **37.72** |
163
+
164
+ Training configuration:
165
+ - Optimizer: AdamW (fused), weight decay 0.1
166
+ - Schedule: Cosine with warmup
167
+ - Batch size: 4 per device, gradient accumulation 8 (effective ~262K tokens/step)
168
+ - Sequence length: 8,192
169
+ - Flash Attention 2, TF32 matmul, torch.compile
170
+ - Throughput: ~110K tokens/sec
171
+
172
+ ## Benchmark Results
173
+
174
+ 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).
175
+
176
+ ### This Model vs Training Progression
177
+
178
+ | Benchmark | **E3-best** | E3-final | E2-best | E2-final | E1-final |
179
+ |-----------|:-----------:|:--------:|:-------:|:--------:|:--------:|
180
+ | ARC-Easy | **33.00** | 33.16 | 32.83 | 33.12 | 33.46 |
181
+ | ARC-Challenge | **22.35** | 21.67 | 22.61 | 22.44 | 22.44 |
182
+ | BoolQ | **39.66** | 39.66 | 39.79 | 39.54 | 39.79 |
183
+ | HellaSwag | **26.14** | 26.03 | 26.08 | 25.91 | 26.03 |
184
+ | PIQA | **54.84** | 55.01 | 54.24 | 54.13 | 54.62 |
185
+ | SciQ | **45.20** | 46.30 | 44.10 | 45.50 | 43.60 |
186
+ | WinoGrande | **50.04** | 49.33 | 50.51 | 48.70 | 48.78 |
187
+ | TruthfulQA | **48.02** | 47.93 | 48.30 | 48.14 | 48.30 |
188
+ | GSM8K | **0.53** | 0.61 | 0.68 | 0.83 | 0.15 |
189
+ | MMLU | **22.96** | 22.87 | 23.00 | 22.98 | 22.99 |
190
+ | OpenBookQA | **27.60** | 27.60 | — | — | — |
191
+ | **Average (10)** | **34.27** | 34.26 | 34.21 | 34.13 | 34.02 |
192
+
193
+ ### Comparison with 1B Token Baselines (SmolLM2-70M)
194
+
195
+ These are results from training the same SmolLM2-70M model on various 1B-token datasets for 1 epoch, showing that Sutra-10B at 3 epochs achieves the highest performance for this model size.
196
+
197
+ | Dataset (1B tokens) | HellaSwag | PIQA | WinoGrande | ARC-C | MMLU | TruthfulQA | GSM8K | Avg |
198
+ |---------------------|-----------|------|------------|-------|------|------------|-------|-----|
199
+ | **Sutra-10B (3 epochs)** | **26.14** | **54.84** | **50.04** | **22.35** | 22.96 | **48.02** | 0.53 | **34.27** |
200
+ | Sutra-1B | 25.43 | 53.86 | 49.41 | 23.04 | 22.91 | 49.09 | 1.14 | 32.13 |
201
+ | FineWiki-1B | 25.56 | 51.69 | 48.86 | 24.15 | **23.34** | 51.16 | 0.91 | 32.24 |
202
+ | FinePDFs-1B | 25.58 | 52.56 | 50.51 | 22.44 | 22.95 | 51.41 | 1.21 | 32.38 |
203
+ | DCLM-Baseline-1B | 25.85 | 55.17 | 50.20 | 21.08 | 22.97 | 49.21 | 0.68 | 32.16 |
204
+ | FineWeb-Edu-1B | 25.72 | 55.11 | 50.36 | 21.25 | 22.96 | 48.11 | 1.21 | 32.10 |
205
+ | Essential-Web-1B | 26.02 | 55.44 | 48.30 | 20.99 | 22.95 | 49.59 | 1.29 | 32.08 |
206
+ | Synth-1B | 26.63 | 50.98 | 48.78 | 21.93 | 23.24 | 47.10 | 1.29 | 31.42 |
207
+
208
+ ## Key Findings
209
+
210
+ 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).
211
+
212
+ 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.
213
+
214
+ 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.
215
+
216
+ ## Usage
217
+
218
+ ```python
219
+ from transformers import AutoModelForCausalLM, AutoTokenizer
220
+
221
+ model = AutoModelForCausalLM.from_pretrained("codelion/SmolLM2-70M", trust_remote_code=True)
222
+ tokenizer = AutoTokenizer.from_pretrained("codelion/SmolLM2-70M")
223
+
224
+ input_text = "The theory of relativity states that"
225
+ inputs = tokenizer(input_text, return_tensors="pt")
226
+ outputs = model.generate(**inputs, max_new_tokens=100)
227
+ print(tokenizer.decode(outputs[0], skip_special_tokens=True))
228
+ ```
229
+
230
+ ## Limitations
231
+
232
+ - This is a 69M parameter base model (not instruction-tuned) — it generates completions, not conversational responses
233
+ - Performance is at the capacity ceiling for this model size; larger models would benefit more from the Sutra-10B dataset
234
+ - The model was trained primarily on English educational content
235
+
236
+ ## Related Resources
237
+
238
+ - **Dataset**: [codelion/sutra-10B](https://huggingface.co/datasets/codelion/sutra-10B) — 10B token pedagogical pretraining dataset
239
+ - **Sutra Framework**: Generates structured educational content optimized for LLM pretraining
240
+
241
+ ## License
242
+
243
+ Apache 2.0
config.json ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "LlamaForCausalLM"
4
+ ],
5
+ "attention_bias": false,
6
+ "attention_dropout": 0.0,
7
+ "bos_token_id": 0,
8
+ "dtype": "bfloat16",
9
+ "eos_token_id": 0,
10
+ "head_dim": 64,
11
+ "hidden_act": "silu",
12
+ "hidden_size": 384,
13
+ "initializer_range": 0.041666666666666664,
14
+ "intermediate_size": 1024,
15
+ "max_position_embeddings": 8192,
16
+ "mlp_bias": false,
17
+ "model_type": "llama",
18
+ "num_attention_heads": 6,
19
+ "num_hidden_layers": 32,
20
+ "num_key_value_heads": 2,
21
+ "pretraining_tp": 1,
22
+ "rms_norm_eps": 1e-05,
23
+ "rope_scaling": null,
24
+ "rope_theta": 100000,
25
+ "tie_word_embeddings": true,
26
+ "transformers_version": "4.57.6",
27
+ "use_cache": true,
28
+ "vocab_size": 49152
29
+ }
generation_config.json ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ {
2
+ "_from_model_config": true,
3
+ "bos_token_id": 0,
4
+ "eos_token_id": 0,
5
+ "transformers_version": "4.57.6"
6
+ }
merges.txt ADDED
The diff for this file is too large to render. See raw diff
 
model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e777a572b1103d8b91543c1e2bdb632d1aeec9bb3879fac90a27b4ce45c92a17
3
+ size 138494280
special_tokens_map.json ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "additional_special_tokens": [
3
+ "<|endoftext|>",
4
+ "<|im_start|>",
5
+ "<|im_end|>",
6
+ "<repo_name>",
7
+ "<reponame>",
8
+ "<file_sep>",
9
+ "<filename>",
10
+ "<gh_stars>",
11
+ "<issue_start>",
12
+ "<issue_comment>",
13
+ "<issue_closed>",
14
+ "<jupyter_start>",
15
+ "<jupyter_text>",
16
+ "<jupyter_code>",
17
+ "<jupyter_output>",
18
+ "<jupyter_script>",
19
+ "<empty_output>"
20
+ ],
21
+ "bos_token": {
22
+ "content": "<|endoftext|>",
23
+ "lstrip": false,
24
+ "normalized": false,
25
+ "rstrip": false,
26
+ "single_word": false
27
+ },
28
+ "eos_token": {
29
+ "content": "<|endoftext|>",
30
+ "lstrip": false,
31
+ "normalized": false,
32
+ "rstrip": false,
33
+ "single_word": false
34
+ },
35
+ "unk_token": {
36
+ "content": "<|endoftext|>",
37
+ "lstrip": false,
38
+ "normalized": false,
39
+ "rstrip": false,
40
+ "single_word": false
41
+ }
42
+ }
tokenizer.json ADDED
The diff for this file is too large to render. See raw diff
 
tokenizer_config.json ADDED
@@ -0,0 +1,168 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_prefix_space": false,
3
+ "added_tokens_decoder": {
4
+ "0": {
5
+ "content": "<|endoftext|>",
6
+ "lstrip": false,
7
+ "normalized": false,
8
+ "rstrip": false,
9
+ "single_word": false,
10
+ "special": true
11
+ },
12
+ "1": {
13
+ "content": "<|im_start|>",
14
+ "lstrip": false,
15
+ "normalized": false,
16
+ "rstrip": false,
17
+ "single_word": false,
18
+ "special": true
19
+ },
20
+ "2": {
21
+ "content": "<|im_end|>",
22
+ "lstrip": false,
23
+ "normalized": false,
24
+ "rstrip": false,
25
+ "single_word": false,
26
+ "special": true
27
+ },
28
+ "3": {
29
+ "content": "<repo_name>",
30
+ "lstrip": false,
31
+ "normalized": false,
32
+ "rstrip": false,
33
+ "single_word": false,
34
+ "special": true
35
+ },
36
+ "4": {
37
+ "content": "<reponame>",
38
+ "lstrip": false,
39
+ "normalized": false,
40
+ "rstrip": false,
41
+ "single_word": false,
42
+ "special": true
43
+ },
44
+ "5": {
45
+ "content": "<file_sep>",
46
+ "lstrip": false,
47
+ "normalized": false,
48
+ "rstrip": false,
49
+ "single_word": false,
50
+ "special": true
51
+ },
52
+ "6": {
53
+ "content": "<filename>",
54
+ "lstrip": false,
55
+ "normalized": false,
56
+ "rstrip": false,
57
+ "single_word": false,
58
+ "special": true
59
+ },
60
+ "7": {
61
+ "content": "<gh_stars>",
62
+ "lstrip": false,
63
+ "normalized": false,
64
+ "rstrip": false,
65
+ "single_word": false,
66
+ "special": true
67
+ },
68
+ "8": {
69
+ "content": "<issue_start>",
70
+ "lstrip": false,
71
+ "normalized": false,
72
+ "rstrip": false,
73
+ "single_word": false,
74
+ "special": true
75
+ },
76
+ "9": {
77
+ "content": "<issue_comment>",
78
+ "lstrip": false,
79
+ "normalized": false,
80
+ "rstrip": false,
81
+ "single_word": false,
82
+ "special": true
83
+ },
84
+ "10": {
85
+ "content": "<issue_closed>",
86
+ "lstrip": false,
87
+ "normalized": false,
88
+ "rstrip": false,
89
+ "single_word": false,
90
+ "special": true
91
+ },
92
+ "11": {
93
+ "content": "<jupyter_start>",
94
+ "lstrip": false,
95
+ "normalized": false,
96
+ "rstrip": false,
97
+ "single_word": false,
98
+ "special": true
99
+ },
100
+ "12": {
101
+ "content": "<jupyter_text>",
102
+ "lstrip": false,
103
+ "normalized": false,
104
+ "rstrip": false,
105
+ "single_word": false,
106
+ "special": true
107
+ },
108
+ "13": {
109
+ "content": "<jupyter_code>",
110
+ "lstrip": false,
111
+ "normalized": false,
112
+ "rstrip": false,
113
+ "single_word": false,
114
+ "special": true
115
+ },
116
+ "14": {
117
+ "content": "<jupyter_output>",
118
+ "lstrip": false,
119
+ "normalized": false,
120
+ "rstrip": false,
121
+ "single_word": false,
122
+ "special": true
123
+ },
124
+ "15": {
125
+ "content": "<jupyter_script>",
126
+ "lstrip": false,
127
+ "normalized": false,
128
+ "rstrip": false,
129
+ "single_word": false,
130
+ "special": true
131
+ },
132
+ "16": {
133
+ "content": "<empty_output>",
134
+ "lstrip": false,
135
+ "normalized": false,
136
+ "rstrip": false,
137
+ "single_word": false,
138
+ "special": true
139
+ }
140
+ },
141
+ "additional_special_tokens": [
142
+ "<|endoftext|>",
143
+ "<|im_start|>",
144
+ "<|im_end|>",
145
+ "<repo_name>",
146
+ "<reponame>",
147
+ "<file_sep>",
148
+ "<filename>",
149
+ "<gh_stars>",
150
+ "<issue_start>",
151
+ "<issue_comment>",
152
+ "<issue_closed>",
153
+ "<jupyter_start>",
154
+ "<jupyter_text>",
155
+ "<jupyter_code>",
156
+ "<jupyter_output>",
157
+ "<jupyter_script>",
158
+ "<empty_output>"
159
+ ],
160
+ "bos_token": "<|endoftext|>",
161
+ "clean_up_tokenization_spaces": false,
162
+ "eos_token": "<|endoftext|>",
163
+ "extra_special_tokens": {},
164
+ "model_max_length": 8192,
165
+ "tokenizer_class": "GPT2Tokenizer",
166
+ "unk_token": "<|endoftext|>",
167
+ "vocab_size": 49152
168
+ }
vocab.json ADDED
The diff for this file is too large to render. See raw diff