Prhub

#34908 Support Intern-S2-Mobius FP8

原始 PR 作者 JustinTong0323 合并时间 2026-08-20 01:58 文件变更 3 提交数 3 评论 6 代码增减 +146 / -17

执行摘要

新增 Intern-S2-Mobius FP8 checkpoint 加载支持

PR body 明确说明:internlm/Intern-S2-Mobius-FP8 is now public, but it does not load on current SGLang. 原因是序列化 FP8 配置中 modules_to_not_convert.linear_attn 父路径列为精确匹配项,而 SGLang 把忽略层名称当作前缀匹配,导致量化的子投影被跳过;同时严格加载需要映射 fused expert scale 张量,并允许缺失 KV-cache scale(attn.k_scale / attn.v_scale)。

建议精读 python/sglang/srt/models/interns2_mobius.py_load_fused_mobius_expert_weight_expected_mobius_load_slots 的改动,它展示了一种用查表替代手写分支来兼容量化 scale 张量的方法,对维护多精度 checkpoint 加载有借鉴意义。同时值得关注其“不写单元测试”的权衡:对于纯序列化映射,端到端验证确实更具说服力,但建议至少在注释中记录回归验证步骤。

讨论亮点

本 PR 没有实质性的 review 评论或讨论线程,唯一审核人 zijiexia 直接给予 APPROVED。PR body 对测试取舍做了明确说明:No unit test is added: this is a serialized-checkpoint integration path, and a mock loader test would only restate the configured parameter mappings. 从提交历史看,作者通过多次 rerun-failed-ci 修复 CI 波动,最终合并。

实现拆解

  1. 模型加载器核心调整python/sglang/srt/models/interns2_mobius.py):新增 _is_optional_mobius_parameter(name),将 .attn.k_scale.attn.v_scale 判定为可选参数;在 _load_fused_mobius_expert_weight 中将 gate_up/down 的 scale 后缀通过查表映射到 experts.w13_weight_scale_inv / experts.w2_weight_scale_inv,替代原先手写的单分支替换逻辑。
  2. 预期槽位计算同步_expected_mobius_load_slots*_scale_inv 纳入 .meta_mlp 专家权重槽位,并在剩余分支末尾通过 _is_optional_mobius_parameter 跳过可选参数,保证严格加载时既不会漏报也不会误报。
  3. 加载路由扩展_load_mobius_weights_strict(及其内部路由)将 gate_up_proj_scale_inv / down_proj_scale_inv 纳入 fused expert 张量分发条件,匹配 FP8 checkpoint 的序列化命名。
  4. 文档配置更新docs/src/snippets/configs/internlm/intern-s2-mobius.jsx):新增 FP8 量化轴、default|fp8 模型名映射,加入 H200 已验证的 low-latency / high-throughput FP8 命令 cells,并将 B200 FP8 标记为未验证。
  5. Cookbook 文案调整docs/cookbook/autoregressive/InternLM/Intern-S2-Mobius.mdx):明确现有速度与精度数据仅适用于 BF16 checkpoint,FP8 仅完成启动、文本、视觉与 stop-reason 验证;同步更新模型表格与描述。
  6. 测试策略:未新增单元测试。作者在 PR body 中说明这是序列化 checkpoint 集成路径,mock 加载器测试只会复述参数映射;真实路径由端到端验证覆盖(GSM8K 1319 例 96.82% acc、NEXTN 文本/视觉冒烟、292 token 有界生成)。
文件 模块 状态 重要度
python/sglang/srt/models/interns2_mobius.py 模型加载 modified 7.39
docs/src/snippets/configs/internlm/intern-s2-mobius.jsx 文档配置 modified 6.01
docs/cookbook/autoregressive/InternLM/Intern-S2-Mobius.mdx 模型文档 modified 3.5

关键符号

_is_optional_mobius_parameter _load_fused_mobius_expert_weight _expected_mobius_load_slots

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

评论区精华

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

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

风险与影响

  1. 加载路径回归风险_load_fused_mobius_expert_weight_expected_mobius_load_slots 是 BF16/FP8 共用的严格加载逻辑,改动可能影响现有 BF16 checkpoint 加载,虽然代码结构上支持原有后缀,但缺少自动化防护。
  2. 缺少单元测试:PR 明确不添加单测,将来若重构加载流程或改动 modules_to_not_convert 语义,FP8 加载可能静默失效,回归只能靠端到端人工门禁发现。
  3. B200 配方未验证:文档中 B200 FP8 recipes 标记为 unverified,若用户在 B200 上直接套用,可能遇到命令无法启动或精度/性能未达预期的问题。
  4. 性能承诺缺失:FP8 未做速度基准,用户无法预期相对于 BF16 的收益,文档已明确,但若社区误读仍可能产生预期落差。

对使用 Intern-S2-Mobius 的用户:可以部署公开的 FP8 checkpoint,显著降低显存占用(H200 上模型权重仅 34.22 GB),并可使用已验证的 NEXTN 推理配方;对系统:模型加载器新增了可选张量与 fused scale 的通用处理模式,为后续同类混合精度 checkpoint 提供参考;对团队:文档侧建立了“已验证 / 未验证”的清晰边界,降低误导风险。整体影响集中在特定模型,范围可控。

核心加载逻辑变更 缺少单元测试覆盖 B200 配方未验证

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论