Cion-lab commited on
Commit
d6f4fbb
·
verified ·
1 Parent(s): b1fa1b5

Phase 5: keep the raw publish/Gate 5 stdout with the docs, so the private scratch repo is redundant

Browse files
docs/phase5/dryrun_card.md ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ckpt latest.json -> {'step': 3814, 'path_in_repo': 'final'}
2
+ tensors 200 params 106,194,240 dtypes ['F32']
3
+ card: 106,194,240 params from the safetensors header; 6 files hashed
4
+ ---
5
+ license: cc-by-sa-4.0
6
+ base_model: Cion-lab/ounce100m-v1
7
+ language: en
8
+ library_name: transformers
9
+ pipeline_tag: text-generation
10
+ tags: [ounce100m, from-scratch, base, decoder-only, huggingfacetb]
11
+ ---
12
+
13
+ # ounce100m-v1
14
+
15
+ A **106,194,240-parameter decoder-only transformer trained from scratch on
16
+ 999,817,216 tokens** of `Cion-lab/ounce100m-mix-v1`, in 3814 optimiser steps on
17
+ **2×Nvidia Tesla T4** inside Kaggle notebook sessions. It is the deliverable of a project whose whole point
18
+ was to find out what a ~100 M-parameter model reaches from ~1 B tokens of a curated public mix, and to
19
+ report it honestly, including where that is near chance.
20
+
21
+ ## Measured facts
22
+
23
+ | | |
24
+ |---|---|
25
+ | Parameters | **106,194,240** (recomputed from `model.safetensors`'s own header, not asserted) |
26
+ | Architecture | 22 layers, hidden 576, GQA 9 Q / 3 KV heads, SwiGLU 1536, RMSNorm 1e-05, RoPE θ=10000.0, **tied** embeddings, vocab 49,152 |
27
+ | Sequence length | 1024 — which is why ARC's 25-shot prompts are truncated from the left by the eval harness |
28
+ | Tokens consumed | **999,817,216** (99.98 % of the 1.0 B target) |
29
+ | Batch | micro 4 × accum 32 × 2 ranks = 262,144 tokens/step |
30
+ | Optimiser | `adamw_torch`, LR 0.0006, warmup fraction 0.02, trapezoid decay over the final 20.0 % of the schedule |
31
+ | Precision | fp16 autocast + fp32 master weights + GradScaler — asserted at the start of every session, and each session's log line `precision: fp16=True bf16=False scaler=GradScaler` is the evidence |
32
+ | Throughput | 12,150 tok/s in the session that produced this export |
33
+ | Attention | `eager` |
34
+ | Gradient checkpointing | `False` |
35
+ | Randomness | model seed 20260919, data seed 20260919 |
36
+ | Wall clock | 4.59 h in the session that produced this export. The run is split across sessions at checkpoint boundaries, so this is **not** the total training time |
37
+ | Loss | 4.43187255859375 -> 4.264701843261719 |
38
+ | Validation PPL | **75.98** on Cion-lab/ounce100m-mix-v1's held-out `val/` shards (22,934,043 tokens, never trained on) |
39
+
40
+ ## Data
41
+
42
+ `Cion-lab/ounce100m-mix-v1`: 1,109,714,831 training tokens in 139 shards + 22,934,043
43
+ held-out validation tokens, cut with `HuggingFaceTB/SmolLM2-135M:tokenizer.json` (49,152 vocab,
44
+ Apache-2.0), from 15 public sources at ≥15
45
+ per shard. Format and loading code are in that dataset's card.
46
+
47
+ **Contamination.** Overlap was measured mechanically against benchmark **train/validation/dev** material of
48
+ the eight evaluation tasks (13-token windows, counts only — no benchmark item text was ever read, and test
49
+ splits stayed untouched until evaluation). `audit.json` in the dataset repo records
50
+ `overlap_total = 0` over 1,073,047 documents and
51
+ 21,898 held-out documents, `tasks_covered` = 8/8.
52
+ Building it required dropping 5878 documents
53
+ (17,366,967 tokens)
54
+ that matched reference material; the exact exclusion masks ship in `filter/` so the mix is reproducible.
55
+
56
+ ## Evaluate it
57
+
58
+ ```bash
59
+ pip install "lm-eval==0.4.13"
60
+ lm_eval --model hf --model_args pretrained=Cion-lab/ounce100m-v1,dtype=float16,trust_remote_code=False \
61
+ --tasks arc_challenge,arc_easy,hellaswag,mmlu,piqa,truthfulqa_mc1,truthfulqa_mc2,winogrande,gsm8k \
62
+ --batch_size 8 --seed 42 --log_samples
63
+ ```
64
+
65
+ The run's own results, with shot counts and chance levels beside every number, are in `eval/` here. Four of
66
+ the eight tasks (Winogrande, HellaSwag, PIQA, TruthfulQA) are scored by the harness on *validation* — the
67
+ splits this project was allowed to read — and the other four on test.
68
+
69
+ ## Files
70
+
71
+ | file | sha256 | bytes |
72
+ |---|---|---|
73
+ | `config.json` | be63e8d2dc708f8b… | 723 |
74
+ | `cursor.json` | c5ea3ba9293f3278… | 205 |
75
+ | `generation_config.json` | 1dac20576af54bdd… | 219 |
76
+ | `model.safetensors` | 669ac130a8853cc2… | 424,799,272 |
77
+ | `run_summary.json` | d7789a4e70e296c3… | 968 |
78
+ | `tokenizer.json` | 9ca9acddb6525a19… | 2,104,556 |
79
+
80
+ `cursor.json` is the data position this checkpoint corresponds to: samples consumed, step, seed, the
81
+ corpus fingerprint and a hash of the visit-order permutation, so the resume can be checked rather than
82
+ trusted.
83
+
84
+ ## Not in this model
85
+
86
+ No instruction tuning, no RLHF, no chat template — it is a base model, deliberately. It has ~1 B tokens of
87
+ training against the ~300 B of the comparable published reference models, so expect scores at or near
88
+ chance on several tasks; that is the experiment's result, not a defect to be engineered around.
89
+
docs/phase5/gate5_status.json ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ {
2
+ "err": null,
3
+ "repo": "Cion-lab/ounce100m-v1",
4
+ "rev": "55f23ef5d0e8e6a60adad23bf8a2ffffc6bc7580"
5
+ }
docs/phase5/gate5_stdout.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ clean-room download (anonymous) -> /tmp/cleanroom_ounce100m-v1
2
+ VERIFY tensors 200 params 106,194,240 dtypes ['F32']
3
+ GENERATED: The city of Paris is the of people all the - are a of of world. is part the, and the of world is - and the
4
+ GEN_SHA 8e51e7aeee1ed518
5
+ VERDICT GATE5 load_ok=True generate_ok=True params_ok=True tied_ok=True vocab=49152
docs/phase5/publish_status.json ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "err": null,
3
+ "files": [
4
+ ".gitattributes",
5
+ "README.md",
6
+ "config.json",
7
+ "cursor.json",
8
+ "generation_config.json",
9
+ "model.safetensors",
10
+ "run_summary.json",
11
+ "special_tokens_map.json",
12
+ "tokenizer.json",
13
+ "tokenizer_config.json",
14
+ "training_args.bin"
15
+ ],
16
+ "rev": "55f23ef5d0e8e6a60adad23bf8a2ffffc6bc7580"
17
+ }
docs/phase5/publish_stdout.txt ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ckpt latest.json -> {'step': 3814, 'path_in_repo': 'final'}
2
+ tokenizer source for config files: HuggingFaceTB/SmolLM2-135M
3
+ tokenizer config tokenizer_config.json 3658 bytes sha256 4bb9af56a342753d
4
+ tokenizer config special_tokens_map.json 831 bytes sha256 e786b595b9a23148
5
+ tensors 200 params 106,194,240 dtypes ['F32']
6
+ card: 106,194,240 params from the safetensors header; 8 files hashed
7
+ uploading 8 of 10 files to Cion-lab/ounce100m-v1
8
+ PUBLISH_JSON_BEGIN
9
+ {
10
+ "repo": "Cion-lab/ounce100m-v1",
11
+ "params": 106194240,
12
+ "tensors": 200,
13
+ "files": 11,
14
+ "missing": [],
15
+ "anon_readback": {
16
+ "README.md": true,
17
+ "config.json": true,
18
+ "cursor.json": true,
19
+ "generation_config.json": true,
20
+ "model.safetensors": true,
21
+ "run_summary.json": true,
22
+ "special_tokens_map.json": true,
23
+ "tokenizer.json": true,
24
+ "tokenizer_config.json": true,
25
+ "training_args.bin": true
26
+ },
27
+ "published_verified": true
28
+ }
29
+ PUBLISH_JSON_END
30
+ NEXT (Gate 5, on a fresh instance with an empty cache): python build/publish_model.py --repo Cion-lab/ounce100m-v1 --verify-only
docs/phase5/status.json ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "err": null,
3
+ "argv": [
4
+ "publish_model.py",
5
+ "--repo",
6
+ "Cion-lab/ounce100m-v1",
7
+ "--src",
8
+ "/kaggle/working/mixroot",
9
+ "--dry-run"
10
+ ]
11
+ }