Prhub

#42143 fix(eagle3): read norm_before_fc from eagle_config for NVIDIA checkpoint

原始 PR 作者 ghost 合并时间 2026-05-23 16:21 文件变更 1 提交数 13 评论 6 代码增减 +7 / -3

执行摘要

修复 NVIDIA Eagle3 检查点 norm_before_fc 配置解析

PR body 指出 NVIDIA 的 Eagle3 检查点将 norm_before_fc 存储在嵌套的 eagle_config 字典中,而现有代码仅从顶层读取,导致这些检查点无法正确启用 FC 前 RMSNorm,降低推测解码的接受率。

值得精读:小但关键的 bugfix,展示了配置兼容性处理的模式。对理解 Eagle3 配置加载有帮助。

讨论亮点

gemini-code-assist[bot] 指出 norm_before_fcuse_aux_hidden_state 的处理不一致——前者添加了回退,后者没有。建议统一。但项目维护者 benchislett 指出 NVIDIA 官方检查点(如 nvidia/gpt-oss-120b-Eagle3-v3) 同时将 norm_before_fc 存储在顶层和 eagle_config 中以保持兼容,因此回退不是必需的,但仍安全。最终 benchislett 批准了 PR。

实现拆解

  1. llama_eagle3.pyLlamaModel.__init__ 中,将 eagle_config 的获取方式从 getattr(self.config, "eagle_config", None) 改为 getattr(self.config, "eagle_config", None) or {},确保后续可直接进行字典操作,避免空值判断。
  2. 相应调整 use_aux_hidden_state 的读取逻辑,直接从 eagle_config 字典中获取。
  3. 新增 norm_before_fc 的读取:优先使用 eagle_config.get("norm_before_fc"),若不存在则回退到 getattr(self.config, "norm_before_fc", False),并用 bool() 确保返回布尔值。
文件 模块 状态 重要度
vllm/model_executor/models/llama_eagle3.py 模型层 modified 6.18

关键符号

LlamaModel.__init__

关键源码片段

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

该文件是 Eagle3 模型配置加载的核心实现,修改了 `norm_before_fc` 和 `use_aux_hidden_state` 的读取逻辑,支持从嵌套的 `eagle_config` 字典读取配置,并添加了回退机制,是本次变更的全部内容。

# 在 LlamaModel.__init__ 中,配置读取部分修改如下:
# 原先:eagle_config = getattr(self.config, "eagle_config", None)
# 现在:直接初始化为空字典,避免后续空值判断
eagle_config = getattr(self.config, "eagle_config", None) or {}# use_aux_hidden_state:直接从 eagle_config 读取,不再需要检查是否为 None
if "use_aux_hidden_state" in eagle_config:
    self.use_aux_hidden_state = eagle_config["use_aux_hidden_state"]
else:
    self.use_aux_hidden_state = True# norm_before_fc:优先从 eagle_config 读取,回退到顶层配置
# 使用 bool() 确保类型一致
self.norm_before_fc = bool(
    eagle_config.get(
        "norm_before_fc", getattr(self.config, "norm_before_fc", False)
    )
)

评论区精华

norm_before_fc 实现与 use_aux_hidden_state 不一致 正确性

gemini-code-assist[bot] 指出 norm_before_fc 添加了回退逻辑,而 use_aux_hidden_state 没有,可能导致配置不一致。

结论:benchislett 指出 NVIDIA 官方检查点同时在顶层和 eagle_config 中设置 norm_before_fc,因此当前改动足够安全,不需要修改 use_aux_hidden_state。 · 已解决

风险与影响

变更范围仅 10 行,且包含向下兼容的回退逻辑,对已有模型无影响。但 use_aux_hidden_state 未加回退,如果未来有模型在顶层定义了该属性但不在 eagle_config 中,可能继续存在问题。不过当前所有已知模型均将 use_aux_hidden_state 放在 eagle_config 中,风险较低。

直接影响使用 NVIDIA GPT-OSS Eagle3 检查点的用户(如 gpt-oss-120b-Eagle3-v3),修复后 FC 前归一化正常启用,推测解码接受率提升(作者测试显示 1.31x 加速)。对使用其他 Eagle3 检查点(如基于 Qwen 的)无影响。

缺少测试覆盖 配置兼容性逻辑未完全统一

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论