从0训练LLM · 现代大模型体系 实验 实验 ≈ 30 分钟 页内实验 ×4
C6 规模:训多大、喂多少 实验课

实验课:在我们自己的小模型上拟一条缩放律

实验课:在我们的模型上拟一条缩放律
同一份语料、同一个种子,只改模型大小,再按固定算力扫一小片网格:在 3.7M 参数、50 万 token 的尺度上,把前四课的结论一条条核对——幂律还在不在,谷底在哪,数据受限时多训会怎样,学习率要不要随宽度调。
🧪

这是一堂实验课:第三层交互,真数据。前四课用的是别人公开的实验点;这一课换成我们自己从 0 训练的 minillm,在同一台机器上跑出来的真实日志。

本课的问题:缩放律那几条结论,在我们这个小得多的尺度上还成立吗?尤其是——我们的语料只有 501,615 个训练 token。

实验是怎么设计的

对应 04-实践项目/MILESTONES.md 的「C8 规模(scaling law)」(项目文件的章号与课程不同:课程的 C6 规模 = 项目的 C8)。遵守项目的全局约定:

整条流水线不动,只改它的尺寸:

从已有出发 · 累计数据流 点已学环节看形状与参数
解码层
缩放律的演进:每一代都被上一代的某个真数字逼出来 · 高亮 = 本课所在的一代
  1. 起点 训完再看 没有缩放律的时候
    解决了不需要任何理论,直接训。
    卡在一次就是全部预算:DeepSeek-V3 全程 278.8 万 H800 GPU 小时,没有第二次试错机会。
  2. 第一代 幂律:用小模型外推大模型 Hestness 2017 → Kaplan 2020
    解决了loss 随参数、数据、算力按幂律下降:参数翻倍,loss 乘以 0.9487(Kaplan 式 1.1)。幂律的多领域实证首见 Hestness 2017。
    卡在纯幂律没有底,直线外推偏乐观:Llama 3 的数据只用 ≤3×10²⁰ 的预算外推 10²²,预测 0.6574,真实 0.6931。
  3. 第一代 · 分配 Kaplan 的算力分配:主要加参数 Kaplan 2020
    解决了给出 N ∝ C0.73:预算 ×10,模型 ×5.37、数据只 ×1.86。
    卡在Gopher 280B 只训 300B token;同预算的 Chinchilla 70B 训 1.4T,MMLU 60.0% → 67.6%。
  4. 第二代 Chinchilla:参数与数据同比例长 Hoffmann 2022
    解决了每个预算扫一遍模型大小,loss 呈 U 形,谷底连成前沿:N ∝ C≈0.5,约 20 token/参数。页内用 Chinchilla 的真实点拟得 a = 0.511,外推到 5.76×10²³ 得 67.1B / 1.43T。
    卡在只算训练的账。模型要服务 10T 个 token 时,按训练最优做的模型总算力 2.02×10²⁴,换成同样 loss 的 34.1B 小模型只要 1.44×10²⁴。
  5. 解决了Kaplan 偏大的主因找到了:只数非 embedding 参数 + 规模小(Pearce & Song);末层计算、warmup、按规模调优化器(Porian)。
    卡在Chinchilla 自己的拟合系数也有错:正文取整后的系数在 5.76×10²³ 隐含 92.6 token/参数,Besiroglu 重拟合是 18.4;抛物线法本身也有偏差(Llama 3 数据上相当于 6.5% 的预算配错)。
  6. 第三代 过训练:为推理成本训小一点、久一点 LLaMA 2023 → Sardana 2023 → Gadre 2024
    解决了把推理的 2N FLOPs/token 算进总账,最优模型变小、数据变多:Llama 3 8B 1,875 token/参数,Qwen3-0.6B 60,000。
    卡在小模型上调好的超参搬不过去:按 DeepSeek LLM 的式子,10¹⁷ FLOPs 的最优学习率是 67B 那一档的 7.5 倍。
  7. 第四代 超参也拟缩放律(或换参数化) DeepSeek LLM 2024 → Qwen3 2025 → Qwen3.8 2026;μP 在 C8
    解决了最优学习率、batch 写成 C 的幂律:DeepSeek LLM 7B 预测 η = 4.25e-4,实际用 4.2e-4。
    卡在换结构、换优化器,最优点就挪:Qwen3.8 报告里旧配方末了 loss 高 7.8e-3、下游平均低 4.14 分(自报);多数团队不公开系数。
  8. 下一站 三种算力一起算:训练、推理、测试时 2025–2026 你在这里
    解决了缩放不止一条轴:数据从哪来(C7)、测试时多想一会儿(C12)都进了预算。
    卡在高质量数据会先用完:我们项目只有 50 万 token 语料,val 在第 300 步(约 4.9 个 epoch)最低 4.7713,之后一路升到 6.9065(实验课)。
数字口径:论文原文数字(Kaplan 2020、Hoffmann 2022、Besiroglu 2024、DeepSeek LLM 2024、Llama 3 2024、Qwen3 2025、Qwen3.8-Flash-Next 2026)与现算结果都存在 src/data/precomputed/c06-isoflop.json,由 gen_c06_isoflop.py 生成;Qwen3.8 的数字是官方自报(第③层可信度);项目一格来自 04-实践项目 的真实日志。

一、只改模型大小:幂律还在不在?

第 1 课的问题缩到我们的尺度:数据固定、步数固定,模型从小到大,最佳 val loss 是否在 log-log 图上排成直线?

🎯

看三件事(数据导出之后):① 点是否排成直线,R² 多少;② 最大的一两档是否开始变平甚至上翘——语料只有约 50 万 token,大模型很快就「喂不饱」;③ 指数本身不要和 Kaplan 的 0.076 比大小(数据、分词、训练长度都不同,第 1 课误解二),要看的是形状。

二、固定算力扫一小片网格:谷底在哪?

第 2 课的 IsoFLOP 剖面缩成 3 个预算 × 至少 4 个模型大小。和 Chinchilla 最大的不同:我们的点会把同一份语料重复喂很多遍(红圈 = 超过 4 遍)。

🎯

看三件事:① 每个预算的抛物线开口是否向上、谷底落在扫描范围之内还是边上(落在边上就说明范围没扫够);② 表里「谷底 N」和「按 20× 估的 N」差多少、往哪边偏;③ 重复超过 4 遍的点在不在谷底附近——在的话,这个谷底就混进了「数据重复」的影响(Muennighoff 2023)。

三、数据受限:多训会怎样?

第 3 课说过训练的上限是「有多少新数据」。这是项目里已经跑过的真实日志(runs/c6_overfit_1500steps):与基线完全相同,只把步数从 400 拉到 1,500。

⚖️

读图(c06-scaling.json › overfit,与 04-实践项目 README 的记录一致):val loss 在第 300 步最低 4.7713,之后一路升到 6.9065;训练集上的 loss 降到 0.704。基线的 400 步正是按这条曲线定的。换算成 epoch:300 步 × 8,192 token ÷ 501,615 ≈ 4.9 遍——和 Muennighoff 2023「4 遍以内和新数据差不多」的经验大致对得上,但只是一次观察,不是验证。

四、学习率要不要随宽度调?

第 4 课的问题:在标准参数化下,不同宽度的最优学习率会不会漂移?

五、把结论对回前四课

课那一课的结论在我们的尺度上
第 1 课loss 随规模按幂律下降,但有压不掉的底看「一」的直线度与大模型端
第 2 课固定算力时 loss 对模型大小是 U 形,谷底约 20 token/参数(Chinchilla 设置)看「二」的谷底与 20× 估算的差
第 3 课为推理可以过训练,上限是新数据的量「三」:约 5 个 epoch 之后就在背书
第 4 课最优学习率随规模变看「四」的最优列是否移动
⚖️

证据等级:这一课的所有结论都只属于「实验验证」 ,而且是在一个比公开缩放实验小 5 个数量级、数据会被反复重复的条件下。它能告诉你「规律在小尺度上长什么样」,不能用来反驳或证实前四课引用的大规模结论。

六、为项目拍板

🧭

你要拍板的三件事

  1. 要不要把模型做大?按 20 token/参数,501,615 个 token 只配得上约 25,081 个参数的模型;基线 3,688,704 个参数按 20× 需要约 74M token,我们不到 1%。理由要引用「一」和「三」的曲线。
  2. 固定算力,花在更大的模型还是更多的步数上?引用「二」的谷底。
  3. 学习率要不要随宽度调?引用「四」;如果漂移明显,记下来,C8 的 μP 会回来解决它。

验收标准(全部可测):

🔍 自己复现这个实验

在 04-实践项目/ 下:模型大小实验用 python3.12 -m minillm.train —run-name c6_size_d128 —set model.n_embd=128 这类命令逐档跑(只改一项),跑完 python3.12 -m minillm.export;脚本 experiments/c6_scaling.py 负责把所有 run 汇总成 知识平台/src/data/project/c06-scaling.json,格式见 C6 设计卡末尾的「项目实验数据约定」。同一台机器上不要并行跑多个训练,吞吐会互相干扰。

一句话

📌

在 3.7M 参数、50 万 token 的尺度上,缩放律的形状照样可以测,但先撞上的是数据墙:模型再大、训得再久,新数据不够就只是在背书。

下一个缺口

我们的语料只有 50 万 token,前沿模型要 15T 以上。数据从哪来、怎么洗、怎么配? → C7 数据:从哪来、怎么洗、怎么配