Prhub

#1978 [docker] Fix qwen3 30B + deepep with sglang 0.5.12

原始 PR 作者 zhuzilin 合并时间 2026-05-29 17:38 文件变更 1 提交数 3 评论 0 代码增减 +14 / -0

执行摘要

修复 Qwen3 30B 与 Deepep 在 sglang 0.5.12 下的运行问题

修复 Qwen3 30B 模型与 Deepep 在 sglang 0.5.12 环境下的兼容性和运行正确性问题,确保模型可以正常加载和推理。

值得合并。该 PR 解决了特定模型与运行时的兼容性问题,修复逻辑清晰,风险可控。建议在合并后增加相关 CI 测试覆盖,确保后续版本不会再次出现类似问题。

实现拆解

  1. 调整 DeepGEMM JIT EP activation 条件 - 在 sglang/srt/layers/moe/moe_runner/deep_gemm.py 中,将原来硬性的 assert N % 4 == 0 and G % 4 == 0 改为有条件地启用 SGLANG_OPT_USE_JIT_EP_ACTIVATION:仅在满足维度对齐约束时才使用 JIT 路径,否则跳过,避免因维度不匹配导致 crash。
  2. 移除 MoE 权重加载中的 zero 过滤 - 在 sglang/srt/layers/moe/fused_moe_triton/layer.py 中,删除了 and "zero" not in weight_name 条件,使 FusedMoE 在加载权重时不再跳过名称中包含 zero 的权重。这可能是为了支持某些量化方案中 zero 权重参与合并或处理。
  3. 放宽 CompressedTensors 量化检查 - 在 sglang/srt/layers/quantization/compressed_tensors/compressed_tensors.py 中,移除了 is_symmetric 条件,使得原本要求对称量化的检查现在也接受非对称量化,以兼容 Qwen3 30B 的权重格式。
  4. 新增 restore_weights_before_loading 方法 - 在相同文件中为 CompressedTensorsFusedMoEMethod 类增加了 restore_weights_before_loading 方法,委托给 layer.scheme 实现,以确保在加载前正确恢复权重(可能涉及去量化或格式转换)。
文件 模块 状态 重要度
docker/patch/latest/sglang.patch 部署脚本 modified 4.95

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

评论区精华

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

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

风险与影响

  1. 兼容性风险:放宽量化检查(移除 is_symmetric)可能影响其他原本依赖对称性约束的模型,需确保该变更不破坏其他量化方案的加载逻辑。
  2. 性能影响:DeepGEMM 中 JIT EP activation 的条件变更可能导致在某些模型上前向路径发生变化,但影响范围较小。
  3. 回归风险:移除 zero 权重过滤可能引入之前因过滤而规避的权重处理问题,需验证模型收敛性。

影响范围:仅影响 docker 环境下的 sglang 补丁文件,直接影响使用 sglang 0.5.12 并需要运行 Qwen3 30B 或 Deepep 的用户。
影响程度:低到中等。对不涉及这些模型的用户无影响,但对目标用户至关重要。

潜在回归风险 测试覆盖不足

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论