修正 fused_moe 教程

This commit is contained in:
Xinyi Wu (i26343) - Application Ecology 2026-07-08 17:40:14 +08:00
parent 46c939acc0
commit f533b2d736
1 changed files with 51 additions and 56 deletions

View File

@ -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)