AttributeError: ‘NoneType’ object has no attribute ‘get’

该报错发生在 Transformers 5.16.0 及 main 分支中,当 FP8 量化配置缺少 _experts_implementation 或 FP8Experts._impl_tp_layer_overrides 中没有对应条目时, FineGrainedFP8HfQuantizer.u

快速结论:该报错发生在 Transformers 5.16.0 及 main 分支中,当 FP8 量化配置缺少 _experts_implementationFP8Experts._impl_tp_layer_overrides 中没有对应条目时,FineGrainedFP8HfQuantizer.update_tp_plan() 会因空值查找而崩溃。优先检查你的 FP8 模型配置是否包含专家层实现覆盖条目,或回退到受影响版本之前的提交。

适用环境:Transformers 5.16.0 及当前 main 分支、Python 3.12.13、PyTorch 2.13.0+cu130、Linux 平台。

最快修复方案:Issue 中已确认该回归由 #47579(提交 861f4c41ee46974debe5dde47dd0339146f4e6d2)引入,修复代码及回归测试已在 #48343 中提供并计划合并。在官方补丁合并前,暂无确认的一步修复方案;可优先尝试将 Transformers 回退到 #47579 合并之前的版本。

注意事项:修复方案目前处于 PR 阶段,尚未发布正式版本;该问题会影响常规 Qwen FP8 模型的加载,合并修复前暂不建议升级到 5.16.0 或使用最新 main。

问题场景

在 Transformers 中使用 FineGrainedFP8HfQuantizer 加载 FP8 模型时触发。该问题发生在 update_tp_plan() 执行阶段,涉及 TP(张量并行)计划更新。Issue 中复现代码使用 SimpleNamespace 构造了一个仅含 base_model_tp_plan 的配置对象,然后调用 update_tp_plan(),复现了官方 Qwen FP8 模型在加载时遇到的同类崩溃。

报错原文

AttributeError: 'NoneType' object has no attribute 'get'

原因分析

这是一个由 #47579(861f4c41ee46974debe5dde47dd0339146f4e6d2)引入的回归问题。在 TP/DTensor 重构过程中,原有 if layer_overrides: 防御性检查被移除,但 layer_overrides.get(...) 仍保持无条件调用。当 FP8 配置没有匹配的 _experts_implementation 覆盖条目时,查找返回 None,后续将其当作字典映射使用导致崩溃。

环境排查

  • 确认 Transformers 版本是否为 5.16.0 或当前 main 分支(受影响范围)
  • 确认 Python 版本是否为 3.12.13(Issue 验证环境)
  • 确认 PyTorch 版本是否为 2.13.0+cu130(Issue 验证环境)
  • 检查 FP8 配置中是否包含 _experts_implementation 字段
  • 确认 FP8Experts._impl_tp_layer_overrides 中是否包含对应条目
  • 若加载 Qwen FP8 模型,确认是否为常规 FP8 配置(非专家实现定制)

解决步骤

  1. 确认当前 Transformers 版本是否处于受影响范围(5.16.0 或包含 #47579 之后提交的 main 分支)。
  2. 查看 FineGrainedFP8HfQuantizer.update_tp_plan() 源码,定位 layer_overrides 变量的查找逻辑,确认是否存在类似 if layer_overrides: 的防御判断。
  3. 检查 FP8 配置中是否定义了 _experts_implementation,以及该值是否在 FP8Experts._impl_tp_layer_overrides 中有对应条目。
  4. 若为常规 FP8 模型(无专家定制),可优先尝试将 Transformers 回退到 #47579 合并之前的版本(即提交 861f4c41ee46974debe5dde47dd0339146f4e6d2 之前的 main)。
  5. 关注并合并 #48343 中的修复补丁(已将缺失覆盖视为空映射,保留现有 TP/EP 计划),该补丁包含回归测试。
  6. 若无法立即升级或回退,可尝试在调用 update_tp_plan() 前为配置补充空的 _experts_implementation 映射,但需注意这是临时规避方案,未在 Issue 中明确验证。

验证方法

使用 Issue 中的复现代码运行,若不再抛出 AttributeError 且能正常执行 update_tp_plan(),说明问题已解决。对于加载 Qwen FP8 模型的场景,确认模型能正常加载并完成 TP 计划更新即可。

参考来源

huggingface/transformers #48346

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 20641

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注