forked from metax-maca/op_optimization
测试结果文档修改
This commit is contained in:
parent
180213653b
commit
b65388c77e
|
|
@ -25,7 +25,7 @@
|
|||
|
||||
### 1.0 性能基线解读:为什么本教程基于 KV Cache 做基准测试
|
||||
|
||||
### 1.1 什么是性能基线(baseline)
|
||||
### 1.1 什么是性能基线(benchmark)
|
||||
|
||||
> 性能基线 是在引入任何优化代码前,系统处于初始可用状态时的参考数据。它是衡量后续所有优化收益的"锚点"。记录内容通常包括:执行时间、吞吐量、带宽、显存占用。
|
||||
|
||||
|
|
@ -114,9 +114,9 @@
|
|||
|
||||
### 1.4 为什么要记录性能基线结果
|
||||
|
||||
> 性能基线(baseline)是优化前的参考性能数据,记录 性能基线 的意义在于:
|
||||
> 性能基线(benchmark)是优化前的参考性能数据,记录 性能基线 的意义在于:
|
||||
|
||||
* **量化优化收益**:优化后对比 性能基线,计算加速比(speedup = baseline\_time / optimized\_time)
|
||||
* **量化优化收益**:优化后对比 性能基线,计算加速比(speedup = benchmark\_time / optimized\_time)
|
||||
|
||||
* **防止性能回退**:代码变更后重跑 benchmark,确认没有引入性能退化
|
||||
|
||||
|
|
@ -199,7 +199,7 @@
|
|||
|
||||
* 获取目标源码(包含 `benchmark_kvcache.py` 及 OJ 题包)
|
||||
|
||||
* 已进入项目目录 `/data/flashattn_baseline`
|
||||
* 进入项目目录 `op_optimization/基于AI\ Agent开发范式的国产GPU大模型推理算子库优化/operator_task_package/flashattn_task_package/benchmark/`
|
||||
|
||||
* 准备 Benchmark 脚本与 OJ 测试脚本
|
||||
|
||||
|
|
@ -225,7 +225,7 @@
|
|||
|
||||
* **正确性测试 :** 验证算子输出结果的数学精度是否与标准实现一致,这是绝对底线。
|
||||
|
||||
* **性能测试 :** 在正确的前提下,测算速度与吞吐。通过建立性能基线(baseline),才能量化后续每次代码修改带来的真实收益(加速比)。
|
||||
* **性能测试 :** 在正确的前提下,测算速度与吞吐。通过建立性能基线,才能量化后续每次代码修改带来的真实收益(加速比)。
|
||||
|
||||
* **Benchmark (基准测试):** 在固定条件下反复运行同一任务,获取可重复的性能指标,用于建立基线、量化优化效果和定位瓶颈。
|
||||
|
||||
|
|
@ -255,7 +255,11 @@
|
|||
|
||||
* **Tensor Core:** 现代 GPU(含沐曦 C500)的矩阵乘法专用单元,要求维度对齐为 8 或 16 的倍数。
|
||||
|
||||
|
||||
### 5.5 开源仓库参考
|
||||
|
||||
[GitHub - MetaX-MACA/flashattn · GitHub](https://github.com/MetaX-MACA/flashattn)
|
||||
|
||||
> 链接内容可供用于学习 API、算子实现思路、benchmark 方法和优化策略。选手仍需根据 XPU-OJ 题包接口**自行实现**可提交的 `run_kernel(...)`
|
||||
---
|
||||
|
||||
## 6. 项目实践:FlashAttention KV-Cache Benchmark & OJ 评测
|
||||
|
|
@ -357,7 +361,7 @@ python -c "import einops; print('einops OK')"
|
|||
**预期结果:**
|
||||
|
||||
```Plain
|
||||
baseline结果实例 benchmark_kvcache.py
|
||||
benchmark结果实例 benchmark_kvcache.py
|
||||
```
|
||||
---
|
||||
|
||||
|
|
@ -556,7 +560,7 @@ benchmark 脚本 用于理解目标算子的调用方式、输入输出 shape
|
|||
|
||||
#### 6.8.1 题目说明(FlashAttention KV Cache Decode)
|
||||
|
||||
> 注意:每个子题的接口参数、数据范围和精度要求可能不同,正式要求以对应 XPU-OJ 题包为准。本节以 **FlashAttention KV Cache Decode** 为例,演示从 baseline benchmark 到 XPU-OJ 提交的完整流程。
|
||||
> 注意:每个子题的接口参数、数据范围和精度要求可能不同,正式要求以对应 XPU-OJ 题包为准。本节以 **FlashAttention KV Cache Decode** 为例,演示从 benchmark 到 XPU-OJ 提交的完整流程。
|
||||
|
||||
* **对应 benchmark 脚本**:`op_optimization/基于AI Agent开发范式的国产GPU大模型推理算子库优化/operator_task_package/flashattn_task_package/benchmarkbenchmark_kvcache.py`
|
||||
|
||||
|
|
@ -983,15 +987,55 @@ torch.allclose(output_t.float(), output_ref.float(), rtol=1e-2, atol=1e-2)
|
|||
|
||||
提交详情会显示状态、总得分、时间、内存、编译信息以及各测试点结果。
|
||||
|
||||

|
||||

|
||||
|
||||
**单测试点查看:**
|
||||

|
||||
**单测试点查看:** 直接点击测试点可以看到测试点的详细检查器信息
|
||||

|
||||
|
||||
在单测试点详情中,**检查器信息**(SPJ Report)会展示该测试点中的详细性能评估结果,以下是检查器中每行的意思:
|
||||
|
||||
- **Config**:`batch=1, seqlen_k=1024, seqlen_q=1, heads=8, kv_heads=8, headdim=128, page_size=16, causal=0`
|
||||
测试用例的参数配置,定义了算子运行的具体场景(如批量大小、序列长度、注意力头数等),用于复现测试环境。
|
||||
|
||||
- **Baseline**:`0.120000 ms`
|
||||
基准算子的执行时间(参考实现,优化前的版本),作为性能对比的标准。
|
||||
|
||||
- **User kernel**:`0.564000 ms`
|
||||
你提交的算子的实际运行耗时。
|
||||
|
||||
- **Hardware bound**:`0.037287 ms`
|
||||
硬件限制的理论最小耗时(理想情况下,算子受GPU硬件能达到的最快速度),若为0表示该场景下硬件未成为瓶颈,或基准/你提交的算子已接近硬件极限。
|
||||
|
||||
- **Speedup vs base**:`0.213 x`
|
||||
**加速比**:你的算子相对于基准的加速倍数。计算方式为 `Baseline时间 / 你的算子执行时间`。
|
||||
- 当加速比 > 1 时,表示你的算子比基准快(性能提升)
|
||||
- 当加速比 < 1 时,表示你的算子比基准慢(性能下降)
|
||||
- 当前 `0.213 x` 意味着你的算子比基准慢了约4.7倍(1/0.213 ≈ 4.7),需要优化。
|
||||
|
||||
- **Score ratio**:`0.135722 (13.57%)`
|
||||
**得分比例**:反映你的算子性能与基准的差距。根据评测系统,当你的算子与基准等速时(T_k = T_b),得分为50分;当达到硬件理论下限时(T_k = T_h),得分为100分。当前 `13.57%` 表示你的算子性能还有很大提升空间,得分约为13分(满分100分)。
|
||||
|
||||
- **Display score**:`13 / 100`
|
||||
**最终得分**:由Score ratio映射而来的百分制分数。
|
||||
- 满分100分,分数越高表示性能越好
|
||||
- 当前 `13分` 表示你的算子性能还有很大提升空间
|
||||
|
||||
- **Pass**:`OK`
|
||||
测试用例的通过状态(OK表示算子功能正确,输出与预期一致;若为FAIL则表示功能错误)。
|
||||
|
||||
通过这些信息,你可以快速定位算子的性能瓶颈(如User kernel时间远大于Baseline),或确认功能是否正确,从而针对性优化代码。
|
||||
|
||||
**榜单查看**
|
||||

|
||||

|
||||
在榜单页面,你可以查看所有参赛者的排名情况:
|
||||
- **总得分**:各题目得分的总和(如“FlashInfer Ragged Prefill”“FlashAttention KV Cache Decode”等6个题目的分数相加),排名按总得分从高到低排序。
|
||||
- **个人排名**:页面顶部会显示“我的排名”和“我的总分”,方便快速了解自己在所有参赛者中的位置。
|
||||
- **各题目得分**:表格中每列对应一个题目的得分(部分题目可能显示耗时等额外信息),帮助你分析自己在不同算子优化任务上的表现。
|
||||
|
||||
**优化思路: **
|
||||
通过榜单,你可以对比自己与他人的得分差距,针对性地优化未达标的题目,提升总排名。
|
||||
|
||||
**优化思路:**
|
||||
- **算子融合**:将矩阵乘、Scale、Softmax 等独立步骤合并为单个内核,避免中间结果在全局显存(HBM)中的反复读写。
|
||||
- **并行策略调整**:在 Decode 阶段采用 Split-K(如 Flash-Decoding),将长 KV 序列分块分配给多个线程块并行计算,解决单 Query 并行度极低的问题。
|
||||
- **在线 Softmax**:引入局部最大值和局部求和动态缩放历史累加器,实现单遍计算,完美契合算子融合需求并保证数值稳定。
|
||||
|
|
|
|||
Loading…
Reference in New Issue