forked from ccf-ai-infra/TileOPs-Metax
[moe_reduce_fused] optimize H-dimension tiling and C500 tuning #2
Loading…
Reference in New Issue
No description provided.
Delete Branch "feat/moe_reduce_fused_czw_dev"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
小组课题信息
课题名称:面向 MetaX C500 的
moe_reduce_fused算子迁移与性能优化课题完整简介:完成
moe_reduce_fused在 TileOPs-Metax 中的 C500 迁移与调优,覆盖 weighted、XSF、FP8 output 和 quantized 四种变体;通过 H 维分块提高 decode workload 的 CTA/wave 覆盖,并提供完整 correctness、benchmark、mcProfiler、Roofline 语义分析和失败实验记录。PR 简要描述
算子名称:
moe_reduce_fused算子认领 Issue:#9
小组:9 组
成员:朱洪彪、古雨、陈占炜、李明洋
改动类型:
feat:新增算子或功能optimize:优化已有实现源实现:
TileKernels-Metax-source/tile_kernels/moe/reduce_fused_kernel.py,源提交0266ab740980de7dc03a828b8259cd73d100c2eb优化 baseline:
a409c2d18bf9ddbdc9393a172bed362d2ab001e5本 PR 测试提交:
643f3bf4d437f168980d134973c98f7ac61eb80d1. 本次 PR 优化方案
优化前的主要问题:原 kernel 每个 token 只启动一个 CTA,单个 CTA 持有完整 H 维 FP32 accumulator。对
T=512decode,尤其 FP8/quantized 路径,并行覆盖不足且单 CTA 活跃 accumulator 较大。采用的优化方案:
(token, hidden tile);不同 H tile 写入互不重叠的输出区间,无需 atomic 或跨 CTA reduction。block_h,每个 CTA 仅保留[block_h]FP32 accumulator,同时保留完整 K 维归约顺序。moe.yaml的 10 个唯一 variant×shape 做完整 divisor sweep;未知 workload 保守回退到block_h=hidden。block_h的正值、32 对齐、整除 H 以及与 threads/layout 的兼容关系。最终 dispatch:
block_h同时按独立实验验证并回退了 threads=256、sf epilogue 融合、跨 H tile metadata 复用和 split-K 双 accumulator。失败方向均记录在
race_tests/experiment/v02~v05,未混入最终 kernel。2. 精度验证
对比基准实现:
tests/ops/test_moe_reduce_fused.py中的独立 PyTorch reference。测试命令:
测试 shape/dtype:23 个 correctness/error case;覆盖 FP16/BF16/FP32、四种变体、Manifest 大小 shape、
-1padding、mapping bounds、可选out和错误输入。误差范围:BF16
rtol=atol=1.6e-2;FP16/FP32 常规路径1e-3;FP8 outputrtol=atol=0.1。验证结果:
23/23 passed。最终 Manifest benchmark 文件的12/12pytest 节点也全部通过(10 个唯一 variant×shape)。3. 性能数据【必填】
测试环境:MetaX C500,25% Compute sGPU,Vram Quota 16000 MiB;MX-SMI 2.3.1���driver 3.8.30、MACA 3.7.1.5、Python 3.12.11、PyTorch 2.8.0+metax3.7.1.3、TileLang
/opt/tilelang-metax-v0.1.10。性能复现命令:
协议:显式 warmup;内部 warmup 10;50 repeats × 3 trials;L2 flush;CUPTI kernel-only;取三轮 trial mean 的 median;编译不计时。以下为独立 baseline full12 与当前 full12 对比,baseline 是原 kernel,不是 PyTorch latency:
mcProfiler 观测:
1024/1024增至3072/3072,global read/write 基本不变。1024/1024增至14336/14336,global read 只增加约 0.024%,标准 latency 改善约 38%。Roofline:报告已记录每个唯一 workload 的语义 F/B/AI;由于缺少可审计的 C500 25% sGPU FP32 峰值和切片 HBM 带宽,不填写虚构的 efficiency。
详细证据:
race_tests/experiment/v01_reduce_fused_h_parallelism.mdrace_tests/experiment/v02_threads_sweep.mdrace_tests/experiment/v03_fuse_sf_epilogue.mdrace_tests/experiment/v04_reuse_metadata_across_h_tiles.mdrace_tests/experiment/v05_split_k_accumulator.md4. 提交自检清单
已知边界
reduce_fused.py,PR 差异仍限定为活动 kernel 和 v01~v05 报告。Step 1:
From your project repository, check out a new branch and test the changes.Step 2:
Merge the changes and update on Gitea.