# PR #21851 完整报告

- 仓库：`sgl-project/sglang`
- 标题：GLM-4.7 and GLM-4.7-Flash Loading and import format
- 合并时间：2026-04-04 11:44
- 原文链接：http://prhub.com.cn/sgl-project/sglang/pull/21851

---

# 执行摘要
此 PR 更新了 GLM-4.7 和 GLM-4.7-Flash 模型的加载逻辑与导入格式，主要移除无效的 Eagle 实现并同步量化处理代码，以提升跨平台兼容性和模型正确性。变更涉及两个关键模型文件，引入了对共享专家 INT8/FP8 量化的支持，但 review 中指出了多个潜在风险点，如硬编码数据类型和缺失检查，建议团队在合并后关注这些细节以避免回归错误。

# 功能与动机
PR 的动机源于三个具体问题：首先，GLM-4.7-Flash 模型缺乏 Eagle 实现，需移除相关代码以防止加载失败；其次，代码导入位置和注释存在非标准命名，影响可维护性；最后，glm4_moe.py 中的逻辑与 deepseek_v2.py 的最新版本不一致，可能导致行为差异。如 PR body 所述，这些调整旨在确保模型加载的稳定性和代码同步。

# 实现拆解
实现主要围绕两个文件展开：
- **glm4_moe.py**：扩展了 MoE 后端检查以支持 NVIDIA 和 AMD 等多种硬件平台，新增了共享专家的 INT8/FP8 量化处理逻辑，并修改了 rope_theta 值以对齐配置。关键代码片段如下：
  ```python
  self.shared_experts_is_fp8 = (
      not is_packed_weight
      and self.shared_experts.gate_up_proj.weight.dtype == torch.float8_e4m3fn
  )
  ```
 但此处的硬编码可能引发跨平台问题。

- **glm4_moe_lite.py**：将模型描述更新为 GLM-4.7-Flash，移除了 Eagle 相关代码，并标准化 RoPE 配置使用 `get_rope_config` 函数，简化了初始化逻辑。

# 评论区精华
review 讨论聚焦于几个技术要点：
> "The FP8 data type is hardcoded to `torch.float8_e4m3fn`. This will fail to correctly detect FP8 weights on AMD platforms" — gemini-code-assist[bot] 强调跨平台兼容性风险。

> "The scaling logic in `forward_normal_dual_stream` is missing a check for `_use_aiter`... leading to double scaling" — 指出 MoE 前向传播可能因缺少检查而输出错误。

此外，Fridge003 和作者就 `is_nsa_enable_prefill_cp` 标志进行交锋，最终决定保留以避免 AttributeError，体现了设计权衡："I see, then let's keep them first"。

# 风险与影响
**技术风险**：硬编码 FP8 类型在 AMD 平台会导致模型加载失败；MoE 前向传播中缺失 `_use_aiter` 检查可能引起双重缩放，影响推理正确性；直接访问 `config.quantization_config` 可能因配置为空而崩溃。这些风险具体到 `glm4_moe.py` 的量化处理和前向方法。

**影响评估**：用户将受益于更稳定的 GLM 模型加载，支持更多量化格式；系统层面提升了代码一致性，但新增逻辑需加强测试；团队需注意 review 中未解决的疑虑，以避免后续维护负担。

# 关联脉络
从历史 PR 看，本 PR 与 #21280（支持 DeepSeek V3 的 MXFP8 量化）和 #22064（修复扩散模型量化）存在关联，均涉及量化优化和模型加载改进。这表明团队正在持续推进多模型系列的量化支持，本 PR 是 GLM 模型线的一次重要同步，后续可能还需关注跨平台兼容性的整体解决方案。