diff --git a/基于AI Agent开发范式的国产GPU大模型推理算子库优化/Fused MoE 算子入门:从 Benchmark 验证到 XPU-OJ 接口提交.md b/基于AI Agent开发范式的国产GPU大模型推理算子库优化/Fused MoE 算子入门:从 Benchmark 验证到 XPU-OJ 接口提交.md index 2c6d82c..f06eb9d 100644 --- a/基于AI Agent开发范式的国产GPU大模型推理算子库优化/Fused MoE 算子入门:从 Benchmark 验证到 XPU-OJ 接口提交.md +++ b/基于AI Agent开发范式的国产GPU大模型推理算子库优化/Fused MoE 算子入门:从 Benchmark 验证到 XPU-OJ 接口提交.md @@ -23,11 +23,11 @@ 完成本模块后,你将能够: -1. 理解 Fused MoE 推理算子的基本作用、输入输出和典型应用场景; +1. 理解 Fused MoE 推理算子的基本作用、输入输出和典型应用场景。 -2. 跑通对应 benchmark 脚本,并记录性能基线结果; +2. 跑通对应 benchmark 脚本,并记录性能基线结果。 -3. 学习如何基于 Trition 与 MXMACA C++ 编写 Fused MOE 算子; +3. 学习如何基于 Trition 与 MXMACA C++ 编写 Fused MOE 算子。 4. 完成数值正确性测试,即验证 reference 计算、pybind 计算、Triton 计算这三种方式计算结果是否数值完全一致。 @@ -39,11 +39,11 @@ * 要求 pybind 和 Triton 结果均与 reference 一致,鼓励参赛选手持续调优 Triton ,使其性能逼近甚至超越 pybind 性能。 -5. 区分 benchmark 性能基线、OJ 参考实现和选手提交代码; +5. 区分 benchmark 性能基线、OJ 参考实现和选手提交代码。 -6. 读懂对应 XPU-OJ 题包中的题目描述、接口约定、数据范围和精度要求; +6. 读懂对应 XPU-OJ 题包中的题目描述、接口约定、数据范围和精度要求。 -7. 完成一次冒烟级 `run_kernel(...)` 提交,确认 OJ 链路、语言环境和接口调用正常; +7. 完成一次冒烟级 `run_kernel(...)` 提交,确认 OJ 链路、语言环境和接口调用正常。 8. 使用 AI Agent 辅助阅读题包、生成初版实现、定位错误并规划性能优化方向。 @@ -207,7 +207,7 @@ cd '.\op_optimization\基于AI Agent开发范式的国产GPU大模型推理算 **目标:**将用 C++ 编写的 fused\_moe 算子编译为 Python 可调用的 pybind 模块。 -**操作:**运行 `fused_moe/scripts/build_fused_moe_i8_tn_pybind.sh` 脚本 +**操作:**运行 `fused_moe/scripts/build_fused_moe_i8_tn_pybind.sh` 脚本。 **命令示例:** @@ -227,7 +227,7 @@ PYTHON_BIN=/path/to/python bash scripts/build_fused_moe_i8_tn_pybind.sh > \[SUCCESS\] /root/Project/fused\_moe/standalone/fused\_moe\_i8\_tn/build/fused\_moe\_i8\_tn\_ pybind.so -且成功生成 `fused_moe/standalone/fused_moe_i8_tn/build/fused_moe_i8_tn_pybind.cpython-310-x86_64-linux-gnu.so` 文件 +且成功生成 `fused_moe/standalone/fused_moe_i8_tn/build/fused_moe_i8_tn_pybind.cpython-310-x86_64-linux-gnu.so` 文件。 **常见问题:** @@ -245,7 +245,7 @@ PYTHON_BIN=/path/to/python bash scripts/build_fused_moe_i8_tn_pybind.sh **目标:**验证 reference 计算、pybind 计算、Triton 计算这三种方式计算结果的数值是否一致。 -**操作:**运行 `fused_moe/scripts/run_fused_moe_i8_tn_pybind_test.sh` 脚本 +**操作:**运行 `fused_moe/scripts/run_fused_moe_i8_tn_pybind_test.sh` 脚本。 **命令示例:** @@ -310,9 +310,9 @@ bash scripts/run_fused_moe_i8_tn_pybind_test.sh --backend reference #### Step 5:性能测试 -**目标:**输出 benchmark 结果对比表 +**目标:**输出 benchmark 结果对比表。 -**操作:**运行 `fused_moe/scripts/run_fused_moe_i8_tn_benchmark.sh` 脚本 +**操作:**运行 `fused_moe/scripts/run_fused_moe_i8_tn_benchmark.sh` 脚本。 **命令示例:** @@ -393,19 +393,14 @@ bash scripts/run_fused_moe_i8_tn_benchmark.sh --backend all --warmup 5 --iters 2 | **输出** | 终端直接输出 | 排行榜得分 | -2. 理解完成 benchmark 验证并成功建立性能基线后,需要完成以下转换: - -* a. 从 benchmark 脚本中理解目标 API; - -* b. 在对应 OJ 平台【题目描述】中查看 `run_kernel(...)` 接口; - -* c. 对照 OJ 平台【题目描述】中的输入 shape、数据范围和精度要求; - -* d. 编写自己的 `run_kernel(...)`; - -* e. 在 OJ 平台提交`run_kernel(...)`,先通过正确性; - -* f. 正确性通过后,再对比 benchmark 耗时 / OJ 耗时继续优化。 +2. 理解完成 benchmark 验证并成功建立性能基线后,需要完成以下转换: + + 1. 从 benchmark 脚本中理解目标 API; + 2. 在对应 OJ 平台【题目描述】中查看 `run_kernel(...)` 接口; + 3. 对照 OJ 平台【题目描述】中的输入 shape、数据范围和精度要求; + 4. 编写自己的 `run_kernel(...)`; + 5. 在 OJ 平台提交 `run_kernel(...)`,先通过正确性校验; + 6. 正确性通过后,再对比 benchmark 耗时 / OJ 耗时继续优化。 #### Step 7:登录 XPU-OJ 平台并进入题目页面 @@ -414,7 +409,7 @@ bash scripts/run_fused_moe_i8_tn_benchmark.sh --backend all --warmup 5 --iters 2 **操作:** -1. 进入 XPU-OJ 平台后使用分配到的账号进行登录 +1. 进入 XPU-OJ 平台后使用分配到的账号进行登录。 [![image1](https://origin.picgo.net/2026/07/08/image129d6d1ecc01aa9b8.png)](https://www.picgo.net/image/image1.4tmFfp) @@ -422,7 +417,7 @@ bash scripts/run_fused_moe_i8_tn_benchmark.sh --backend all --warmup 5 --iters 2 [![image2](https://origin.picgo.net/2026/07/08/image28bc5fab338d015dd.png)](https://www.picgo.net/image/image2.4tmnl6) -3. 进入题目页面:本算子对应比赛题目6:`Fused MoE i8 tn`,点击进入题目页面: +3. 进入题目页面:本算子对应比赛题目6:`Fused MoE i8 tn`,点击进入题目页面。 [![image3](https://origin.picgo.net/2026/07/08/image3852589a37bfe4d08.png)](https://www.picgo.net/image/image3.4tmZJu) @@ -447,23 +442,23 @@ bash scripts/run_fused_moe_i8_tn_benchmark.sh --backend all --warmup 5 --iters 2 3. 阅读数据范围与提示部分,记住以下关键约束: - * `topk`恒为 8,`num_experts`取真实 MoE 专家数(DeepSeek-V3,`256`) + * `topk`恒为 8,`num_experts`取真实 MoE 专家数(DeepSeek-V3,`256`); - * `EM = num_tokens × 8`,且 `EM`必须是 128 的倍数 + * `EM = num_tokens × 8`,且 `EM`必须是 128 的倍数; - * `N`、`K`由 case 携带:Gate-up 为 (4096, 7168),Down 为 (7168, 2048) + * `N`、`K`由 case 携带:Gate-up 为 (4096, 7168),Down 为 (7168, 2048); - * `b_col_major`布局是 `[expert, n, k]`,不是 `[expert, k, n]` + * `b_col_major`布局是 `[expert, n, k]`,不是 `[expert, k, n]`; - * `expert_ids`每 128 行一个 tile:`expert(r) = expert_ids[r // 128]` + * `expert_ids`每 128 行一个 tile:`expert(r) = expert_ids[r // 128]`; - * `a`和 `scale_a`已按 routed row 展开,直接用 `a[r, :]`和 `scale_a[r]`即可 + * `a`和 `scale_a`已按 routed row 展开,直接用 `a[r, :]`和 `scale_a[r]`即可。 4. 找到正确性要求中的评测口径,确认精度要求: - * 容差:`rtol=2e-2, atol=5e-3` + * 容差:`rtol=2e-2, atol=5e-3`; - * 通过率:`matched_ratio >= 0.99`(至少 99% 的元素在容差范围内) + * 通过率:`matched_ratio >= 0.99`(至少 99% 的元素在容差范围内)。 #### Step 9:提交 OJ 冒烟代码 @@ -590,13 +585,13 @@ bash scripts/run_fused_moe_i8_tn_benchmark.sh --backend all --warmup 5 --iters 2 **项目目标:**基于 KernelSwift 智能算子迁移系统,对 Fused MoE 算子进行在线自动调优。通过输入算子的 PyTorch 代码,一键生成适配沐曦硬件的高性能实现,高效完成算子优化与全流程追踪。 -### 步骤1:复用算子广场的Fused MoE 算子进行二次优化 +### Step 1:复用算子广场的Fused MoE 算子进行二次优化 -**目标:**通过提交算子广场的 fused\_moe 算子代码发起自动优化流程,实现二次优化 +**目标:**通过提交算子广场的 fused\_moe 算子代码发起自动优化流程,实现二次优化。 **操作:** -1. 进入算子广场:点击左侧导航栏 【算子广场】,进入算子列表页 +1. 进入算子广场:点击左侧导航栏 【算子广场】,进入算子列表页。 搜索 fused\_moe 算子,复制 `input_code.py` 代码,也可直接复制以下代码: @@ -686,13 +681,13 @@ bash scripts/run_fused_moe_i8_tn_benchmark.sh --backend all --warmup 5 --iters 2 4. 配置优化参数 - * 指定任务名称:支持字母、下划线、数字组合,示例:fused\_moe\_01 + * 指定任务名称:支持字母、下划线、数字组合,示例:fused\_moe\_01; - * 选择适配硬件:算子需要适配的目标硬件厂商及型号,建议:沐曦 + * 选择适配硬件:算子需要适配的目标硬件厂商及型号,建议:沐曦; - * 最大演化轮次:优化算法迭代次数,取值范围40-400,建议默认40,复杂算法可提高至100+ + * 最大演化轮次:优化算法迭代次数,取值范围40-400,建议默认40,复杂算法可提高至100+。 -5. 提交优化任务:点击右下角 \[优化\] 按钮,系统将提交任务并进入 \[生成中\] 状态 +5. 提交优化任务:点击右下角 \[优化\] 按钮,系统将提交任务并进入 \[生成中\] 状态。 [![image10](https://origin.picgo.net/2026/07/08/image104518c1478f7e1480.png)](https://www.picgo.net/image/image10.4t3kId) @@ -701,50 +696,50 @@ bash scripts/run_fused_moe_i8_tn_benchmark.sh --backend all --warmup 5 --iters 2 [![image11](https://origin.picgo.net/2026/07/08/image11c3f34a9e4cdeee1d.png)](https://www.picgo.net/image/image11.4t3oBA) -### 步骤2:任务查看与结果管理 +### Step 2:任务查看与结果管理 -**目标:**在新建优化任务后可追踪任务进度,获取优化结果 +**目标:**在新建优化任务后可追踪任务进度,获取优化结果。 **操作:** -1. 查看任务列表:点击左侧【任务查看】,可看到所有提交的优化任务 +1. 查看任务列表:点击左侧【任务查看】,可看到所有提交的优化任务。 - * 任务状态:排队中、环境初始化、算子预编译、精度验证、性能调优、已完成、失败 + * 任务状态:排队中、环境初始化、算子预编译、精度验证、性能调优、已完成、失败; - * 任务信息:任务名称、进度、创建时间、适配硬件 + * 任务信息:任务名称、进度、创建时间、适配硬件; - * 操作按钮:查看详情、删除任务 + * 操作按钮:查看详情、删除任务。 [![image12](https://origin.picgo.net/2026/07/08/image12a7e6d1974c959f46.png)](https://www.picgo.net/image/image12.4t3yRb) 2. 追踪任务进度:当前任务状态为【运行中】时,点击任务列表中的【查看详情】按钮,追踪任务进度: - * 左侧:原始算子代码(输入的 `input_code.py`) + * 左侧:原始算子代码(输入的 `input_code.py`); * 右侧:任务进度条,包含以下阶段: - 1. 环境初始化:准备目标硬件编译环境 + 1. 环境初始化:准备目标硬件编译环境; - 2. 算子预编译:验证算子代码是可正常编译 + 2. 算子预编译:验证算子代码是可正常编译; - 3. 精度验证:验证优化后算子输出与原始算子误差的可接受范围 + 3. 精度验证:验证优化后算子输出与原始算子误差的可接受范围; - 4. 性能调优:按设定的演化轮次迭代优化算子性能 + 4. 性能调优:按设定的演化轮次迭代优化算子性能。 - * 顶部:任务名称、创建/更新时间、适配硬件、当前轮次进度 + * 顶部:任务名称、创建/更新时间、适配硬件、当前轮次进度。 [![image13](https://origin.picgo.net/2026/07/08/image135139ee888269c634.png)](https://www.picgo.net/image/image13.4t3ULc) 3. 获取优化结果:当前任务状态为【已完成】时,可在详情页查看优化结果: - * 优化后算子代码支持一键复制 + * 优化后算子代码支持一键复制; - * 算子加速比(基准耗时 / 优化后耗时)、性能数据(如延迟、吞吐量) + * 算子加速比(基准耗时 / 优化后耗时)、性能数据(如延迟、吞吐量); - * 可点击【Diff 对比】查看优化前后代码差异,理解性能提升逻辑 + * 可点击【Diff 对比】查看优化前后代码差异,理解性能提升逻辑。 [![image14](https://origin.picgo.net/2026/07/08/image146e8eabca7978f627.png)](https://www.picgo.net/image/image14.4t3bsy)