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 +89 -0
- docs/phase5/gate5_status.json +5 -0
- docs/phase5/gate5_stdout.txt +5 -0
- docs/phase5/publish_status.json +17 -0
- docs/phase5/publish_stdout.txt +30 -0
- docs/phase5/status.json +11 -0
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 |
+
}
|