0ca60ea93f
trainer.py(对应 docs/03 §5 U4): - build_generated_batch: 纯函数,generate 输出重建 ids/attention/labels; "首个 eos 及之前有效"用 cumsum-self==0 实现,稳健对付 pad==eos / pad!=eos / 无eos - DistillTrainer.compute_loss 四步:生成(no_grad,unwrap)→重建→双前向→移位+divergence - 损失几何复用 compute_prompt_length(与 sft_loss 同款);梯度只经 student - 构造时校验 teacher/student 同 tokenizer(白盒前提,比 DT:2876 更早) - teacher eval+冻结、设备迁移推迟到 compute_loss;同层1退出梯度累积新式契约 test_distill.py(对应 docs/03 §2.5): - build_generated_batch 6 例:eos居中屏蔽/无eos全监督/batch混长/pad==eos/立即eos/prompt段-100 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>