forked from metax-maca/op_optimization
修正 fused_moe 教程
This commit is contained in:
parent
46c939acc0
commit
f533b2d736
|
|
@ -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 平台后使用分配到的账号进行登录。
|
||||
|
||||
[](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
|
|||
|
||||
[](https://www.picgo.net/image/image2.4tmnl6)
|
||||
|
||||
3. 进入题目页面:本算子对应比赛题目6:`Fused MoE i8 tn`,点击进入题目页面:
|
||||
3. 进入题目页面:本算子对应比赛题目6:`Fused MoE i8 tn`,点击进入题目页面。
|
||||
|
||||
[](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. 提交优化任务:点击右下角 \[优化\] 按钮,系统将提交任务并进入 \[生成中\] 状态。
|
||||
|
||||
|
||||
[](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
|
|||
|
||||
[](https://www.picgo.net/image/image11.4t3oBA)
|
||||
|
||||
### 步骤2:任务查看与结果管理
|
||||
### Step 2:任务查看与结果管理
|
||||
|
||||
**目标:**在新建优化任务后可追踪任务进度,获取优化结果
|
||||
**目标:**在新建优化任务后可追踪任务进度,获取优化结果。
|
||||
|
||||
**操作:**
|
||||
|
||||
1. 查看任务列表:点击左侧【任务查看】,可看到所有提交的优化任务
|
||||
1. 查看任务列表:点击左侧【任务查看】,可看到所有提交的优化任务。
|
||||
|
||||
* 任务状态:排队中、环境初始化、算子预编译、精度验证、性能调优、已完成、失败
|
||||
* 任务状态:排队中、环境初始化、算子预编译、精度验证、性能调优、已完成、失败;
|
||||
|
||||
* 任务信息:任务名称、进度、创建时间、适配硬件
|
||||
* 任务信息:任务名称、进度、创建时间、适配硬件;
|
||||
|
||||
* 操作按钮:查看详情、删除任务
|
||||
* 操作按钮:查看详情、删除任务。
|
||||
|
||||
|
||||
[](https://www.picgo.net/image/image12.4t3yRb)
|
||||
|
||||
2. 追踪任务进度:当前任务状态为【运行中】时,点击任务列表中的【查看详情】按钮,追踪任务进度:
|
||||
|
||||
* 左侧:原始算子代码(输入的 `input_code.py`)
|
||||
* 左侧:原始算子代码(输入的 `input_code.py`);
|
||||
|
||||
* 右侧:任务进度条,包含以下阶段:
|
||||
|
||||
1. 环境初始化:准备目标硬件编译环境
|
||||
1. 环境初始化:准备目标硬件编译环境;
|
||||
|
||||
2. 算子预编译:验证算子代码是可正常编译
|
||||
2. 算子预编译:验证算子代码是可正常编译;
|
||||
|
||||
3. 精度验证:验证优化后算子输出与原始算子误差的可接受范围
|
||||
3. 精度验证:验证优化后算子输出与原始算子误差的可接受范围;
|
||||
|
||||
4. 性能调优:按设定的演化轮次迭代优化算子性能
|
||||
4. 性能调优:按设定的演化轮次迭代优化算子性能。
|
||||
|
||||
|
||||
* 顶部:任务名称、创建/更新时间、适配硬件、当前轮次进度
|
||||
* 顶部:任务名称、创建/更新时间、适配硬件、当前轮次进度。
|
||||
|
||||
|
||||
[](https://www.picgo.net/image/image13.4t3ULc)
|
||||
|
||||
3. 获取优化结果:当前任务状态为【已完成】时,可在详情页查看优化结果:
|
||||
|
||||
* 优化后算子代码支持一键复制
|
||||
* 优化后算子代码支持一键复制;
|
||||
|
||||
* 算子加速比(基准耗时 / 优化后耗时)、性能数据(如延迟、吞吐量)
|
||||
* 算子加速比(基准耗时 / 优化后耗时)、性能数据(如延迟、吞吐量);
|
||||
|
||||
* 可点击【Diff 对比】查看优化前后代码差异,理解性能提升逻辑
|
||||
* 可点击【Diff 对比】查看优化前后代码差异,理解性能提升逻辑。
|
||||
|
||||
|
||||
[](https://www.picgo.net/image/image14.4t3bsy)
|
||||
|
|
|
|||
Loading…
Reference in New Issue