层1: 修复 HF 梯度累积契约坑——compute_loss 按新式契约返回 sum/num_items_in_batch
根因(探针定案):预训练模型真实 CE≈0.85,训练日志 7.5≈0.94×8(累积步数)。 Qwen3 forward 接受 loss_kwargs → Trainer 走新式契约不再除以累积步数,我们 返回裸 mean 导致日志与梯度同放大 8 倍。sft_loss 纯函数不动,适配收口在 compute_loss;docs/02 §5 勘误起点预期(~0.85)并记录此坑。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -83,5 +83,5 @@ F.cross_entropy(..., ignore_index=-100)
|
||||
## 5. 验证方式
|
||||
|
||||
1. **本地(CPU)**:collator 单测对拍参考行为——构造超长解答样本断言 prompt 未被截空;断言 -100 位置分布;断言 enable_thinking 两种取值下边界正确。数据加载单测:断言 `except:pass` 已变显式报错。
|
||||
2. **远程**:先 sanity(官方 SFTTrainer 或我们管线跑 50 步)确认 loss 从 ~2-3 稳定下降;再全量 1 epoch。W&B 或实时日志盯 `sft/loss` 与有效 token 数。
|
||||
2. **远程**:先 sanity(官方 SFTTrainer 或我们管线跑 50 步)确认 loss 稳定下降;再全量 1 epoch。W&B 或实时日志盯 `sft/loss` 与有效 token 数。⚠️ 两条实测勘误(2026-07-18):① 起点不是想象的 ~2-3——预训练 Qwen3-0.6B 对 M3 风格数学文本的真实 CE ≈ **0.85**(探针 scripts/diag_loss_probe.py 实测),健康曲线 ≈ 0.9→0.4;② **HF 梯度累积契约坑**:模型 forward 接受 loss_kwargs 时(Qwen3 是),自定义 compute_loss 必须返回 `sum/num_items_in_batch` 而非裸 mean,否则日志与梯度都放大"累积步数"倍(首跑 loss 7.5 ≈ 0.94×8 即此坑;修复在 trainer.py compute_loss)。
|
||||
3. 关账判据:1k 子集 1 epoch 跑完,loss 曲线正常,checkpoint 能被 `from_pretrained` 加载并生成通顺文本。
|
||||
|
||||
Reference in New Issue
Block a user