1.3 KiB
1.3 KiB
Day 3 Exam
A. 代码阅读题
train_pretrain.py中autocast_ctx是如何根据 device 决定的?scaler什么时候启用?bf16 下是否启用?optimizer.zero_grad(set_to_none=True)的好处是什么?SkipBatchSampler在 resume 时解决什么问题?torch.save({k: v.half().cpu() ...})为什么要转 half 和 cpu?
B. 计算题
假设:
batch_size = 32
accumulation_steps = 8
world_size = 1
max_seq_len = 340
回答:
- effective batch size 是多少条样本?
- 每次 optimizer step 理论上看过多少 token?
- 如果 world_size 变成 4,effective batch size 如何变化?
C. 故障排查题
- 训练第一个 step 就 OOM,你优先改哪些参数?
- loss 变成 NaN,可能原因有哪些?
- resume 后 loss 突然跳变,可能是什么状态没恢复?
- 训练很慢,如何判断瓶颈在数据加载还是 GPU 计算?
D. 实验题
完成一次 pretrain,并记录:
- loss 起点
- loss 终点
- 每 100 step 的 lr
- 每个 epoch 耗时
- 最终权重路径
然后运行:
python eval_llm.py --weight pretrain
评价 pretrain 模型是否已经具备聊天能力。为什么?
E. 通过标准
你能解释完整 pretrain loop,并成功得到 out/pretrain_768.pth。