Files
xtrain/docs/evolution.md
Gahow Wang b4bb426d48 docs: run v6 — FineWeb-edu graduation (val 3.07, new distribution)
第一版脱离 TinyStories:纯 FineWeb-edu 真实网页文本(2.255B 语料),架构同
v4/v5(dim768/18L, core 127.43M),8 卡 DDP bf16,2.29B tok/1.02ep,~1.9h
@218K tok/s。train 11.03→3.14,best/final FineWeb val 3.0652。

方法论:FineWeb val(3.07) 与 v0–v5 的 TinyStories val(~1.1) 不可比——真实
网页熵高,~3.0 是预期非回退;判据是采样质量 + transfer eval。

- 新增 docs/runs/06-v6-fineweb-edu-dim768.md:数据管线(scripts/fineweb_to_txt.py)
  / 架构(同 v4/v5,隔离数据变量) / 超参 / 结果(val 单调降无走平=未饱和) /
  方法论说明 / transfer eval(v6→TinyStories val 2.75 vs v5 native 1.11,纯通用
  数据对窄分布有代价) / v5-vs-v6 同提示词采样对比(v6 写真实说明文 vs v5 一律
  掉进小故事)
- README 对比表加 v6 行(val 单独标注分布) + 换轴说明 + v7 提案
- evolution.md scaling 表 v6 行定稿 + 数据轴 TinyStories→FineWeb-edu 毕业说明

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 22:21:43 +08:00

6.3 KiB
Raw Blame History

xtrain 演进总览 — 按维度记录每次变化

每个里程碑(T# 基建 phasev# 训练 run)在四个维度上分别改了什么、结果如何。 这是活文档:每次新 run 收尾时追加一行/一段。细节见各 docs/runs/0N-*.md、各 phase 设计文档、docs/known-issues.md

四个维度:算法autograd/优化器/精度/反向数学)· 模型架构dim/层/头/算子)· Infra(构建/显存/并行/吞吐)· 数据集(语料/token/epoch/tokenizer


一、基建 phaseT1T12—— 主要动「算法」与「Infra」

Phase 维度 变化 结果 / 验证
T1 Infra Rust↔CUDA FFI 构建链build.rs+nvcc, no_cuda cfggitea↔dash5 流 vector-add 跑通
T2 Infra Tensor 抽象dtype/shape/Storage, H↔D 拷贝)+ elementwise kernel roundtrip 保真
T3 算法 手写 tiled GEMM fwd/bwd + finite-diff 梯度检查 harness fwd vs cuBLAS 1e-7bwd vs finite-diff
T4 算法 tape autograd 引擎 + 11 算子 backward含梯度扇出累加attention 由 matmul+softmax 组合 每算子 finite-diff ≤2e-2
T5 模型架构 组装 tiny decoderRoPE+RMSNorm+SwiGLU+ embedding/reshape/transpose 算子 overfit 27/27 + PyTorch 对拍 B>1
T6 算法 + 数据集 手写 AdamW + 训练 loop + LR sched + grad clip + checkpointgpt2 BPE + TinyStories 真训出连贯英文
T7 Infra cuBLAS matmul + GPU 端 AdamW/grad-norm + 去 per-op sync ~3×2.7K→8.5K tok/s零回归
T8 Infra NCCL DDP单进程 thread-per-GPU+ 梯度 all-reduce 多卡(当时弱扩展 ~1.4×
T9 算法/模型架构 + Infra 加 per-head QK-normQwen3 兼容safetensors 导出 xserv 闭环:贪心逐 token 一致
T10 算法/Infra batched 多序列 forwardlinears flatten [B·S,dim] + fused batched SDPA + 每序列 RoPE 单卡 1524×MFU 0.4%→14%(修 KI-1
T11 Infra device caching/pool allocator(复用 op 输出显存,消 per-step cudaMalloc 单卡 2.3×8卡 461K tok/s 近线性(修 KI-5
T12 算法/Infra bf16 混合精度fp32 mastercuBLAS GemmExnorm/softmax/CE 保 fp32 dim768 OOM 解除29% 显存/+13% tok/s修 KI-2

二、Scaling runsv0v6—— 主要动「模型架构」与「数据集」

架构始终是 Qwen3-styleRoPE + RMSNorm + QK-norm + SwiGLUgpt2 50257 词表),只放大 dim/层;其余维度逐版变化如下:

ver 模型架构dim/层/头·hd · 核心/总参) 数据集(语料 · 实训 token · epoch 算法/精度 InfraGPU · 吞吐) 结果val · 备注)
v0 dim32/4L/2h · 41K/3.26M TinyStories 3MB 切片 · ~0.72M · — fp32 单序列 1 GPU val 3.80toy不可用
v1 dim256/8L/8h · 8.4M/34M TinyStories 全量 · 5.1M · 0.01ep fp32 单序列 1 GPU · 3.3K val 2.58
v2 dim384/12L/12h · 28M/67M TinyStories · 37M · 0.08ep fp32 单序列 4 GPU DDP · 3.6K val 1.71(暴露 KI-1/弱扩展)
v3 dim512/16L/16h · 67M/119M TinyStories · 246M · 0.53ep fp32 batched(T10) 1 GPU · 26K val 1.30
v4 dim768/18L/24h · 127M/205M TinyStories · 721M · 1.54ep fp32 batched 8 GPU(T11) · 145K val 1.17(仍欠拟合)
v5 dim768/18L同 v4 TinyStories · 2.49B · 5.33ep bf16(T12) 8 GPU · 217K val 1.11⚠️TinyStories 饱和3.5×数据仅↓5%
v6 dim768/18L同 v4/v5 FineWeb-edu 真实网页 · 2.29B · 1.02ep bf16 8 GPU · 218K val 3.07⚠️FineWeb 留出集,与 v0v5 不可比(真实网页熵高,~3.0 是预期);判据=采样质量+transfer。第一版脱离 TinyStories语言种类质变小故事→真实说明文transfer→TinyStories val 2.75(v5 native 1.11)纯通用数据对窄分布有代价val 末步仍单调降=未饱和

实训 token = steps×batch×seq非数据集大小。val 同一 1M-token TinyStories 留出集v0v5 可比v6 起换 FineWeb-edu 留出集,分布不同、不可比)。


三、各维度的累积演进(轴向看一条线怎么走的)

  • 算法:手写 autograd(tape)+扇出累加 → AdamW/LR-sched/grad-clip → +QK-norm(Qwen3) → batched forward → bf16 混合精度(fp32 master)。
  • 模型架构:固定 Qwen3-styledim 32→256→384→512→768;核心参数 41K→127M(总 3.26M→205M
  • Infra:单卡 fp32 → cuBLAS/GPU-optim(T7) → NCCL DDP(T8) → batched forward(T10) → caching allocator(T11) → bf16(T12)。吞吐 3.3K→217K tok/sMFU 0.4%→17%(每次提升都对应一块 perf 基建,详见 known-issues + MFU 分析)。
  • 数据集TinyStories 3MB 切片 → 全量 TinyStoriesepoch 0.01→5.33至饱和)→ v6 毕业到 FineWeb-edu 真实网页2.255B 语料1.02ep。tokenizer 全程 gpt2 BPE复用 xserv-tokenizerv6 刻意不换 tokenizer 以隔离「数据来源」变量KI-4 留后续版本)。
    • v5→v6 数据轴的质变v0v5 都吃合成幼儿故事TinyStories低熵、词汇受控v5 证明同尺寸模型在它上面已饱和v6 第一版换成真实教育类网页文本FineWeb-edu语言种类发生质变——采样从「只会写小故事」变成「能写历史/科学/说明文」。
    • ⚠️ val 不可比v0v5 的 val 是同一 TinyStories 1M 留出集(彼此可比);v6 起换 FineWeb-edu 留出集分布不同、val3.07)不能和 v0v5~1.1)比大小——真实网页熵高,~3.0 是预期而非回退。v6 的判据是采样质量 + transfer evalv6→TinyStories val 2.75 vs v5 native 1.11,量化「纯通用数据对窄分布的代价」)。

四、perf 杠杆台账(详见 known-issues.md

  • 已修KI-1 单序列 launch-boundT10· KI-5 per-op cudaMalloc 串行T11· KI-2 bf16/OOMT12
  • 待办KI-3 激活重计算(放大到 dim1024+ 时)· KI-4 大词表小 vocab · process-per-GPU要更高多卡线性时
  • 两次「先 profile 再动手」证伪了错误的拟修复KI-1「加大batch」、KI-5「分桶all-reduce」避免了无效大改——profile-first。