NanoChat RTX 4070 训练摘要 | AI生成和翻译

Home 2026.06

以下是详尽总结:

============================================================
 NANOCHAT 训练运行总结(train.log)
============================================================

模型架构
  层数:          12
  注意力头数:    6(6个KV头,无GQA)
  嵌入维度:      768
  序列长度:      2048
  词表大小:      32768
  窗口模式:      L(全局上下文注意力,无滑动窗口)
  总参数量:      286,261,730(约2.86亿)

注意:run_rtx4070.sh脚本指定depth=8/batch=32768/seq=1024/5000次迭代,
但实际运行采用depth=12/batch=65536/seq=2048/10000次迭代。
您运行的是自定义命令,而非脚本。

训练配置
  设备批次:      8个序列 x 2048个token = 每个微批次16384个token
  梯度累积:      4步
  总批次:        65536个token
  迭代次数:      10000
  总token数:     655,360,000(约6.55亿)
  Token/参数比:  5.95(Chinchilla最优值为20,因此训练不足)

  优化器:        Muon(矩阵权重)+ AdamW(嵌入、反嵌入、标量)
  矩阵学习率:    0.02(Muon)
  嵌入学习率:    0.3(Adam)
  反嵌入学习率:  0.008(Adam)
  权重衰减:      0.099(从深度12的0.28缩放而来)
  预热步数:      40步
  衰减起始:      从第6500步开始(65%比例)
  最终学习率比例:0.05

硬件与速度
  GPU:            NVIDIA RTX 4070(12 GB)
  闪存注意力:     不支持(使用SDPA回退,SM 89上无FA3)
  FP8:            未使用
  计算精度:       bfloat16
  吞吐量:        约55,700 token/秒(稳定状态)
  单步耗时:      约1,177毫秒
  峰值显存:      9,448 MiB(12 GB的78%)
  总用时:        196分钟(约3.3小时)
  MFU:           显示为0%(代码中未定义RTX 4070的峰值FLOPS)

验证BPB(比特每字节)进展
  步数     BPB     备注
  -----   ------   -----
  0       3.221   随机初始化
  500     1.280   大幅下降,快速学习
  1000    1.167
  1500    1.124
  2000    1.100   样本开始显示基础知识
  2500    1.082
  3000    1.070
  3500    1.060
  4000    1.044   衰减尚未开始
  4500    1.031
  5000    1.018
  5500    1.006   跌破1.0 BPB
  6000    0.995
  6500    0.985   衰减从此处开始
  7000    0.976
  7500    0.967
  8000    0.959
  8500    0.951
  9000    0.945
  9500    0.939
  10000   0.935   最终

  趋势:单调递减,无过拟合。训练结束时仍在改善
  → 模型未达到饱和,可以继续训练。

训练损失(来自前100行)
  步数0:    10.40(= log2(32768),随机初始化预期值)
  步数10:   10.16
  步数20:    8.71(快速预热增益)
  步数30:    7.43
  步数40:    6.80(预热在此达到峰值)
  步数49:    6.51
  最终:     ~2.98

最终样本质量(第10000步)
  - “法国的首都”→ 回答“该国的南部”(错误)
  - “金的化学符号”→ 循环“金原子”
  - “如果昨天是星期五”→ 混淆
  - “热的反义词”→ 正确(冷),但循环
  - “太阳系的行星”→ 正确列出!
  - “5x+3=13”→ 完全失败

  结论:2.86亿参数,6.55亿token。掌握基础知识,
  能列举事物,但推理和事实准确性弱。
  在此规模下,重复/循环现象常见。

先前尝试(run_rtx4070.log)
  日志显示一次早期的SFT运行(深度=8),约在第124步后出现NaN,
  可能由学习率或数据问题导致。该次运行还评估了
  ARC-Easy(25%)、ARC-Challenge(25%)、MMLU(25%)、GSM8K(0%)、
  HumanEval(0%)——均在随机水平,符合对基于NaN权重训练的模型的预期。

评估
  + 训练顺利完成,无NaN,无崩溃
  + 损失曲线平滑,单调改善
  + RTX 4070上吞吐量良好(约56k token/秒)
  + 显存使用舒适(78%)

  - Token/参数比5.95,远低于Chinchilla最优值(20)
  - 模型在结束时仍在改善→应继续训练更长时间
  - 样本质量显示模型相对于其规模训练不足
  - RTX 4070上无法使用FA3→采用SDPA回退(速度较慢)
  - MFU报告异常(缺少RTX 4070的峰值FLOPS查询)

  改进建议:要么训练约4万步以上(达到Chinchilla比例),
  要么缩小模型规模(减少参数)以匹配6.55亿token的预算。

Back Donate