Prhub

#43482 [Bugfix] Apply fc_norm in Eagle3DeepseekV2 combine_hidden_states

原始 PR 作者 yubofredwang 合并时间 2026-05-26 15:46 文件变更 1 提交数 4 评论 1 代码增减 +6 / -0

执行摘要

修复深求 Eagle3 推断缺失 fc_norm 归一化

PR #42764 为 EAGLE-3 推测解码添加了 fc_norm 支持,但只在 llama_eagle3.pycombine_hidden_states 中正确应用了归一化,deepseek_eagle3.py 被遗漏。这导致 fc_norm 权重被加载但从未生效,模型精度受损。

推荐合并。修复明确、无风险,且与已有模式一致。值得关注的是此类跨模型实现对齐的遗漏,后续应加强类似模式的代码审查。

讨论亮点

无显著的 Review 讨论;lightseek-botywang96 均直接批准,gemini-code-assist[bot] 仅自动评论未提出异议。

实现拆解

  1. 定位遗漏逻辑:在 vllm/model_executor/models/deepseek_eagle3.pycombine_hidden_states 方法中,原本只有一行 return self.model.fc(hidden_states),缺少对的检查和应用。
  2. 添加归一化步骤:参考 llama_eagle3.py 中已有的实现,在调用之前,检查 self.model.fc_norm 是否为 None。若不为 None,将 hidden_statesself.model.num_aux_hidden_states 在最后一维分块,然后逐个应用对应的归一化层,最后拼接回原形状。
  3. 保持原有逻辑:无论是否应用归一化,最终都通过 self.model.fc 进行全连接变换,确保兼容性和接口一致。
文件 模块 状态 重要度
vllm/model_executor/models/deepseek_eagle3.py 模型执行器 modified 5.94

关键符号

combine_hidden_states

关键源码片段

vllm/model_executor/models/deepseek_eagle3.py data-contract

核心修复文件:在 `combine_hidden_states` 方法中添加 `fc_norm` 归一化步骤,修复缺失逻辑。

def combine_hidden_states(
    self,
    hidden_states: torch.Tensor,
) -> torch.Tensor:
    # 如果 fc_norm 已配置,对多个辅助隐藏状态逐块归一化
    if self.model.fc_norm is not None:
        # 按辅助隐藏状态数量(num_aux_hidden_states)在最后一维分块
        chunks = hidden_states.chunk(self.model.num_aux_hidden_states, dim=-1)
        # 对每个块应用对应的归一化层,再拼接回完整张量
        hidden_states = torch.cat(
            [norm(chunk) for norm, chunk in zip(self.model.fc_norm, chunks)],
            dim=-1,
        )
    # 最终通过全连接层输出
    return self.model.fc(hidden_states)

评论区精华

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

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

风险与影响

风险极低。变更仅添加了条件分支,当 fc_normNone 时行为不变;且逻辑与 llama_eagle3.py 中对齐,降低了跨模型的不一致性风险。无回归或性能影响。

仅影响 deepseek_eagle3.py 模块,修复了 EAGLE-3 推测解码在 DeepSeek-架构目标模型上的精度问题。用户无需修改配置,fc_norm 配置项(如 fc_norm: true)现可正确生效。

遗漏逻辑修复

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论