Prhub

#21851 GLM-4.7 and GLM-4.7-Flash Loading and import format

原始 PR 作者 zRzRzRzRzRzRzR 合并时间 2026-04-04 11:44 文件变更 2 提交数 5 评论 9 代码增减 +139 / -86

执行摘要

更新 GLM-4.7 和 GLM-4.7-Flash 模型的加载逻辑与导入格式,移除 Eagle 实现并同步量化处理。

PR body 指出主要问题:

  1. GLM-4.7-Flash 没有 Eagle 实现,因此应移除相关逻辑;
  2. 代码导入位置和注释需要调整,例如非标准模型命名;
  3. glm4_moe.py 中的代码和条件逻辑与 deepseek_v2.py 的最新版本不一致,需更新以确保同步。

此 PR 值得精读,特别是关注共享专家量化处理的设计决策和跨平台兼容性调整。建议工程师重点关注 glm4_moe.py 中的 FP8 类型检查和 forward_normal_dual_stream 缩放逻辑,以学习如何避免常见平台差异和双重计算错误。

讨论亮点

review 中,gemini-code-assist[bot] 指出三个关键问题:

  1. FP8 数据类型硬编码为 torch.float8_e4m3fn,在 AMD 平台会失败,建议使用标志动态选择;
  2. forward_normal_dual_stream 方法中缺失 _use_aiter 检查,可能导致 MoE 内核双重缩放输出;
  3. 直接访问 config.quantization_config.get 可能引发 AttributeError,建议使用 getattr 安全处理。此外,Fridge003 和作者讨论了 is_nsa_enable_prefill_cp 标志的保留问题,最终决定保留以避免 AttributeError,因为 DeepseekV2Model.forward 依赖此属性。

实现拆解

实现分为两个关键文件:在 glm4_moe.py 中,扩展了 MoE 后端检查以支持更多硬件平台(如 NVIDIA 和 AMD),增加了共享专家的 INT8/FP8 量化处理逻辑,并修改了 rope_theta 值;在 glm4_moe_lite.py 中,更新了模型描述以反映 GLM-4.7-Flash,移除了 Eagle 相关代码,并标准化了 RoPE 配置使用 get_rope_config 函数。整体改动侧重于代码同步和错误修复。

文件 模块 状态 重要度
python/sglang/srt/models/glm4_moe.py models modified 8.0
python/sglang/srt/models/glm4_moe_lite.py models modified 7.0

关键符号

__init__ (in glm4_moe.py) forward_normal_dual_stream (in glm4_moe.py) __init__ (in glm4_moe_lite.py) load_weights (in glm4_moe_lite.py)

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

FP8 数据类型跨平台兼容性 正确性

gemini-code-assist[bot] 指出硬编码 torch.float8_e4m3fn 在 AMD 平台会失败,因为 AMD 使用 torch.float8_e4m3fnuz,建议使用 _is_fp8_fnuz 标志动态选择 dtype。

结论:问题被指出,但未在 review 中明确是否已修复,建议后续处理。 · unresolved

MoE 前向传播中的双重缩放风险 正确性

gemini-code-assist[bot] 提到 forward_normal_dual_stream 方法缺失 _use_aiter 检查,在 AMD 平台且 _use_aiter 为 True 时,可能导致 Aiter MoE 内核内部已处理缩放后再次应用缩放因子。

结论:建议添加条件检查以避免双重缩放,但未确认是否已实施。 · suggested fix

量化配置访问安全性 正确性

gemini-code-assist[bot] 指出直接访问 config.quantization_config.get 可能因 quantization_config 为 None 而引发 AttributeError,建议使用 getattr 安全处理。

结论:建议使用 getattr 改进,但未明确是否已采纳。 · suggested fix

nsa_enable_prefill_cp 标志保留决策 设计

Fridge003 和作者 zRzRzRzRzRzRzR 讨论 is_nsa_enable_prefill_cp 标志是否应移除,作者指出移除会导致 AttributeError,因为 DeepseekV2Model.forward 依赖此属性。

结论:决定暂时保留标志以确保兼容性,避免运行时错误。 · 已解决

风险与影响

技术风险包括:在 glm4_moe.py 中,硬编码 FP8 数据类型可能导致 AMD 平台模型加载失败(跨平台兼容性问题);forward_normal_dual_stream 中缺少 _use_aiter 检查可能引发输出双重缩放,影响模型正确性;直接访问 config.quantization_config 可能因配置为空而抛出 AttributeError,导致运行时崩溃。此外,代码变更涉及量化处理逻辑,若未充分测试,可能引入回归错误。

对用户影响:GLM-4.7 和 GLM-4.7-Flash 模型的加载将更稳定,支持更多量化格式和硬件平台,提升使用体验。对系统影响:改进了模型层的代码一致性,减少了因未同步逻辑导致的潜在错误,但新增的量化处理可能增加维护复杂度。对团队影响:增强了跨团队协作的代码可读性,但需注意 review 中指出的风险点以避免后续问题。

跨平台 FP8 类型不兼容 MoE 前向传播双重缩放 量化配置访问不安全

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论