[Cherry-Pick][Op][Optimization]Kernel fusion: cast+sigmoid+bias+noauxtc(#7777)#7832
Conversation
|
Thanks for your contribution! |
CI报告基于以下代码生成(30分钟更新一次): 1 任务总览❌ 4 个 Required 任务失败,2 个 Required 任务已取消,PR 暂无法合并,请优先处理失败任务。
2 任务状态汇总2.1 Required 任务 — 2/8 通过
2.2 可选任务 — 25/27 通过
3 失败详情(仅 Required)Run Base Tests / base_tests — 用例失败(置信度: 高)Run Base Tests / base_tests
根因详情: 关键日志: 修复建议:
修复建议摘要: 修复mxfp4.py:38 enable_torch_proxy调用,增加callable守卫 链接: 查看日志 Run Four Cards Tests / run_4_cards_tests — 用例失败(置信度: 高)Run Four Cards Tests / run_4_cards_tests
失败用例:
根因详情: 关键日志: 修复建议:
修复建议摘要: 修复mxfp4.py:38,确保4卡API server正常启动 链接: 查看日志 xpu_8cards_case_test / run_xpu_8cards_cases — 用例失败(置信度: 高)xpu_8cards_case_test / run_xpu_8cards_cases
失败用例:
根因详情: 关键日志: 修复建议:
修复建议摘要: 修复noauxtc XPU编译及mxfp4.py:38兼容调用 链接: 查看日志 Extracted partial CE model tasks / run_ce_cases — 用例失败(置信度: 高)Extracted partial CE model tasks / run_ce_cases
根因详情: 关键日志: 修复建议:
修复建议摘要: 在mxfp4.py:38前增加callable守卫避免TypeError 链接: 查看日志 |
CI报告基于以下代码生成(30分钟更新一次): 1 任务总览
2 任务状态汇总2.1 Required任务 : 2/8 通过
2.2 可选任务 — 20/22 通过
3 失败详情(仅 required)xpu_8cards_case_test / run_xpu_8cards_cases — 环境问题(置信度: 高)
失败用例:
根因详情: 关键日志: 修复建议:
修复建议摘要: 关联变更: PR 在 Run Base Tests / base_tests — 环境问题(置信度: 高)
根因详情: 关键日志: 修复建议:
修复建议摘要: 关联变更: 本 PR 未改动 Run Four Cards Tests / run_4_cards_tests — 环境问题(置信度: 中)
失败用例:
根因详情: 关键日志: 修复建议:
修复建议摘要: 修复 mxfp4.py:38;可下载 Artifacts 查看详细日志 链接: 查看日志 Extracted partial CE model tasks to run in CI. / run_ce_cases — 环境问题(置信度: 高)
根因详情: 关键日志: 修复建议:
修复建议摘要: mxfp4.py:38 添加 callable 检查,修复环境兼容性 关联变更: 本 PR 未改动 |
CI报告基于以下代码生成(30分钟更新一次): 1 任务总览有 1 个 Required 任务失败,需优先处理后方可合并。
2 任务状态汇总2.1 Required任务 : 0/2 通过
2.2 可选任务 — 9/10 通过
3 失败详情(仅 required)xpu_8cards_case_test / run_xpu_8cards_cases — 测试失败(置信度: 中)xpu_8cards_case_test / run_xpu_8cards_cases
失败用例:
根因详情: 关键日志: 修复建议:
修复建议摘要: mxfp4.py L38添加enable_torch_proxy可调用性检查 关联变更: 链接: 查看日志 |
CI报告基于以下代码生成(30分钟更新一次): 1 任务总览❌ 4 个 Required 任务失败,需优先处理后方可合并。 另有 2 个 Required 任务已取消(含主测试任务
2 任务状态汇总2.1 Required 任务 : 2/8 通过
2.2 可选任务 — 21/22 通过
3 失败详情(仅 required)
Run Base Tests / base_tests — 测试失败(置信度: 高)Run Base Tests / base_tests
根因详情: 关键日志: 修复建议:
修复建议摘要: mxfp4.py:38 添加 callable 保护,避免不兼容 Paddle 版本崩溃 链接: 查看日志 Run Four Cards Tests / run_4_cards_tests — 测试失败(置信度: 高)Run Four Cards Tests / run_4_cards_tests
失败用例:
关键日志: 修复建议摘要: 修复 mxfp4.py:38,同 base_tests 链接: 查看日志 xpu_8cards_case_test / run_xpu_8cards_cases — 测试失败(置信度: 高)xpu_8cards_case_test / run_xpu_8cards_cases
失败用例:
关键日志: 修复建议摘要: 同 base_tests,XPU 源码路径确认为仓库代码问题 链接: 查看日志 Extracted partial CE model tasks to run in CI. / run_ce_cases — 测试失败(置信度: 高)Extracted partial CE model tasks to run in CI. / run_ce_cases
失败用例:
关键日志: 修复建议摘要: 修复 mxfp4.py:38,CE 服务即可正常启动 链接: 查看日志 |
PaddlePaddle-bot
left a comment
There was a problem hiding this comment.
🤖 Paddle-CI-Agent | pr_review |
2026-05-18 12:56:55
📋 Review 摘要
PR 概述:将 MoE 路由热路径中的 cast→sigmoid→add bias→noaux_tc 四步操作融合为单个 CUDA kernel(grouped_topk),通过启动参数 --enable-moe-scores-elementwise-fuse 控制开启。
变更范围:custom_ops/gpu_ops/、fastdeploy/model_executor/layers/moe/、fastdeploy/engine/、fastdeploy/scheduler/
影响面 Tag:[OP] [Optimization] [FDConfig]
问题
| 级别 | 文件 | 概述 |
|---|---|---|
| 🟡 建议 | fastdeploy/model_executor/layers/moe/fused_moe_marlin_backend.py |
MoE 后端多实现未同步:marlin/wint2 backend 未加 use_fused_cast 支持 |
| ❓ 疑问 | fastdeploy/worker/worker_process.py:861 |
CLI 参数命名用下划线,与 args_utils.py 的连字符形式不一致 |
| 📝 PR 规范 | — | 标题含双 Tag([Op][Optimization]),[Op] 非官方,描述 Motivation/Modifications/Accuracy Tests 均为空 |
📝 PR 规范检查
标题问题:当前标题 [Cherry-Pick][Op][Optimization]Kernel fusion: cast+sigmoid+bias+noauxtc(#7777) 存在三处问题:① 同时包含 [Op] 和 [Optimization] 两个 Tag(规范要求且仅能包含一个);② [Op] 非官方 Tag(官方为 [OP]);③ [Optimization] 与标题描述之间缺少空格。
标题建议(可直接复制):
[Cherry-Pick][Optimization] Kernel fusion: cast+sigmoid+bias+noauxtc(#7777)
PR 描述建议(可直接复制,复刻 checklist §D2 完整结构):
## Motivation
MoE 路由热路径(如 DeepSeekV3)中,cast to float32、sigmoid、add bias、noaux_tc 被拆为多个独立算子,产生多次显存读写开销。本 PR 将这四步操作融合为单个 CUDA kernel(`grouped_topk`),通过减少显存带宽消耗来提升 MoE 路由计算效率。该功能通过 `--enable-moe-scores-elementwise-fuse` 开关控制,默认关闭保持原有行为。
## Modifications
1. 新增 `custom_ops/gpu_ops/grouped_topk_kernels.cu`:实现 fused cast+sigmoid+add_bias+grouped_topk kernel,支持 float/float16/bfloat16 输入,通过 `PD_BUILD_STATIC_OP(grouped_topk)` 注册;
2. `custom_ops/gpu_ops/cpp_extensions.cc`:声明 `grouped_topk` 函数签名并注册 Python binding;
3. `custom_ops/setup_ops.py`:将新 kernel 加入两处源文件编译列表;
4. `fastdeploy/engine/args_utils.py`:新增 `--enable-moe-scores-elementwise-fuse` CLI 参数;
5. `fastdeploy/scheduler/config.py`:`SchedulerConfig` 新增 `enable_moe_scores_elementwise_fuse` 字段(默认 False);
6. `fastdeploy/engine/engine.py`:将新标志通过 worker_store_true_flag 传递给 worker;
7. `fastdeploy/model_executor/layers/moe/moe.py`:`get_moe_scores` 新增 `use_fused_cast` 参数,为 True 时调用 `grouped_topk` fused kernel,跳过独立的 sigmoid + add 操作;
8. `fused_moe_{blackwell,cutlass,deepgemm,triton}_backend.py`:各后端按 `use_fused` 标志决定是否在进入 `get_moe_scores` 前提前执行 `.cast("float32")`;
9. `fastdeploy/model_executor/layers/moe/ep.py`:EP 路径传入 `use_fused_cast=False`(EPLB 场景暂不支持 fusion,已加 TODO 注释);
10. `tests/operators/test_grouped_topk_op.py`:新增算子单测,覆盖数值正确性验证。
## Usage or Command
启动服务时加上参数 `--enable-moe-scores-elementwise-fuse`
## Accuracy Tests
N/A。kernel 内部使用与原始 sigmoid 路径数值等价的公式(`1/(1+exp(-x))`),bit-level 一致性由 `tests/operators/test_grouped_topk_op.py` 验证。
## Checklist
- [x] Add at least a tag in the PR title.
- Tag list: [`[FDConfig]`,`[APIServer]`,`[Engine]`, `[Scheduler]`, `[PD Disaggregation]`, `[Executor]`, `[Graph Optimization]`, `[Speculative Decoding]`, `[RL]`, `[Models]`, `[Quantization]`, `[Loader]`, `[OP]`, `[KVCache]`, `[DataProcessor]`, `[BugFix]`, `[Docs]`, `[CI]`, `[Optimization]`, `[Feature]`, `[Benchmark]`, `[Others]`, `[XPU]`, `[HPU]`, `[GCU]`, `[DCU]`, `[Iluvatar]`, `[Metax]`]
- You can add new tags based on the PR content, but the semantics must be clear.
- [ ] Format your code, run `pre-commit` before commit.
- [x] Add unit tests. 已新增 `tests/operators/test_grouped_topk_op.py`
- [ ] Provide accuracy results.
- [x] If the current PR is submitting to the `release` branch, make sure the PR has been submitted to the `develop` branch, then cherry-pick it to the `release` branch with the `[Cherry-Pick]` PR tag.总体评价
整体实现思路清晰,fused kernel 的并行设计(一个 warp 处理一个 group)合理,各 MoE 后端的联动改造较为完整。主要关注点是 fused_moe_marlin_backend.py 和 fused_moe_wint2_backend.py 是否也使用 noaux_tc 路径——如使用则需同步 use_fused_cast 支持,避免开启优化后这两个后端走旧路径出现行为不一致。
| help="chunk size of moe input", | ||
| ) | ||
| parser.add_argument( | ||
| "--enable_moe_scores_elementwise_fuse", |
There was a problem hiding this comment.
❓ 疑问 CLI 参数命名使用下划线,与 args_utils.py 中的连字符形式不一致
args_utils.py 中注册的是 --enable-moe-scores-elementwise-fuse(连字符),而此处使用 --enable_moe_scores_elementwise_fuse(下划线)。在用户文档和日志中会出现两种形式,建议统一为连字符形式:
"--enable-moe-scores-elementwise-fuse",
CI报告基于以下代码生成(30分钟更新一次): 1 任务总览
2 任务状态汇总2.1 Required任务 : 2/8 通过
2.2 可选任务 — 21/23 通过
3 失败详情(仅 required)Run Four Cards Tests / run_4_cards_tests — 测试失败(置信度: 中)Run Four Cards Tests / run_4_cards_tests
失败用例:
根因详情: 关键日志: 修复建议:
修复建议摘要: 在4卡测试config中补充enable_moe_scores_elementwise_fuse=False字段 关联变更: Run Base Tests / base_tests — 基础设施/环境(置信度: 中)Run Base Tests / base_tests
根因详情: 关键日志: 修复建议:
修复建议摘要: 环境问题,请 rerun 关联变更: 无(本PR未修改量化相关文件) Extracted partial CE model tasks to run in CI. / run_ce_cases — 未知(置信度: 低)Extracted partial CE model tasks to run in CI. / run_ce_cases
根因详情: 修复建议:
修复建议摘要: 分析不可用,请查看 CI 详情 链接: 查看日志 |
CI报告基于以下代码生成(30分钟更新一次): 1 任务总览
2 任务状态汇总2.1 Required任务 : 2/8 通过
2.2 可选任务 — 22/24 通过
3 失败详情(仅 required)Run Base Tests / base_tests — 服务启动失败(置信度: 中)Run Base Tests / base_tests
失败用例:
根因详情: 关键日志: 修复建议:
修复建议摘要: 关联变更: cherry-pick 引入的 mxfp4.py 量化配置变更 Extracted partial CE model tasks to run in CI. / run_ce_cases — 服务启动失败(置信度: 高)run_ce_cases
失败用例:
根因详情: 关键日志: 修复建议:
修复建议摘要: 修复 关联变更: cherry-pick 引入的 mxfp4.py 变更 Run Four Cards Tests / run_4_cards_tests — 测试失败(置信度: 中)run_4_cards_tests
失败用例:
根因详情: 关键日志: 修复建议:
修复建议摘要: 优先修复 关联变更: cherry-pick 引入的量化相关变更 xpu_8cards_case_test / run_xpu_8cards_cases — 服务启动失败(置信度: 高)xpu_8cards_case_test / run_xpu_8cards_cases
失败用例:
根因详情: 关键日志: 修复建议:
修复建议摘要: 关联变更: cherry-pick #7777 引入的 noauxtc kernel fusion 及 mxfp4.py 变更 |
CI报告基于以下代码生成(30分钟更新一次): 1 任务总览4 个 Required 任务失败,2 个 Required 任务被取消(未执行),当前 Required 通过率 2/8,建议先 rerun 失败任务以确认是否为环境问题后再决定合并。
2 任务状态汇总2.1 Required任务 : 2/8 通过
2.2 可选任务 — 21/22 通过
3 失败详情(仅 required)Run Base Tests / base_tests — 环境问题(置信度: 高)Run Base Tests / base_tests
根因详情: 关键日志: 修复建议:
修复建议摘要: 环境问题,请 rerun;可修复 mxfp4.py Paddle 兼容性检查 关联变更: mxfp4.py 未在本 PR 变更中,非 PR 引入 Run Four Cards Tests / run_4_cards_tests — 环境问题(置信度: 中)Run Four Cards Tests / run_4_cards_tests
失败用例:
根因详情: 关键日志: 修复建议:
修复建议摘要: 环境问题疑似,请 rerun 并确认完整错误栈 关联变更: fastdeploy/model_executor/layers/moe/(PR 改动 MoE 层,可能影响 MTP 测试) Extracted partial CE model tasks to run in CI. / run_ce_cases — 环境问题(置信度: 高)Extracted partial CE model tasks to run in CI. / run_ce_cases
根因详情: 关键日志: 修复建议:
修复建议摘要: 环境问题,请 rerun;需修复 mxfp4.py Paddle 兼容性 关联变更: mxfp4.py 未在本 PR 变更中,非 PR 引入 xpu_8cards_case_test / run_xpu_8cards_cases — PR问题+环境问题(置信度: 高)xpu_8cards_case_test / run_xpu_8cards_cases
失败用例:
根因详情: 关键日志: 修复建议:
修复建议摘要: 修复mxfp4.py XPU兼容性;确认noauxtc XPU降级完整性 关联变更:
链接: 查看日志 |
18665da
into
PaddlePaddle:release/online/20260415
Motivation
Modifications
Usage or Command
启动服务时加上参数
--enable-moe-scores-elementwise-fuseAccuracy Tests
Checklist
[FDConfig],[APIServer],[Engine],[Scheduler],[PD Disaggregation],[Executor],[Graph Optimization],[Speculative Decoding],[RL],[Models],[Quantization],[Loader],[OP],[KVCache],[DataProcessor],[BugFix],[Docs],[CI],[Optimization],[Feature],[Benchmark],[Others],[XPU],[HPU],[GCU],[DCU],[Iluvatar],[Metax]]pre-commitbefore commit.releasebranch, make sure the PR has been submitted to thedevelopbranch, then cherry-pick it to thereleasebranch with the[Cherry-Pick]PR tag.