forked from metax-maca/op_optimization
更新moe步骤
This commit is contained in:
parent
4d818b9169
commit
9af2328749
|
|
@ -91,9 +91,9 @@
|
|||
* 已获取 Fused MoE 源码。
|
||||
|
||||
|
||||
## 五、项目实践1-算力平台进行 Benchmark 验证
|
||||
## 五、项目实践:从 Benchmark 验证到 XPU-OJ 提交
|
||||
|
||||
**项目目标:**跑通 Fused MoE 算子的 benchmark 脚本,建立性能基线,为后续算子优化提供对比基准。
|
||||
**项目目标:**先跑通 Fused MoE 算子的 benchmark 脚本,建立性能基线;再基于同一题目语义完成 XPU-OJ 冒烟提交,确认评测环境能够正确调用 `run_kernel(...)`,为后续正确性修复和性能优化打基础。
|
||||
|
||||
### 步骤 1:检查运行环境
|
||||
|
||||
|
|
@ -323,9 +323,9 @@ bash scripts/run_fused_moe_i8_tn_benchmark.sh --backend all --warmup 5 --iters 2
|
|||
| 终端长时间无输出 | Kernel 死锁或 MACA 驱动异常 | 减小测试 shape;重启容器或设备 |
|
||||
| avg\_ms 异常抖动(±50%) | 其他进程占用 GPU | 关闭其他占用显存的进程,单机单任务运行 |
|
||||
|
||||
## 六、XPU-OJ 冒烟提交
|
||||
### 步骤 6:理解 XPU-OJ 提交要求
|
||||
|
||||
### 6.1 目标
|
||||
**目标:**在完成前文的本地验证后,理解 XPU-OJ 的提交接口、评测方式和 Candidate 管理方式。
|
||||
|
||||
在完成前文的本地验证后,本节将带你把实现提交到 XPU-OJ,并确认评测环境能够正确调用 `run_kernel(...)`。
|
||||
|
||||
|
|
@ -333,9 +333,9 @@ bash scripts/run_fused_moe_i8_tn_benchmark.sh --backend all --warmup 5 --iters 2
|
|||
|
||||
本节的冒烟提交只用于验证函数接口、索引逻辑和提交流程;性能优化请在正确性通过后再进行。
|
||||
|
||||
### 6.2 前置准备
|
||||
#### 提交前准备
|
||||
|
||||
#### 6.2.1 代码准备
|
||||
##### 代码准备
|
||||
|
||||
建议在工作目录下保留一个候选版本目录,例如:
|
||||
|
||||
|
|
@ -351,19 +351,19 @@ oj/problem_1_fused_moe/solution001.py
|
|||
|
||||
真正提交时,只需要把这个文件里的内容复制到 XPU-OJ 提交框。
|
||||
|
||||
#### 6.2.2 账号准备
|
||||
##### 账号准备
|
||||
|
||||
XPU-OJ 账号由组委会统一发放。登录入口:
|
||||
|
||||
```text
|
||||
|
||||
https://xpuoj.com/
|
||||
```
|
||||
|
||||
|
||||
如果登录后看不到比赛或题目,请联系助教或赛事运营确认账号是否已经加入对应比赛或用户组。
|
||||
|
||||
### 6.3 知识预备
|
||||
#### OJ 基础概念
|
||||
|
||||
#### 6.3.1 什么是 OJ
|
||||
##### 什么是 OJ
|
||||
|
||||
OJ 可以理解为“自动评测机”。
|
||||
|
||||
|
|
@ -384,7 +384,7 @@ OJ 可以理解为“自动评测机”。
|
|||
|
||||
所以,OJ 不是让你提交 benchmark 日志,也不是让你提交本地运行截图,而是让你提交一份符合接口约定的代码。
|
||||
|
||||
#### 6.3.2 什么是 Candidate
|
||||
##### 什么是 Candidate
|
||||
|
||||
Candidate 就是一次可复现的候选方案。
|
||||
|
||||
|
|
@ -400,7 +400,7 @@ Candidate 就是一次可复现的候选方案。
|
|||
|
||||
这样后续多次打榜时,不会忘记哪一版代码对应哪一次提交结果。
|
||||
|
||||
### 6.4 项目实践:Fused MoE GEMM OJ 冒烟提交
|
||||
### 步骤 7:实现 Fused MoE GEMM OJ 冒烟代码
|
||||
|
||||
本节以当前 XPU-OJ 题目 **1. Fused MoE GEMM** 为例。
|
||||
|
||||
|
|
@ -423,7 +423,7 @@ def run_kernel(
|
|||
|
||||
评测程序会调用这个函数,并检查你是否把结果正确写入 `out`。
|
||||
|
||||
#### 步骤 1:理解本题要算什么
|
||||
#### 题目语义与索引规则
|
||||
|
||||
本题计算的是固定规格 `fused_moe_i8_tn`:
|
||||
|
||||
|
|
@ -462,7 +462,7 @@ expert(r) = expert_ids[r // 128]
|
|||
* 最终结果必须写回传入的 `out`。
|
||||
|
||||
|
||||
#### 步骤 2:准备 OJ 提交文件
|
||||
#### 准备 OJ 提交文件
|
||||
|
||||
在终端中创建目录:
|
||||
|
||||
|
|
@ -481,7 +481,7 @@ touch oj/problem_1_fused_moe/solution001.py
|
|||
|
||||
注意:冒烟版的目标只是确认接口、索引和 OJ 提交流程,不追求性能最优。
|
||||
|
||||
#### 步骤 3:让 Agent 生成 OJ 冒烟代码
|
||||
#### 生成 OJ 冒烟代码
|
||||
|
||||
在 OpenCode 或其他 Agent 中,把题目的接口约定、输入输出说明和下面这段 Prompt 一起发给 Agent:
|
||||
|
||||
|
|
@ -530,9 +530,11 @@ oj/problem_1_fused_moe/solution001.py
|
|||
|
||||
如果 OJ 页面要求选择 `Triton` 或 `Triton Maca` 语言,也可以先让 Agent 生成一个语义正确的冒烟版本。正确性通过后,再让 Agent 把核心计算替换成 Triton kernel 做性能优化。
|
||||
|
||||
#### 步骤 4:提交到 XPU-OJ
|
||||
### 步骤 8:提交并解读 XPU-OJ 结果
|
||||
|
||||
1. 打开 XPU-OJ: ```texthttps://xpuoj.com/```
|
||||
#### 提交到 XPU-OJ
|
||||
|
||||
1. 打开 XPU-OJ: https://xpuoj.com/
|
||||
|
||||
2. 使用组委会发放的账号登录;
|
||||
|
||||
|
|
@ -556,7 +558,7 @@ oj/problem_1_fused_moe/solution001.py
|
|||
3. 等待评测结果返回。
|
||||
|
||||
|
||||
#### 步骤 5:查看 OJ 结果
|
||||
#### 查看 OJ 结果
|
||||
|
||||
提交后,进入:
|
||||
|
||||
|
|
@ -589,7 +591,7 @@ oj/problem_1_fused_moe/solution001.py
|
|||
|
||||
如果看到用时和内存都是 `0`,很多时候说明代码在正式计时前就失败了,例如函数签名不匹配、导入失败或编译失败。
|
||||
|
||||
#### 步骤 6:理解 OJ 评测流程
|
||||
#### 理解 OJ 评测流程
|
||||
|
||||
一次 OJ 提交通常会经历下面这些步骤:
|
||||
|
||||
|
|
@ -622,7 +624,9 @@ torch.allclose(out_target.float(), out_ref.float(), rtol=0.0, atol=1e-2)
|
|||
|
||||
也就是说,OJ 允许很小的数值误差,但不是随便差一点都能过。
|
||||
|
||||
#### 步骤 7:保存 Candidate
|
||||
### 步骤 9:保存 Candidate 并进入优化
|
||||
|
||||
#### 保存 Candidate
|
||||
|
||||
建议每一次能跑的版本都用 Git 保存。
|
||||
|
||||
|
|
@ -648,7 +652,7 @@ cp oj/problem_1_fused_moe/solution001.py oj/problem_1_fused_moe/solution002.py
|
|||
|
||||
然后让 Agent 基于 `solution002.py` 继续改。
|
||||
|
||||
### 6.5 Agent 使用说明
|
||||
#### 使用 Agent 定位问题与优化
|
||||
|
||||
本模块中,Agent 主要用来做三件事:
|
||||
|
||||
|
|
@ -712,7 +716,7 @@ OJ 返回 Runtime Error。
|
|||
只给出最小修复方案。
|
||||
```
|
||||
|
||||
### 6.8 常见问题
|
||||
### 常见问题
|
||||
|
||||
#### Q1:为什么本地能跑,OJ 上却 Runtime Error?
|
||||
|
||||
|
|
@ -776,7 +780,7 @@ Access to torch.Tensor is not allowed
|
|||
|
||||
不要只看单次结果。每轮都记录,后面才知道 Agent 的修改到底有没有带来收益。
|
||||
|
||||
### 6.9 从 Benchmark 验证到参赛作品的路径回顾
|
||||
### 从 Benchmark 验证到参赛作品的路径回顾
|
||||
|
||||
建议按下面顺序推进:
|
||||
|
||||
|
|
@ -800,13 +804,13 @@ Benchmark 验证代码用来学习,OJ 用来评分,Candidate 用来管理每
|
|||
```
|
||||
|
||||
|
||||
## 七、项目实践2-Kernel Swift 智能算子迁移系统自动调优
|
||||
## 六、后续实践:Kernel Swift 智能算子迁移系统自动调优
|
||||
|
||||
系统链接:[https://deeplink.org.cn/kernelswift/task](https://deeplink.org.cn/kernelswift/task)
|
||||
|
||||
**项目目标:**基于 KernelSwift 智能算子迁移系统,对 Fused MoE 算子进行在线自动调优。通过输入算子的 PyTorch 代码,一键生成适配沐曦硬件的高性能实现,高效完成算子优化与全流程追踪。
|
||||
|
||||
### 步骤1:复用算子广场的Fused MoE 算子进行二次优化
|
||||
### 6.1 复用算子广场的Fused MoE 算子进行二次优化
|
||||
|
||||
**目标:**通过提交算子广场的 fused\_moe 算子代码发起自动优化流程,实现二次优化
|
||||
|
||||
|
|
@ -917,7 +921,7 @@ Benchmark 验证代码用来学习,OJ 用来评分,Candidate 用来管理每
|
|||
|
||||
[](https://www.picgo.net/image/image2.4SHscu)
|
||||
|
||||
### 步骤2:任务查看与结果管理
|
||||
### 6.2 任务查看与结果管理
|
||||
|
||||
**目标:**在新建优化任务后可追踪任务进度,获取优化结果
|
||||
|
||||
|
|
@ -972,7 +976,7 @@ Benchmark 验证代码用来学习,OJ 用来评分,Candidate 用来管理每
|
|||
* 排队时间长:可调整提交时间,或联系平台管理员确认资源状态。
|
||||
|
||||
|
||||
## 八、Agent使用说明
|
||||
## 七、Agent使用说明
|
||||
|
||||
在本模块中,Agent可以帮助你完成以下任务:
|
||||
|
||||
|
|
@ -1040,9 +1044,9 @@ Benchmark 验证代码用来学习,OJ 用来评分,Candidate 用来管理每
|
|||
请帮我在算子广场检索 fused_moe 算子
|
||||
```
|
||||
|
||||
## 九、常见问题与注意事项
|
||||
## 八、常见问题与注意事项
|
||||
|
||||
### 9.1 算力平台进行 Benchmark 验证
|
||||
### 8.1 算力平台进行 Benchmark 验证
|
||||
|
||||
1. 环境准备与依赖问题
|
||||
|
||||
|
|
@ -1067,7 +1071,7 @@ Benchmark 验证代码用来学习,OJ 用来评分,Candidate 用来管理每
|
|||
* 性能对比应基于相同随机种子、相同 shape、相同 TopK、相同 batch size的条件下进行,降低误差。
|
||||
|
||||
|
||||
### 9.2 Kernel Swift 智能算子迁移系统自动调优项目
|
||||
### 8.2 Kernel Swift 智能算子迁移系统自动调优项目
|
||||
|
||||
1. 代码规范问题
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue