Data strategy for the 1B dormouse pretrain — best quality-per-byte on a small budget (2026-10-15)
Scope: what data to train b1 (1.07B total / 57M active, byte-level, 5–20B byte
budget on one 5060 Ti) on, and what to add. Read-only pass; no other file was
modified. Evidence tags follow AGENTS §1.4: every number carries an arXiv id or
a [web] URL, and every derived/assumed line is marked DERIVED or
SPECULATION. Over-training citations marked [sib] are reused from
docs/research/2026-10-15-1b-tech-verification.md, not re-derived (its §6).
- The owner is not data-poor for this budget — he is data-poor relative to
labs, and that is the wrong yardstick. The filtered corpus is 19.7 GB
(
AGENTS.md§2.6) = 19.7e9 bytes. A 5–20B byte budget is 0.25–1.01 passes over the filtered set and 0.11–0.43 passes over the 46.2 GB raw set (DERIVED, from the plan’s §2.2 byte count). The run is epoch-limited, not volume-limited: at ≤1 epoch the marginal value of each byte is at its maximum, so filtering and mixture dominate, and “add 100 TB” is not this run’s problem. - The regime is not Chinchilla. Chinchilla puts a 1B at ~20 B tokens (2203.15556); SmolLM2 (2502.02737) trains 1.7B on ~11T tokens, MiniCPM (2404.06395) derives “much higher compute-optimal data-model ratio than Chinchilla”, and 2403.08540 shows over-training is predictable and useful when inference matters. Our 5–20B bytes at 0.40 GFLOP/byte (plan §2.2) is 2–8e18 FLOPs → 1.1–4.3 days at 20 TFLOP/s (plan §2.2 table, DERIVED).
- Mixture, not volume. Port SmolLM2’s stage shape (web→+code→+math→decay upsample; exact fractions in §2) and Nemotron-CC’s “4× more unique tokens + synthetic rephrasing” (2412.02595). Byte-level adds one wrinkle: patches shrink sequence positions 3–5× (plan §2.4; BLT avg patch 8 B, 2412.09871) but the bytes seen are unchanged — budget in bytes, spend compute in patches.
- The pipeline mostly exists.
crates/dormouse-dataalready ships a DCLM-classifier (bin/filter.rs, 1723 LOC), FNV shard/anchors (bin/shard.rs,bin/anchors.rs) and a byte-level ChatML SFT packer (src/sft.rs, 396 LOC). No new filtering logic is needed — the work is adormouse data buildCLI (~200–400 LOC of wiring, §6). - Start here (§6 order): carve eval → run the 5B smoke on filtered+code → sweep the web:code ratio at 9.2M → 3-stage decay curriculum for b1.
0. The corpus ledger (facts, no interpretation)
Section titled “0. The corpus ledger (facts, no interpretation)”| item | fact | source |
|---|---|---|
| raw corpus | 46.2 GB UTF-8, /mnt/…/aria_data/pretrain/real/corpus.bin, unfiltered |
AGENTS.md §2.6 |
| filtered corpus | 19.7 GB, DCLM-classifier 0.5 + exact dedup, 272M docs → 104.2M kept | AGENTS.md §2.6 |
| eval tail | 500 MB carve, sibling real_eval/eval_tail.bin; old 30 MB kept as .30m.bak |
AGENTS.md §2.6 |
| eval window rule | eval_batches × batch × seq_len bytes; a BPB is comparable only within one window |
AGENTS.md §2.6 |
| the port’s day-1 stream | port/src/dormouse/train/data.py (180 LOC): mmap .bin, 64 MB ring, byte-range split, rewind/skip_bytes; no shuffle/parquet |
port/…/data.py:1-180 |
| the crate’s extras | filter.rs 1723 · sft.rs 396 · anchors.rs 334 · shard.rs 113 LOC (total dormouse-data/src = 3845) |
wc -l crates/dormouse-data |
| Engram n-gram orders | ORDERS = [2,3,4], signed-FNV keys, raw (unreduced) |
crates/dormouse-data/src/lib.rs:84,105 |
| burn-side A/B history | ByteFlow 3.466 vs plain-bytes 3.947 at equal params; ByteFlow 100k = 2.255 BPB; Engram “20–25%” law refuted; allocation swept | plan §1.1; [sib] §4 |
Consequence (DERIVED): with 19.7e9 filtered bytes, a 20B-byte run is ~1.01 passes; a 5B run is 0.25 passes. There is no data-constrained regime until the budget exceeds 19.7 GB or the mixture wants more of a scarce domain.
1. How much data does a 1.07B need in the correct regime?
Section titled “1. How much data does a 1.07B need in the correct regime?”| candidate | source / date | key facts & metrics | credibility | effort to adopt |
|---|---|---|---|---|
| Chinchilla ratio | 2203.15556 (2022); replication 2404.10102 | ~20 tokens/param at compute-optimum; the replication re-derives and finds the published third-method estimates “inconsistent”, needing >600k experiments | HIGH (canonical) | none — reference only |
| Data-constrained scaling | 2305.16264 (Muennighoff) | ≤4 epochs of repeats ≈ negligible loss change; half-life R*_D ≈ 15; gains up to ~16 epochs; when constrained, spend compute on epochs not params | HIGH | informs our ≤1-epoch decision |
| Over-training | 2403.08540 (Gadre) | over-training is predictable; predicts a 1.4B/900B-token (32×) run and a 6.9B/138B run; perplexity→downstream power law | HIGH | none — reference |
| SmolLM2 | 2502.02737 | 1.7B on ~11T tokens (~2 epochs), 4 stages, WSD; ~$250k compute; small (135M/360M) models did single-stage | HIGH | the stage template (§2) |
| MiniCPM | 2404.06395 | 1.2B/2.4B non-embed; WSD; “much higher compute-optimal data-model ratio than Chinchilla” | HIGH | WSD + wind-tunnel |
| Data-scarce/over-train bias | 2608.07222 [sib] |
standard loss forms systematically mis-estimate at both extremes; one capacity–data interaction exponent cuts MAPE 1.5–3× | MED | “fit our own law” (sib verdict) |
| Data-constrained 2026 | 2606.06888 | MIR (masked-input reg.) ≈ 1.3× more unique data; SoftQ couples N and D (Chinchilla’s additive form is misspecified) | MED | optional reg. trick |
| Byte-level cost | 2105.13626 (ByT5); 2412.09871 (BLT) | byte sequences are ~4× longer for English (ByT5); BLT is the first FLOP-controlled byte scaling study to 8B/4T bytes, avg patch 8 B | HIGH | budget in bytes, not BPE tokens |
The two readings, stated honestly (DERIVED):
- Against total capacity (1.07B params) — Chinchilla’s ~20 tok/param says ~20B bytes is optimal; 5–20B bytes is 0.25–1.0× Chinchilla. Not over-trained.
- Against active compute (57M params) — 5–20B bytes is ~88–350× the active-param Chinchilla point.
- FLAG — an inconsistency to fix, not propagate:
[sib]§6 labels a “1B on ~10B tokens” run “10× overtraining”. 10B bytes / 1.07B params = 9.3 bytes/param, below Chinchilla’s 20, so that label holds only under the active-param reading. Quote the parameter count with the label. - For a fixed model, more data monotonically lowers loss (power law) until 4-epoch decay (2305.16264) or the irreducible floor — so the question is not “how much is optimal” but “when does the eval curve stop paying”. §6 gives the stop conditions.
ByteFlow wrinkle (DERIVED from plan §2.4 + 2412.09871): patching cuts sequence positions 3–5× (our measured criterion) or to an 8-byte average (BLT), but every byte is still fed. A “10B-token” byte budget is 10B bytes of data seen at 2–3.3B patch positions — the data volume is unchanged; only the compute per byte falls. Log both numbers on every eval line.
2. Mixture design for a byte-level model on a small budget
Section titled “2. Mixture design for a byte-level model on a small budget”2.1 What the reference recipes actually did (read off the sources)
Section titled “2.1 What the reference recipes actually did (read off the sources)”SmolLM2 stage table (2502.02737, §4; HIGH credibility — primary HTML read):
| stage | tokens | web | code | math |
|---|---|---|---|---|
| 1 | 0–6T | 60% FineWeb-Edu / 40% DCLM | 10% StarCoderData | 0% |
| 2 | 6–8T | 75% (same 60/40) | 20% | 5% OWM |
| 3 | 8–10T | FW-Edu/DCLM → 40/60 | Stack-Edu | ~10% (InfiMM-WebMath + OWM) |
| 4 (decay, 10% of steps) | 10–11T | 58% + 4% Cosmopedia | 24% Stack-Edu | 14% (FineMath4+ + InfiWebMath-3+ + 0.08% OWM + 0.02% AugGSM8K) |
SmolLM2’s own benchmark deltas across stages: math 3.21→3.7→7.27→22.07, code 8.87→10.56→16.75→23.21 (Table 3). The stage-4 upsample is where math and code pay. Their 60/40 and 40/60 web ablations are at Table 1 (FineWeb-Edu wins MMLU/ARC/OpenBookQA; DCLM wins HellaSwag/CommonsenseQA; the mix gets both). The 135M/360M models did single-stage, high-quality-only (DCLM filtered with the FineWeb-Edu classifier, drop score-0, downsample 1–2) — the small-model lesson.
Nemotron-CC (2412.02595; HIGH): ~4× more unique tokens than FineWebEdu-2
and DCLM because those only sharded-dedup; Nemotron-CC-HQ raises MMLU +5.6
over DCLM at similar size; validated on a 15T-token horizon; 6.3T tokens total,
with a synthetic-rephrasing subset. [web] Nemotron-CC-v2.1 (HF) = 2.5T
tokens of organic + translated + synthetically-rephrased English.
Other candidate sources (for the add-list):
| source | tokens / size | license | note |
|---|---|---|---|
| FineWeb-Edu (2406.17557 lineage; 1.3T tok) | 1.3T | ODC-By | educational classifier |
| DCLM-baseline (2406.11794) | 3.8T | CC-BY-4.0 [web] | fastText classifier; 7B/2.6T→64% MMLU 5-shot |
| Nemotron-CC (2412.02595) | 6.3T | CC-BY-4.0 [web] | 4× unique tokens; HQ +5.6 MMLU |
| The Stack v2 / StarCoder2Data (2402.19173) | 3.3–4.3T tok; ~40% of repos permissive [web] | permissive subset only | licence filter is mandatory |
| FineMath4+/3+ (2502.02737 §3.3) | 10B / 34B | ODC-By [web] | best small-budget math source in the sweep |
| CulturaX (2309.09400) | 6.3T, 167 langs | [web] check per-lang | RU+EN source |
| FineWeb2 (2506.20920) | 20 TB / 5B docs / 1000+ langs | ODC-By | RU source if a native pipeline is wanted |
| Cosmopedia (2402.09739) | 25B synthetic | Apache-2.0 [web] | synthetic textbooks |
2.2 Multilingual (RU+EN heavy by owner default)
Section titled “2.2 Multilingual (RU+EN heavy by owner default)”Adding a second language to a fixed-capacity 1B buys RU at a cost in EN — the “curse of multilinguality” (Conneau et al., ACL 2020, aclanthology.org/2020.acl-main.747). The 2025 re-examination (2510.25947) finds the penalty is not inevitable when the mixture is balanced. SPECULATION: no source gives a RU:EN ratio at 1B/5–20B; based on 2510.25947 (balance matters) and 2305.16284-style domain mixtures, I assume an EN:RU split of ~90:10 late in training (RU as a decay upsample, like math/code) costs less than mixing RU from step 0. The cheap RU route is CulturaX’s Russian shard + a Wikipedia RU dump, since both are already filtered and need no new classifier. Verify by scoring a RU eval carve — we have none today, so a bilingual claim is currently unmeasurable.
2.3 Mixture as an optimization, not a guess
Section titled “2.3 Mixture as an optimization, not a guess”Two published methods predict the best mixture from small runs: Data Mixing Laws (2403.16952) optimizes a 1B/100B-token RedPajama mixture “comparable to 48% more steps on the default mixture”; RegMix (2407.01492) regresses many small runs. Both want many small runs — which is exactly the 9.2M smoke we can afford. SPECULATION: given our 1-GPU budget, the realistic use is a coarse grid (web:code ∈ {90:10, 80:20} × math ∈ {0, 5%, 10%} late), not a fitted law.
3. The dedup + filter stack mapped to our infra
Section titled “3. The dedup + filter stack mapped to our infra”| layer | what the literature says | what we already have | verdict |
|---|---|---|---|
| exact dedup | removes repeated docs; models emit memorized text 10× less often and need fewer steps (Lee et al., ACL 2022, aclanthology.org/2022.acl-long.577) | bin/filter.rs: 128-bit-hash exact dedup, dedup_cap default 48M entries |
ship as-is |
| fuzzy dedup (MinHash) | single-band MinHash LSH, 10 hashes (SmolLM2’s FineMath pipeline, 2502.02737 §3.3.2) | not implemented | add later; exact dedup covers most of a ≤1-epoch run |
| quality classifier | fastText beats LLM-prompt (“AskLLM”) filtering (2406.11794; [web] CS294 slides) |
bin/filter.rs ports the DCLM classifier (signed-FNV) |
ship as-is |
| perplexity gate | KenLM/CCNet doc-perplexity filter is one of three canonical signals (Wenzek 2020 LREC; 2409.09613) | none | optional; a tiny byte n-gram scorer is ~50 LOC |
| PII / toxicity | Dolma runs PII + toxicity filters (2402.00159) | none in-tree | add if the corpus is redistributed; not needed for a private run |
| dedup metric | SoftDedup reweights duplicates instead of deleting (2407.06654) | none | skip; exact dedup suffices |
| at-rest compression | zstd would cut disk; [web] FineWeb2 ships 20 TB as ~8 TB compressed (~2.5×) |
bin/anchors.rs already gunzips; the trainer reads plain bytes only |
SPECULATION: keep .bin plain; the drive is 188 GB free and mmap wants plain bytes |
Dedup math at 5–10B bytes (DERIVED): at ~2 KB/doc, 10e9 bytes ≈ 5M docs; a
128-bit key each = 80 MB of set — trivial against the 48M-entry cap. Exact
dedup is not the bottleneck; it is already done on the 19.7 GB filtered copy
(AGENTS.md §2.6). Do not re-dedup the filtered stream; re-run only if new data
is mixed in.
“Many passes on fewer bytes” vs “one pass on more” (the owner’s question): 2305.16264 answers it directly — ≤4 epochs of repeats cost ≈ nothing, so at a fixed compute you may legitimately reuse a good 5 GB four times. But 2510.01631 and 2402.09739 both show the quality of the repeated source then dominates. For us: one pass over the filtered 19.7 GB beats four passes over the raw 46.2 GB’s best 5 GB, because the filtered copy is the classifier+dedup output and a 20B-byte budget never needs a repeat.
4. SFT + agent-trace data (post-train lane)
Section titled “4. SFT + agent-trace data (post-train lane)”Byte-level packing is already solved in-tree. crates/dormouse-data/src/sft.rs
(396 LOC) renders a conversation as
<|im_start|>{role}\n{content}<|im_end|>\n with a byte-indexed loss mask
(1 on assistant content + <|im_end|>) and the byte-shift
(target_mask) that matches the trainer’s targets[q]=bytes[q+1] indexing.
There is no tokenizer and no chat template to borrow — the “tokens ≈ bytes/4”
penalty (ByT5, 2105.13626) applies to the cost of the shell, not to the data.
| dataset | size | licence | fit for 1B+Engram |
|---|---|---|---|
| SWE-Gym (2412.21139) | 2,438 instances; +19% resolve when used for training | HF card [web] (check repo) |
SWE agent traces + verifier training |
| Open-SWE-Traces (2606.16038) | 207,489 trajectories, 9 languages | NVIDIA HF [web] |
broadest SWE trace set found |
| Nemotron-SWE-v1 / SWE-Hero OpenHands (HF) | 59k trajectories; MIT/Apache-2.0/BSD-2/3 filter | commercial-safe [web] | repo-grounded OpenHands traces |
| ToolACE | function-calling SFT | Apache-2.0 [web] | tool-use shell; verifier-friendly |
| AgentInstruct (2407.03502) | 25M synthetic prompt/response pairs | HF microsoft/orca-agentinstruct-1M-v1 |
generative-teaching shell |
| Qwen-AgentWorld (2606.24597) | world model / env simulator, 7 domains | Apache-2.0 [web] | roll-out env for the post-train loop |
Post-train SFT mix (from docs/architecture/post-training.md): 30–50% expert
- 30–50% synthetic-verified + 10–20% repair + 10–25% chat. Caution: a 1B byte-level model has ~no headroom for multi-turn chat and tool use; SmolLM2’s 1.7B needed a filtered SmolTalk (2402.02737 §5) and its own 135M/360M cut function-calling entirely. SPECULATION: for b1, ship the trajectory shell (SWE + tool) first and defer chat.
5. Synthetic data on a small compute budget
Section titled “5. Synthetic data on a small compute budget”| candidate | source | finding | evidence level |
|---|---|---|---|
| Synthetic-in-pretrain study | 2510.01631 (EMNLP 2025) | >1000 LLMs, >100k GPU-h: rephrased-synthetic alone is not faster than natural web; 1/3 rephrased + 2/3 natural speeds up 5–10× at larger budgets; good ratio ~30%; textbook-style alone is worse at small budgets; generators >8B params are no better; rephrased shows no collapse, textbook-mixtures do | HIGH (large-scale) |
| Cosmopedia | 2402.09739 | 25B synthetic-textbook tokens from Mixtral | MED |
| phi “Textbooks” | 2306.11644 | textbook-quality synthetic corpus for a small model | MED (narrow) |
| AgentInstruct | 2407.03502 | 25M synthetic pairs via agentic flows for post-training | HIGH for SFT |
| model collapse | 2305.17493 (Shumailov); 2404.01413 (Gerstgrasser) | recursion erodes tails; accumulating data instead of replacing prevents collapse | HIGH |
Verdict for us (DERIVED from 2510.01631): at a 5–20B-byte budget the
“larger data budgets” condition where rephrasing pays is not met — 2510.01631
says textbook-alone hurts at small budgets. So: do not synthesize pretrain
bulk. Spend any synthetic budget on the SFT/agent shell, where AgentInstruct
and ToolACE are the proven pattern, and on a verifier loop (the K2-style
rubric + executable check from docs/archive/research/2026-09-26-long-context-agentic.md:58).
The self-evolution taxonomy is 2608.03392 (docs/architecture/post-training.md:36;
[sib] reuse) — framework/memory/skills/tools/workflow/environment; it is a
post-train structure, not a pretrain data source.
6. Recommended plan
Section titled “6. Recommended plan”6.1 Decision table (sized for the existing corpus + the minimum to add)
Section titled “6.1 Decision table (sized for the existing corpus + the minimum to add)”| decision | choice | why (source) | confidence |
|---|---|---|---|
| corpus | filtered 19.7 GB as the base; add nothing for a ≤19.7 GB byte budget | 0.25–1.01 passes; AGENTS.md §2.6 |
HIGH |
| web mix | start 60/40 FineWeb-Edu/DCLM-equivalent, shift to 40/60 in stage 3 | SmolLM2 Table 1 + stage 3 (2502.02737) | HIGH |
| code share | 10% early → 20% late, from Stack-Edu-style filtered code | SmolLM2 stages; Stack-Edu (~125B tok) | HIGH |
| code licence | permissive subset only; The Stack v2’s ~40%-permissive filter is mandatory | 2402.19173; HF card [web] |
HIGH |
| math share | 0 early → 5–10% mid → ~14% decay; finest-filtered math only | SmolLM2 stage table; FineMath 2×/6× GSM8K/MATH over InfiMM | HIGH |
| multilingual | EN default; RU as a ≤10% decay upsample, not from step 0 | 2510.25947; Conneau 2020 | SPECULATION |
| dedup | exact (already done on filtered); skip re-dedup; MinHash only if new data is mixed | Lee 2022; bin/filter.rs |
HIGH |
| PII/toxicity | not needed for a private run; add only if redistributing | Dolma 2402.00159 | MED |
| curriculum | single-stage if ≤5B; 3-stage WSD (web → +code → math/code decay) if ≥10B | SmolLM2 small vs large; 2404.06395 | MED |
| zstd at rest | keep plain .bin (mmap); do not compress the training stream |
only the anchors tool reads gzip; [web] FineWeb2 ~2.5× |
SPECULATION |
| eval carve | carve a RU + code + math eval tail now; one window for every arm | AGENTS.md §2.6 (a BPB is window-specific) |
HIGH |
| stop condition | stop adding data when: (a) >4 epochs on the added source, or (b) eval-BPB improvement <0.005 over 2 evals, or (c) budget > 4× the unique bytes | 2305.16264 (4-epoch rule); plateau protocol | MED |
6.2 Token budget by wall-clock (DERIVED from plan §2.2: 0.40 GFLOP/byte)
Section titled “6.2 Token budget by wall-clock (DERIVED from plan §2.2: 0.40 GFLOP/byte)”| bytes | at 5 TFLOP/s | at 10 | at 20 |
|---|---|---|---|
| 5B | 4.3 d | 2.1 d | 1.1 d |
| 10B | 8.6 d | 4.3 d | 2.1 d |
| 20B | 17.3 d | 8.6 d | 4.3 d |
Decision: 5B first checkpoint review → extend to 10B → only then 20B. The 20B endpoint crosses one epoch on the filtered set (needs the raw copy or a repeat).
6.3 What to ADD (only if the budget exceeds 19.7 GB, all permissively licensed)
Section titled “6.3 What to ADD (only if the budget exceeds 19.7 GB, all permissively licensed)”- Nemotron-CC-v2.1 (CC-BY-4.0) — 2.5T tokens, 4× unique-token density.
- The Stack v2 permissive subset (2402.19173) — code, licence-filtered.
- FineMath3+/4+ (ODC-By) — the code/math decay upsample.
- CulturaX Russian / FineWeb2 RU shard (check per-language licence) — the RU slice.
- SWE-Gym + ToolACE + Nemotron-SWE-v1 (Apache-2.0 / MIT) — SFT only.
6.4 dormouse data build CLI — LOC estimate
Section titled “6.4 dormouse data build CLI — LOC estimate”The mechanisms already exist in Rust (bin/filter.rs DCLM classifier + exact
dedup, bin/shard.rs FNV sharding, src/sft.rs byte ChatML). Per plan §7 the
data pipeline stays in Rust (PyO3), so:
| option | LOC | note |
|---|---|---|
| A — Python orchestration calling the Rust bins | 200–400 | subprocess filter→shard→pack; matches the spike’s data-pipeline band (300–800) |
B — port DCLM classifier to Python (fasttext-wheel) |
600–1200 | re-implements filter.rs; rejected by plan §7 |
| C — add MinHash + perplexity gate in Rust | +150–250 | only if new data is mixed |
Recommended: A. Add data build as: filter → dedup → shard → eval-carve → pack, with the eval= window printed and the no-leak split enforced
(data.py:134-173 already implements the byte-range split).
6.5 Start here (order)
Section titled “6.5 Start here (order)”- Carve the eval tail (RU + code + math) and print its window — nothing below
is measurable without it (
AGENTS.md§2.6). - Land
dormouse data build(option A) so the mixture is a config, not a script. - 9.2M smoke: sweep web:code ∈ {90:10, 80:20}, math ∈ {0, 5%} — 3 seeds each
(
AGENTS.md§1.2). - 5B-byte b1 run on filtered+code (stage-1 shape), log BPB +
engram=+fused kda=every eval. - If the 5B curve is still falling steeply, extend to 10B with the stage-2/3 decay mix; do not add bulk data before that decision.
VERIFIED (sourced)
Section titled “VERIFIED (sourced)”- Chinchilla ~20 tok/param (2203.15556); the replication questions its third method (2404.10102).
- ≤4 epochs of repeats ≈ free; half-life R*_D≈15 (2305.16264). Over-training is predictable (2403.08540).
- SmolLM2 = 1.7B/~11T tokens/4 stages with the exact fractions in §2.1 (2502.02737). MiniCPM derives a >Chinchilla ratio (2404.06395).
- Nemotron-CC: 4× unique tokens, HQ +5.6 MMLU, synthetic rephrasing (2412.02595). DCLM 7B/2.6T→64% MMLU (2406.11794). FineWeb-Edu 1.3T, DCLM 3.8T (2502.02737 §3.2).
- Byte models: ~4× longer sequences (2105.13626); BLT first FLOP-controlled byte scaling, avg patch 8 B (2412.09871).
- Exact dedup cuts memorization 10× (Lee et al. ACL 2022); Dolma runs PII/toxicity filters (2402.00159); CCNet/KenLM is a canonical quality gate (Wenzek 2020).
- Synthetic: 1/3 rephrased + 2/3 natural = 5–10× at large budgets; textbook-alone hurts at small budgets; ~30% optimal; >8B generator no better (2510.01631). Cosmopedia 25B (2402.09739). Collapse is prevented by accumulating data (2305.17493; 2404.01413).
- Agent traces: SWE-Gym 2,438 instances/+19% (2412.21139); Open-SWE-Traces 207,489/9 langs (2606.16038); ToolACE + Qwen-AgentWorld Apache-2.0 [web]; AgentInstruct 25M pairs (2407.03502).
- The pipeline exists:
filter.rs1723 /sft.rs396 /shard.rs113 /anchors.rs334 LOC.
SPECULATION (my inference, marked inline)
Section titled “SPECULATION (my inference, marked inline)”- EN:RU = 90:10 as a decay upsample — no source gives a ratio at 1B/5–20B; inferred from 2510.25947 (balance) + the SmolLM2 stage shape.
- Keep
.binplain, skip zstd — inferred from the mmap read path and a ~2.5×[web]compression figure; not benchmarked here. dormouse data build= 200–400 LOC — inherited from the torch-spike’s data-pipeline band, not measured.- “One pass over filtered beats four passes over raw” — DERIVED from 2305.16264 + the fact that the filtered copy is already classifier+dedup output; our own BPB has not confirmed it.
Confidence
Section titled “Confidence”HIGH on: the regime framing (Chinchilla vs over-training), the SmolLM2 stage template, the dedup/licence facts, and the “budget ≤1 epoch of the filtered corpus” arithmetic. MED on: the exact stage fractions for a byte-level model (SmolLM2 is BPE; patch rates change effective positions), the RU ratio, and any per-source token count cited from a dataset card. LOW/SPECULATION on: patch-rate→token-count translation and the zstd/LOC estimates.
Open questions the sweep could not close
Section titled “Open questions the sweep could not close”- No published mixture for a byte-level model at 1B/5–20B. SmolLM2/BLT are the nearest, and neither publishes byte-level stage fractions.
- No RU:EN ratio for a 1B bilingual; and we have no RU eval carve — the claim is unmeasurable today.
- No head-to-head of ByteFlow-patched vs plain bytes on a quality-filtered corpus — the 3.466/3.947 win is at 9.2M on the old stream (plan §1.1).
- The
[sib]“10× overtraining” label is inconsistent with a 20-tok/param reading; the parameter count must travel with it.
Sources (read this session)
Section titled “Sources (read this session)”arxiv.org/abs/{2203.15556, 2404.10102, 2305.16264, 2403.08540, 2502.02737, 2404.06395, 2606.06888, 2105.13626, 2412.09871, 2406.11794, 2412.02595, 2402.19173, 2506.20920, 2309.09400, 2403.16952, 2407.01492, 2510.25947, 2510.01631, 2402.09739, 2306.11644, 2407.03502, 2412.21139, 2606.16038, 2606.24597, 2305.17493, 2404.01413, 2409.09613}
plus [web]: aclanthology.org/2022.acl-long.577 (Lee dedup), aclanthology.org/2020.acl-main.747
(curse of multilinguality), huggingface.co/datasets/nvidia/Nemotron-CC-v2.1,
huggingface.co/datasets/HuggingFaceFW/fineweb-2, huggingface.co/SWE-Gym,
huggingface.co/datasets/nvidia/Open-SWE-Traces, github.com/QwenLM/Qwen-AgentWorld,
docs/decisions/2026-10-15-1b-readiness-plan.md, docs/research/2026-10-15-1b-tech-verification.md,
docs/archive/research/2026-09-26-byte-lm-recipes.md, crates/dormouse-data/src/*.
Owed (not done — read-only pass): a line in docs-site/tools/manifest.mjs; the
task forbade touching other files.