Prhub

#7071 [XPU] support glm-4.5-air (fix neox+partial_rotary_factor)

PaddlePaddle/FastDeploy · 作者 zhupengyang · 合并时间 2026-04-14 11:31

分析状态 已生成
文件变更 9提交数 1 · 评论 10
代码增减 +32 / -18
XPU Models OP MoE Optimization

执行摘要

为 XPU 平台添加 GLM-4.5-air 模型支持,优化 MoE 算子和 RoPE 实现。

根据PR body,动机是“为 XPU 平台添加 GLM-4.5-air 模型支持,优化 MoE 算子和 RoPE 实现。”作者在评论中补充说明修复了量化配置不生效和线性层报错的问题,以解决特定场景下的运行时错误。

建议技术管理者和工程师精读此PR,重点关注fused_noaux_tc算子的breaking change处理、RoPE优化设计以及版本稳定性权衡。工程师应检查下游依赖是否适配,并考虑采纳版本具体化建议以降低风险。

讨论亮点

Review中核心讨论点包括:1) 变量名拼写错误:fastdeploy-bot指出rotary_embedding.py中ictemb应为emb,已修复。2) Breaking Change:fused_noaux_tc算子输出顺序和数据类型变更,可能导致下游依赖错误;fastdeploy-bot强调需同步更新所有调用方,但测试文件test_fused_noaux_tc.py未适配。3) 版本稳定性:建议download_dependencies.sh使用具体版本号而非latest,以避免CI不稳定。4) 平台检测一致性:建议统一使用current_platform.is_xpu(),而非paddle.is_compiled_with_xpu()。决策结论是部分问题已解决,但测试适配和版本建议未处理。

实现拆解

实现拆解为五个关键部分:1) MoE算子层:修改fused_noaux_tc.cc,调整输出顺序为(gating_logits, topk_weights, topk_ids),数据类型从INT64改为INT32,并在fused_moe.py中适配解包顺序。2) 注意力层:更新block_attn.cc,添加rope_head_dim参数传递,优化encoder模式下的qkv指针偏移。3) RoPE层:在rotary_embedding.py中使用current_platform.is_xpu()检测平台,优化GlmRotaryEmbedding实现,并修复变量名错误。4) 模型层:修正glm4_moe.py中MergedReplicatedLinear的参数名从output_size到output_sizes。5) 辅助层:linear.py添加output_dim的None检查以防止逻辑错误;xpu_model_runner.py传递partial_rotary_factor参数以支持RoPE配置。

文件 模块 状态 重要度
custom_ops/xpu_ops/src/ops/block_attn.cc OP modified 7.0
custom_ops/xpu_ops/src/ops/fused_noaux_tc.cc MoE modified 8.0
fastdeploy/model_executor/layers/rotary_embedding.py Models modified 7.0
fastdeploy/model_executor/models/glm4_moe.py Models modified 6.0

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

关键符号

BlockAttnKernel FusedNoAuxTcInferShape GlmRotaryEmbedding.__call__ get_rope

评论区精华

变量名拼写错误 正确性

fastdeploy-bot 指出 rotary_embedding.py 中变量名 ictemb 应为 emb,否则会导致 NameError。

结论:已修复,作者在提交中更正。 · 已解决

算子输出顺序和数据类型变更 设计

fused_noaux_tc 算子输出顺序从 (gating_logits, topk_ids, topk_weights) 改为 (gating_logits, topk_weights, topk_ids),数据类型从 INT64 改为 INT32,可能引发下游兼容性问题。

结论:部分调用方已适配,但测试文件 test_fused_noaux_tc.py 未更新,存在未解决风险。 · pending

版本稳定性建议 infra

fastdeploy-bot 建议 download_dependencies.sh 使用具体版本号而非 latest,以避免 CI 不稳定和依赖冲突。

结论:未采纳,代码中仍使用 latest 版本。 · 待处理

风险与影响

技术风险具体包括:1) Breaking Change:fused_noaux_tc.cc的算子输出顺序和数据类型变更,若下游调用方(如test_fused_noaux_tc.py)未更新,可能导致运行时错误或精度问题。2) 版本不稳定:download_dependencies.sh使用latest版本,可能引入不兼容依赖,影响CI和部署稳定性。3) 测试覆盖不足:Codecov报告仅22.22%的补丁覆盖率,测试文件未完全适配算子变更,增加回归风险。4) 平台检测不一致:rotary_embedding.py中部分代码仍使用旧检测方法,可能引起平台兼容性问题。

影响范围评估:1) 用户:XPU平台用户现在可以运行GLM-4.5-air模型,扩展了模型库支持,提升用户体验。2) 系统:优化MoE和RoPE实现可能提高推理性能和内存效率,但breaking change需要谨慎管理。3) 团队:变更涉及多个模块(OP、Models、Worker),需加强跨团队协作以确保代码一致性;未解决的测试问题可能增加维护成本。

Breaking Change Test Coverage Version Instability Platform Detection

关联 Issue

未识别关联 Issue

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

完整报告

执行摘要

此PR为XPU平台添加GLM-4.5-air模型支持,通过优化MoE算子和RoPE实现,确保模型正确运行并提升性能。变更涉及多个核心组件,包括自定义算子、模型层和worker代码,但存在breaking change和测试覆盖不足等风险,建议技术团队仔细审查。

功能与动机

根据PR body,动机是“为 XPU 平台添加 GLM-4.5-air 模型支持,优化 MoE 算子和 RoPE 实现。”作者在评论中补充说明,修复了从--quantization参数传json形式配置不生效的问题,以及torch模型开ep+tp报错的问题,以解决特定场景下的运行时错误。这扩展了FastDeploy在XPU后端的模型库,提升用户推理能力。

实现拆解

  • MoE算子层:修改custom_ops/xpu_ops/src/ops/fused_noaux_tc.cc,将输出顺序从{gating_logits, topk_ids, topk_weights}调整为{gating_logits, topk_weights, topk_ids},数据类型从INT64改为INT32,并在fastdeploy/model_executor/layers/backends/xpu/moe/fused_moe.py中适配解包顺序。
  • 注意力层:更新custom_ops/xpu_ops/src/ops/block_attn.cc,添加rope_head_dim参数传递,优化encoder模式下的qkv指针偏移,代码示例如下:
    cpp param.head_num, param.kv_head_num, param.head_dim, rope_head_dim, // 新增参数
  • RoPE层:在fastdeploy/model_executor/layers/rotary_embedding.py中,使用current_platform.is_xpu()检测平台,优化GlmRotaryEmbedding实现,并修复变量名错误(ictemb→emb)。
  • 模型层:修正fastdeploy/model_executor/models/glm4_moe.pyMergedReplicatedLinear的参数名从output_sizeoutput_sizes
  • 辅助层fastdeploy/model_executor/layers/linear.py添加output_dim的None检查;fastdeploy/worker/xpu_model_runner.py传递partial_rotary_factor参数以支持RoPE配置。

评论区精华

  • 变量名错误:fastdeploy-bot指出:“变量名拼写错误:ictemb 应为 emb。” 作者已修复,确保代码正确性。
  • Breaking Change:fastdeploy-bot强调:“算子输出顺序变更,未同步更新所有调用方。” 测试文件test_fused_noaux_tc.py未适配,存在未解决风险。
  • 版本稳定性:fastdeploy-bot建议:“Using latest version may cause CI instability. Consider using a specific version number.” 但未采纳,可能引入依赖问题。
  • 平台检测一致性:fastdeploy-bot建议:“建议将 get_rope 函数中的平台检测也更新为 current_platform.is_xpu()。” 显示代码风格优化空间。

风险与影响

  • 技术风险
    • Breaking Change:fused_noaux_tc算子变更可能导致下游依赖错误,需紧急检查所有调用方。
    • 测试覆盖不足:Codecov报告补丁覆盖率仅22.22%,测试文件未完全适配,增加回归风险。
    • 版本不稳定:使用latest版本可能引发CI失败或部署不兼容。
    • 平台检测不一致:部分代码仍使用旧检测方法,可能影响跨平台兼容性。
  • 影响范围
    • 用户:XPU平台用户获得GLM-4.5-air模型支持,扩展推理能力。
    • 系统:MoE和RoPE优化可能提升性能,但需管理breaking change带来的维护成本。
    • 团队:变更涉及OP、Models等多个模块,需加强协作以确保代码质量。

关联脉络

  • 与近期PR #7029(XPU算子重构)、#7361(MoE参数支持)和 #7313(RoPE优化)相关,共同推进XPU平台和模型模块的演进。
  • 历史PR显示FastDeploy在XPU、MoE和Optimization领域持续投入,此PR是这一趋势的一部分,旨在增强模型兼容性和性能。

参与讨论