恢复训练中的学习率尖峰问题 | AI生成和翻译

Home 2026.06

现在我掌握了全局。以下是发生的事情和修正后的命令:


200k 运行已完成,但 val_bpb 退化了:0.780(第130k步)→ 0.865(第140k步)→ 0.801(第200k步)。min_val_bpb 从未超过第130k检查点。

问题:130k 运行的 warmdown 已完成(lrm=0.05)。当你使用相同的 LR 参数启动 200k 运行时,调度器基于 200k 总数重新计算——warmdown 从第70k步开始,而不是第45k步。在第130k步时,新的 lrm 为 0.537(而旧运行中为 0.05)。这是一个约 10 倍的 LR 尖峰,破坏了优化器状态。

以下是修正方法:从第130k检查点(最佳 val_bpb=0.780)恢复,并将所有 lr 参数按 final_lr_frac(0.05)缩放,使得有效 LR 与 130k 运行结束时的值完全匹配:

cd /mnt/data/nanochat && PYTORCH_ALLOC_CONF=expandable_segments:True .venv/bin/python -m scripts.base_train \
  --run=rtx4070-d12-200k-v2 \
  --depth=12 \
  --aspect-ratio=64 \
  --head-dim=128 \
  --max-seq-len=2048 \
  --window-pattern=L \
  --device-batch-size=8 \
  --total-batch-size=65536 \
  --num-iterations=200000 \
  --resume-from-step=130000 \
  --warmdown-ratio=0 \
  --final-lr-frac=0.05 \
  --embedding-lr=0.015 \
  --unembedding-lr=0.0004 \
  --matrix-lr=0.001 \
  --scalar-lr=0.025 \
  --weight-decay=0.28 \
  --warmup-steps=40 \
  --eval-every=5000 \
  --core-metric-every=10000 \
  --sample-every=10000 \
  --save-every=10000 \
  --tracker=none

数学运算:

原始 LR 参数 × final_lr_frac = 缩放后的 LR(与第130k步完全匹配)
  embedding:   0.3  × 0.05 = 0.015
  unembedding: 0.008 × 0.05 = 0.0004
  matrix:      0.02 × 0.05 = 0.001
  scalar:      0.5  × 0.05 = 0.025

--warmdown-ratio=0:所有70k新步的 LR 保持平坦(无衰减)
--warmup-steps=40:简短预热,因为优化器状态已经均衡
--resume-from-step=130000:从最佳检查点恢复

为何有效:

先清理旧的检查点以腾出空间:

ssh lzw@192.168.1.36 "cd /home/lzw/.cache/nanochat/base_checkpoints/d12/ && ls -1 | grep -v '130000' | xargs rm -v && df -h /"

Back Donate