diff --git a/docs/03-whitebox-opd.md b/docs/03-whitebox-opd.md index a54a971..87060a5 100644 --- a/docs/03-whitebox-opd.md +++ b/docs/03-whitebox-opd.md @@ -57,7 +57,7 @@ server 路径更粗:teacher 只回传 top-k logprobs 三张表(DT:2676-2679 ### 2.5 buffer 与 on-policy 生成(DT:846-932, 1071-1263) - `_RepeatBatchDataLoader` 把同一 collated batch 重复 `gradient_accumulation_steps` 次(DT:346-371),`_fill_buffer` 按**切片级**伯努利抽签 on/off-policy(`random() <= lmbda`,DT:879,主进程抽签后广播)。 -- **off-policy 切片用数据集自带 completion**(DT:893-894),不是 teacher 采样——SFT 数据混训,非蒸馏。 +- **off-policy 切片 = 在数据集自带 completion 的轨迹上做 KL 蒸馏**(DT:893-894 原样保留数据轨迹;损失仍是 KL,不是交叉熵)——GKD 的 λ 插值本义:λ=0 离线蒸馏、λ=1 纯 on-policy。两个易误解处:轨迹不是 teacher 现场采样的;DAPO prompt-only 下这些切片 labels 全 -100,KL 被掩码归零 = **静默空转的算力浪费**(唯一例外:`lmbda=0`+server 触发 teacher 生成,DT:901-906,即层 1 SFT 的数据来源)。 - on-policy 切片:vLLM colocate 生成(按 `vllm_sync_frequency` 同步权重,DT:1094-1106)或 `model.generate`(DT:1113-1168);生成结果重建 input_ids/labels 写回 buffer(DT:1170-1263,labels 只在 completion 段有效)。 - loss 前向是对已生成序列的 teacher-forcing(DT:2883)——"采样一次、前向算分布",GKD 标准做法。 @@ -70,7 +70,7 @@ server 路径更粗:teacher 只回传 top-k logprobs 三张表(DT:2676-2679 | 坑 | 位置 | 说明 | |----|------|------| | `lmbda=1 + no_teacher` 穿过守卫后在深处崩 | DT:2872 vs DT:2593 | 报错文案宣称合法,实际必崩——守卫条件写错 | -| off-policy ≠ teacher 蒸馏 | DT:893-894 | 语义上是"混 SFT",文档易误读 | +| off-policy ≠ "teacher 采样的离线数据" | DT:893-894 | 轨迹来自数据集固有 completion(损失仍是 KL);prompt-only 数据下整个切片被掩码归零,静默空转 | | `num_generations>1 且 lmbda<1` 会造重复样本 | CFG:593-596 | 官方注释自己承认 | ## 3. 与式(2) 的偏差清单(默认配置下)