Prhub

#28026 [Bugfix][Spec] Fix multi-layer EAGLE DRAFT_EXTEND_V2 attn-TP logprob metadata capture

原始 PR 作者 Sunt-ing 合并时间 2026-06-13 10:26 文件变更 1 提交数 2 评论 3 代码增减 +2 / -1

执行摘要

修复多层 EAGLE attn-TP 的 logprob metadata 值错误

修复 Issue #26416 报告的错误:MultiLayerEagleDraftExtendCudaGraphRunner.get_forward_batch() 在 require_attn_tp_gather 分支中设置 global_num_tokens_for_logprob_cpu = [bs],但 DRAFT_EXTEND_V2 为所有 draft-extend tokens 计算 logits,正确的 metadata 应为 num_tokens = bs * num_tokens_per_bs。该错误与 global_num_tokens_cpu、global_dp_buffer_len、replay fill 以及 single-layer runner 的行为不一致。

此 PR 值得精读,作为理解 speculative decoding 中 tensor parallelism 与 logprob metadata 一致性的典型案例。

讨论亮点

无有效 review 讨论。

实现拆解

  1. 核心源码路径
    - python/sglang/srt/speculative/multi_layer_eagle_draft_extend_cuda_graph_runner.py(core-logic):源码主路径;包含 配置键调整;+2/-1
文件 模块 状态 重要度
python/sglang/srt/speculative/multi_layer_eagle_draft_extend_cuda_graph_runner.py 推测解码 modified 5.39

关键源码片段

python/sglang/srt/speculative/multi_layer_eagle_draft_extend_cuda_graph_runner.py core-logic

核心修复文件:在 get_forward_batch 的 require_attn_tp_gather 分支中将 global_num_tokens_for_logprob_cpu 从 [bs] 改为 [num_tokens],共 2 行新增 1 行删除。

def get_forward_batch(self, bs: int) -> ForwardBatch:
    buffers = self.buffers
    num_tokens = bs * self.num_tokens_per_bs # 总 token 数
    # ... 省略其他切片操作 ...
    if self.require_mlp_tp_gather:
        global_num_tokens_cpu = [num_tokens] * self.dp_size
        global_num_tokens_for_logprob_cpu = [num_tokens] * self.dp_size
    elif self.require_attn_tp_gather:
        global_num_tokens_cpu = [num_tokens]
        # 修复:DRAFT_EXTEND_V2 对所有 token 产生 logits,应与 mlp 分支一致
        global_num_tokens_for_logprob_cpu = [num_tokens] # 原为 [bs],导致 metadata 错误
    else:
        global_num_tokens_cpu = None
    # ... 后续复制到 GPU tensor 以供 Tensor Parallelism 使用 ...

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

风险极低:仅修改一行赋值,且修复方向明确(将 [bs] 改为 [num_tokens]),与 mlp 分支和 replay fill 逻辑对齐。未引入新的依赖或控制流。

影响范围限定在多 GPU attention-TP 场景下的 multi-layer EAGLE 推理,修复后发现 logprob 和 logit 值正确。对单 GPU 或 MLP-TP 路径无影响。

核心路径变更 缺少测试覆盖

关联 Issue

#26416 [Bug] multi-layer EAGLE DRAFT_EXTEND_V2 captures bs instead of num_tokens for attn-TP logprob metadata

完整报告

参与讨论