minimind/learning/day03/01_prereading.md

1.9 KiB
Raw Blame History

Day 3 Prereading: Pretrain 实战

今日目标

今天正式完成预训练。你要理解训练循环、学习率、梯度累积、混合精度、checkpoint,并产出 out/pretrain_768.pth。

必须掌握的基础概念

  • Epoch:完整遍历一次数据。
  • Step:一个 batch 的训练迭代。
  • Gradient accumulation:多个 micro-batch 累积后再 optimizer step。
  • Effective batch size:batch_size * accumulation_steps * world_size。
  • AdamW:主流 LLM 优化器。
  • Grad clip:限制梯度范数,降低训练爆炸风险。
  • Mixed precision:用 bf16/fp16 降低显存和提升吞吐。
  • Cosine LR schedule:学习率从高到低平滑衰减。

面试考点

  • 为什么 LLM pretrain 通常需要较大的学习率?
  • 梯度累积和直接大 batch 是否完全等价?
  • bf16 相比 fp16 的优势是什么?
  • 为什么要做 gradient clipping?
  • checkpoint 应该保存哪些状态,为什么只保存模型不够?

工业要求

  • 必须记录完整训练命令。
  • 必须记录 loss、lr、吞吐或耗时。
  • 必须测试断点恢复。
  • 训练中如果 loss NaN,先检查学习率、精度、数据异常、grad clip。
  • 每次保存权重时确认输出文件名,避免覆盖误解。

项目中要看的文件

  • trainer/train_pretrain.py
  • trainer/trainer_utils.py
  • dataset/lm_dataset.py::PretrainDataset

今日推荐命令

cd trainer
python train_pretrain.py \
  --epochs 2 \
  --batch_size 32 \
  --accumulation_steps 8 \
  --max_seq_len 340 \
  --learning_rate 5e-4 \
  --log_interval 100 \
  --save_interval 1000

如果显存不足:

python train_pretrain.py --batch_size 8 --accumulation_steps 32

今日记录模板

命令:
GPU:
数据:
hidden_size / layers:
batch_size:
accumulation_steps:
max_seq_len:
初始 loss:
中段 loss:
最终 loss:
是否发生 OOM:
checkpoint 是否成功: