Prhub

#1799 fix qwen3.5 397B converting error when enable expert parallel

原始 PR 作者 xutianming 合并时间 2026-04-03 11:49 文件变更 1 提交数 1 评论 0 代码增减 +15 / -3

执行摘要

修复 Qwen3.5 397B 模型在启用专家并行时权重转换错误。

根据PR描述,当使用--expert-model-parallel-size 8参数时,512个专家被分配到8个EP rank,每个rank处理64个专家。但转换函数_weight_to_mcore_format在处理融合专家权重(如linear_fc1.weight0weight63)时,使用mcore_weights_name.split("weight")[-1]提取的是本地专家ID(0-63),而HF的融合张量gate_up_proj形状为[512, 2048, 4096],需要全局专家ID来索引。这导致EP rank 1的参数错误地从HF张量的索引0-63提取,而非正确的64-127,造成权重转换错误。

该PR值得精读,特别是对于处理大模型专家并行权重的开发者。关注点:

  1. 如何从权重名称中提取本地专家ID;
  2. 如何结合EP上下文计算全局ID;
  3. 确保HF张量形状与EP配置匹配的设计决策。建议补充测试用例以验证修复。
讨论亮点

由于review评论为空,没有讨论记录。从代码变更看,这是一个直接的bug修复,没有争议或设计权衡。

实现拆解

修改了slime_plugins/mbridge/qwen3_5.py文件中的_weight_to_mcore_format函数。关键改动点:

  1. 将变量名从expert_id重命名为local_expert_id以明确其含义;
  2. 引入专家并行上下文,通过mpu.get_expert_model_parallel_world_size()mpu.get_expert_model_parallel_rank()获取EP大小和当前rank;
  3. 计算全局专家ID:如果EP大小大于1,则根据EP rank和本地专家数量计算全局ID,否则直接使用本地ID;
  4. 使用全局专家ID索引HF张量,确保权重正确提取。
文件 模块 状态 重要度
slime_plugins/mbridge/qwen3_5.py plugins/mbridge modified 9.0

关键符号

_weight_to_mcore_format

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

评论区精华

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

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

风险与影响

风险较低:

  1. 回归风险:修改仅影响启用专家并行时的权重转换逻辑,对非专家并行场景无影响;但需确保EP大小和rank计算正确,否则可能导致权重映射错误。
  2. 性能风险:引入mpu模块调用可能增加轻微开销,但仅在转换时执行一次,影响可忽略。
  3. 兼容性风险:依赖于Megatron Core的mpu模块,需确保该模块在运行环境中可用且版本兼容。
  4. 测试覆盖:缺少相关测试用例验证修复效果,需手动测试专家并行场景。

影响范围:

  1. 对用户:修复了Qwen3.5 397B模型在专家并行下的权重转换错误,确保模型能正确加载和运行,提升大模型训练稳定性。
  2. 对系统:仅影响权重转换工具,不涉及运行时逻辑,不影响已训练模型。
  3. 对团队:简化了专家并行配置下的调试工作,避免了因权重错误导致的训练失败。影响程度:中等,因为专家并行常用于大规模模型训练,修复可避免潜在训练中断。
专家并行配置敏感 缺少测试覆盖

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论