Prhub

#47429 [Bugfix][Spec Decode] Add missing draft_id_to_target_id to DSparkDeepseekV4ForCausalLM

原始 PR 作者 Laurent-Zhang 合并时间 2026-07-06 22:55 文件变更 1 提交数 3 评论 2 代码增减 +2 / -0

执行摘要

修复 DeepSeek-V4-DSpark 草稿模型缺少 draft_id_to_target_id 属性

用户使用 DeepSeek-V4-Flash-DSpark 模型启用 DSpark 推测解码时遇到 AttributeError,原因在于 DSparkSpeculator.load_draft_model 无条件访问 model.draft_id_to_target_id,而 DSparkDeepseekV4ForCausalLM 未定义该属性。

建议快速合并。修复逻辑清晰,风险极低,且已被审核人批准。

讨论亮点

无实质性讨论,审核人 mgoin 批准并指出会本地验证修复的正确性。

实现拆解

  1. 在 vllm/models/deepseek_v4/nvidia/dspark.py 的 DSparkDeepseekV4ForCausalLM 类中添加 draft_id_to_target_id = None 类属性。
  2. 该属性为 None,与全词表映射逻辑一致:map_draft_to_target() 直接返回草稿 ID 无需重映射。
  3. 此变更使得 DSparkSpeculator 中的 if model.draft_id_to_target_id is not None 条件正确为 False,跳过不必要的 d2t 散射逻辑。
文件 模块 状态 重要度
vllm/models/deepseek_v4/nvidia/dspark.py 草稿模型 modified 5.5

关键源码片段

vllm/models/deepseek_v4/nvidia/dspark.py data-contract

添加缺失的 `draft_id_to_target_id` 属性,修复 DSpark 深搜推测解码启动崩溃。

# vllm/models/deepseek_v4/nvidia/dspark.py
# 在 DSparkDeepseekV4ForCausalLM 类中添加缺失属性
​
class DSparkDeepseekV4ForCausalLM(nn.Module):
    # Full-vocab draft: draft ids are target ids, no remapping needed.
    draft_id_to_target_id = None # 新增此行
​
    def __init__(self, *, vllm_config: VllmConfig, prefix: str = "") -> None:
        super().__init__()
        # ... 其余初始化代码不变

评论区精华

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

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

风险与影响

修复极小(仅 1 个文件 +2 行),且严格遵循已有模式(如 Qwen3DSparkForCausalLM 的相同写法)。回归风险极低,几乎不会影响其他模块。

影响范围仅限于使用 DeepSeek-V4-Flash-DSpark 模型并启用 DSpark 推测解码的场景。修复后该场景下启动不再崩溃,正常工作。

缺少测试覆盖

关联 Issue

#47418 [Bug]: The spe function of the DeepSeek-v4-flash-DSpark model fails to run

完整报告

参与讨论