forked from metax-maca/op_optimization
修正 fused_moe 教程
This commit is contained in:
parent
c0751f642c
commit
fc7db438e0
|
|
@ -225,7 +225,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
|
||||
> \[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` 文件
|
||||
|
||||
|
|
@ -240,6 +240,7 @@ PYTHON_BIN=/path/to/python bash scripts/build_fused_moe_i8_tn_pybind.sh
|
|||
| `permission denied` | 无脚本执行权限 | `chmod +x scripts/*.sh` |
|
||||
| `undefined reference to Py_...` | Python 版本不匹配 | 确认编译脚本中`PYTHON_BIN`路径与当前运行的 Python 环境完全一致 |
|
||||
|
||||
|
||||
#### Step 4:正确性验证
|
||||
|
||||
**目标:**验证 reference 计算、pybind 计算、Triton 计算这三种方式计算结果的数值是否一致。
|
||||
|
|
@ -305,6 +306,7 @@ bash scripts/run_fused_moe_i8_tn_pybind_test.sh --backend reference
|
|||
| `FAILED: NaN or Inf detected` | 溢出或未初始化内存 | 检查 INT8 乘加是否溢出;确认 GEMM 输出是否反量化 |
|
||||
| 终端长时间无输出 | Kernel 死锁或 Launch 失败 | 减小测试 shape;检查是否触发 MACA 硬件限制 |
|
||||
|
||||
|
||||
#### Step 5:性能测试
|
||||
|
||||
**目标:**输出 benchmark 结果对比表
|
||||
|
|
@ -367,6 +369,7 @@ bash scripts/run_fused_moe_i8_tn_benchmark.sh --backend all --warmup 5 --iters 2
|
|||
| avg\_ms 异常抖动(±50%) | 其他进程占用 GPU | 关闭其他占用显存的进程,单机单任务运行 |
|
||||
|
||||
|
||||
|
||||
### 6.2 在 XPU-OJ 平台进行提交
|
||||
|
||||
平台链接:[https://xpuoj.com/](https://xpuoj.com/)
|
||||
|
|
@ -377,6 +380,7 @@ bash scripts/run_fused_moe_i8_tn_benchmark.sh --backend all --warmup 5 --iters 2
|
|||
|
||||
**操作:**
|
||||
|
||||
|
||||
1. 厘清 Benchmark 和 XPU-OJ 的区别:
|
||||
|
||||
赛事镜像中的 Benchmark 脚本用于理解目标算子的调用方式、输入输出 shape 和性能基线;XPU-OJ 题包用于定义最终评测接口、数据范围、参考输出和精度要求。
|
||||
|
|
@ -391,19 +395,20 @@ bash scripts/run_fused_moe_i8_tn_benchmark.sh --backend all --warmup 5 --iters 2
|
|||
| **输出** | 终端直接输出 | 排行榜得分 |
|
||||
|
||||
|
||||
|
||||
2. 理解完成 benchmark 验证并成功建立性能基线后,需要完成以下转换:
|
||||
|
||||
* 从 benchmark 脚本中理解目标 API;
|
||||
* 从 benchmark 脚本中理解目标 API;
|
||||
|
||||
* 在对应 OJ 平台【题目描述】中查看 `run_kernel(...)` 接口;
|
||||
* 在对应 OJ 平台【题目描述】中查看 `run_kernel(...)` 接口;
|
||||
|
||||
* 对照 OJ 平台【题目描述】中的输入 shape、数据范围和精度要求;
|
||||
* 对照 OJ 平台【题目描述】中的输入 shape、数据范围和精度要求;
|
||||
|
||||
* 编写自己的 `run_kernel(...)`;
|
||||
* 编写自己的 `run_kernel(...)`;
|
||||
|
||||
* 在 OJ 平台提交`run_kernel(...)`,先通过正确性;
|
||||
* 在 OJ 平台提交`run_kernel(...)`,先通过正确性;
|
||||
|
||||
* 正确性通过后,再对比 benchmark 耗时 / OJ 耗时继续优化。
|
||||
* 正确性通过后,再对比 benchmark 耗时 / OJ 耗时继续优化。
|
||||
|
||||
|
||||
#### Step 7:登录 XPU-OJ 平台并进入题目页面
|
||||
|
|
@ -530,17 +535,17 @@ bash scripts/run_fused_moe_i8_tn_benchmark.sh --backend all --warmup 5 --iters 2
|
|||
|
||||
* OJ 平台对单测试点的评分下公式:
|
||||
|
||||
$$
|
||||
$$
|
||||
S(T_k) = \frac{100}{1 + \left(\frac{1}{0.5} - 1\right) \cdot \frac{T_k - T_h}{T_b - T_h}},
|
||||
$$
|
||||
$$
|
||||
|
||||
其中,$T_k$代表你提交的 kernel 平均执行时间;$T_b$代表基准算子的的平均执行时间,对应 50 分;$T_h$代表硬件理论下限耗时,对应100分 。
|
||||
|
||||
当单测试点得分超过 150 分时,平台会按对数压缩规则显示:
|
||||
|
||||
$$
|
||||
$$
|
||||
S_{\text{display}} = 150 + 10 \cdot \log_{10}(S/150)
|
||||
$$
|
||||
$$
|
||||
|
||||
总得分为各测试点得分的算术平均,总耗时为各测试点$T_k$的求和。
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue