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

小模型上调好的学习率和 batch size,放大 100 倍还能用吗?

超参也要缩放
最优学习率随算力变小、最优 batch 随算力变大:按 DeepSeek LLM 拟出的式子,从 10¹⁷ FLOPs 的小实验到 67B 那一档,学习率该小 7.5 倍、batch 该大近 200 倍。要么拟合超参的缩放律,要么换一种参数化让它们不随宽度变(μP,C8 兑现)。
❓

本课一问:C5 教了怎么调学习率、warmup 和 batch。实际做法是先在小模型上扫一遍、找到最好的那组。模型放大 100 倍之后,这组超参还能直接用吗?

这一课先不碰:μP 具体怎么改参数化(C8 第 5 课)、batch 在多张卡上怎么切(C10)、Muon 为什么能用更大的学习率(C5 已讲原理)。

从已有出发

贯穿任务的最后一问:给一个 Qwen3.8-27B 级别的 run 定学习率和 batch。我们手里有的,是小模型上的经验——项目基线在 3.7M 参数上用的是 AdamW、学习率 3×10⁻³、每步 8,192 个 token(32 条 × 256)。

从已有出发 · 累计数据流 点已学环节看形状与参数
解码层
缩放律的演进:每一代都被上一代的某个真数字逼出来 · 高亮 = 本课所在的一代
  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. 解决了缩放不止一条轴:数据从哪来(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. ① 朴素方案
  2. ② 它在哪失败
  3. ③ 改进方案
朴素方案把小模型上调好的学习率和 batch 直接搬到大模型

DeepSeek LLM 先在 10¹⁷ FLOPs 的小预算上做网格搜索,再在 10¹⁷ 到 2×10¹⁹ 之间拟合最优学习率与 batch 随算力的变化。把他们的式子分别代入最小的实验和 67B 模型的预算:

预算最优学习率最优 batch(token)
10¹⁷ FLOPs(网格搜索的起点)2.34e-3106,190
DeepSeek LLM 67B(C = M·D = 9.95e+23)3.12e-420,654,134

直接搬,学习率大了 7.5 倍,batch 小了两个多数量级。

学习率偏大的后果有真实数据:Qwen3.8-Flash-Next 报告把学习率固定在最优值的 2 倍和 4 倍做压力测试,旧的 Qwen3.5 结构 + AdamW 在 2 倍时每万步 4.3 次 loss 尖峰,4 倍时 183 次,19,932 步里有 213 步超过裁剪阈值(自报,第③层可信度)。

改进:最优超参也是算力的函数

DeepSeek LLM 的做法分三步:

  1. 在 10¹⁷ FLOPs 上对 batch 和学习率做网格搜索,发现「近优」的区域很宽——泛化误差不超过最小值 0.25% 的组合都算近优。
  2. 在 10¹⁷ 到 2×10¹⁹ 之间的多个预算上重复,每个预算得到一片近优区域。
  3. 把「最优学习率 / 最优 batch」对算力 C 拟成幂律。
DeepSeek LLM 的超参缩放律(报告 §3.1 式 1)
= 0.3118 · C = 0.2920 · C, C =
👆 公式里带下划线的每一项都可以点——点哪项,讲哪项。
极小真数字算一次:7B 的 C = 4.228e+10 × 2×10¹² = 8.456e+22,代入得 η = 4.246e-4(实际用 4.2e-4),batch = 9,222,608 token = 2,252 条 4096 长的序列(实际 2,304 条)。

Qwen3.8-Flash-Next 报告:换了结构和优化器,重新拟合超参缩放律之后(第③层可信度:自报的内部 run)
batch 的另一种说法:临界 batch(Kaplan 2020 Eq. 1.4)

🎯

试四件事:① 预设从「10¹⁷」依次点到「DeepSeek LLM 67B」,看卡片里「直接搬 10¹⁷ 的超参」那一格:学习率大 7.5 倍;② 看两张小图里的方块(两个模型实际用的值)落在线上还是线外:7B 的学习率预测 4.25e-4 对实际 4.2e-4,67B 的 batch 预测 5,043 条对实际 4,608 条;③ 读 Qwen3.8 那张表:预测最优点和 η ×/÷ √2 的三个 run 差距在噪声内,旧配方(绿色之外、红底那行)下游平均低 4.14 分;④ 拖临界 batch 的 loss 滑杆:L = 3.0 时约 1.12M token,L = 2.0 时约 7.74M。

超参缩放律也不是一劳永逸:换了结构或优化器,最优点会挪。Qwen3.8-Flash-Next 换成 Gated DeltaNet 混合结构 + Muon 之后,在一个 48 层、156B-A7B 的 MoE 上用 419B token 对照:按新拟合预测的最优点(batch 8.4M、学习率 1.76×10⁻³)附近,学习率 ×/÷ √2、batch ×1.25 的 run 彼此只差 7e-4 以内;沿用旧 Qwen3.5 配方(batch 4.2M、学习率 6.8×10⁻⁴)末了 loss 高 7.8e-3。另一组 run(10.8B-A0.89B、4T token)上,batch 从旧配方的 12.6M 换成预测的 25.2M,loss 从 1.5774 降到 1.5702 。Qwen3 报告也说按三个预训练阶段分别拟合了学习率与 batch 的缩放律,但同样没有公开系数;Kimi K3 报告说用缩放律重新调了 batch、学习率、token/参数和模型形状,并自报「scaling 效率比 K2 高约 2.5 倍」——都属于只能看、不能复现的第③层。

⚠

常见误解一:「超参是模型结构的属性,和规模无关。」上面的式子说明最优学习率和 batch 都随算力系统地变;Qwen3.8 的例子说明,结构和优化器一换,整条关系也会挪。

常见误解二:「最优学习率是一个尖点,差一点就不行。」不是:DeepSeek 把误差在 0.25% 以内的都算近优,是一条宽带;Qwen3.8 的最优点附近,学习率乘或除 √2 都在噪声内。但「宽」有边界——偏到 4 倍,旧结构就频繁 loss 尖峰。

常见误解三:「batch 越大越好。」Qwen3.8 的对照里,比预测大 1.5 倍只差 5.0e-4,比预测小则 loss 急升;而 batch 大过临界值之后,多出来的样本只是在浪费算力(下面的临界 batch)。

🔍 batch 为什么要随 loss 变大?临界 batch 与 batch 渐增

McCandlish 等 2018 年提出「梯度噪声尺度」:batch 小于它时,加大 batch 几乎等比例减少所需步数;大于它时,多出的样本只是重复估计同一个梯度,浪费算力。Kaplan 2020 在语言模型上测得临界 batch 约为 Bcrit(L) = B*/L1/0.21,B* ≈ 2.1×10⁸ token(与分词绑定):loss 越低,临界 batch 越大。这也是很多团队「训练中逐步加大 batch」的理由:GPT-3 在前 40 亿到 120 亿 token 里从 32K token 线性加到满,Llama 3 405B 从 4M token 加到 8M、再到 16M,DeepSeek-V3 在前 469B token 里从 3,072 条序列加到 15,360 条。反例也有:Qwen3.8 换成 Muon 后发现,从一开始就用目标 batch 反而更好,渐增要多花 18.8% 的优化步数(自报)。现代做法本身也在变。

在我们自己的模型上看一眼

同样的问题缩到项目尺度:不同宽度的模型,最优学习率是否漂移?这一格读项目实验数据:

证据三问

问本课的回答
① 它解决什么问题?大模型上没法反复试超参;要从小实验推出大模型该用的学习率和 batch
② 数学上为什么可能有效?临界 batch 有梯度噪声的理论动机 ;μP 从无限宽极限推出让超参不随宽度变的参数化
③ 实验上为什么选了它?DeepSeek LLM 用小预算拟出的式子预测 7B、67B 的超参,与实际所用基本一致 ;Porian 2024 也拟出了学习率与 batch 的缩放律,并发现小 batch 时必须调 AdamW 的 β₂;Qwen3.8、K3 的对照是自报

一句话

📌

超参不是常数:最优学习率随算力变小、最优 batch 随算力变大,结构和优化器一换还会整体挪动——要么拟合超参的缩放律,要么换一种参数化让它们不随规模变。

🚦

先停在这里:记住「η 随 C 变小、B 随 C 变大」,这一章就走完了。
再深一层:展开临界 batch 的 Dig;读 DeepSeek LLM §3.1–3.2,它把超参缩放律和模型 / 数据缩放律放在一起讲。

下一个缺口

规模和超参都定了。可第 3 课的账本默认「新数据要多少有多少」——15T 个高质量 token 从哪来? → C7 数据:从哪来、怎么洗、怎么配

回扣先记下:μP(让小模型调好的学习率直接搬到大模型)在 C8 第 5 课兑现;那一课会用本课的「直接搬」当朴素方案。

你可能会问