| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Co-authored-by: xchang1121<changxiangyu1@huawei.com> # message auto-generated for no-merge-commit merge: !653 merge master into master 在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Created-by: xchang1121 Commit-by: xchang1121 Merged-by: cann-robot Description: ## 描述 #### 新特性 New Features - 【autoresearch】新增 AutoResearch 官方插件。AutoResearch 是基于 Claude Code / Open Code,面向算子优化任务的自动化算子优化工作流项目,负责组织参考实现、候选 kernel、正确性校验、性能评测、远程ssh评测机/本地agent分离调度、批量执行和多轮优化状态管理。支持triton-ascend算子的优化。 - 【autoresearch】安装后以独立项目方式运行,保留原有 slash command、hooks、配置文件、批跑脚本和 worker 连接(使得运行agent端和评测机分离,仅通过ssh连接)方式,用户可以直接创建任务并连接本地或远端 worker 进行评测。 - 【autoresearch】内置 baseline 记录、状态机推进、失败信息提取和 CodeChecker 检查能力,便于跟踪多轮优化中的正确性、性能变化和失败原因。 ## CANN-bench Ascend C VEC算子优化结果: ### 1a. ForeachAddcdivScalar — 分数 84.13,平均加速比 **1.693**(19/20 用例超过参考) | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 1.570 | 23.5 | 36.9 | ok | | 2 | 1.136 | 78.9 | 89.6 | ok | | 3 | 1.243 | 93.1 | 115.8 | ok | | 4 | 1.001 | 890.7 | 892.0 | ok | | 5 | 1.096 | 438.9 | 481.3 | ok | | 6 | 2.480 | 7.5 | 18.7 | ok | | 7 | 2.229 | 11.4 | 25.3 | ok | | 8 | 2.546 | 8.4 | 21.4 | ok | | 9 | 1.163 | 659.9 | 767.6 | ok | | 10 | 2.219 | 10.9 | 24.3 | ok | | 11 | 2.054 | 15.5 | 31.9 | ok | | 12 | 2.120 | 10.8 | 23.0 | ok | | 13 | 1.567 | 51.6 | 80.8 | ok | | 14 | 1.527 | 28.3 | 43.2 | ok | | 15 | 1.590 | 22.6 | 36.0 | ok | | 16 | 1.389 | 51.4 | 71.4 | ok | | 17 | 2.338 | 12.1 | 28.2 | ok | | 18 | 1.374 | 43.6 | 59.9 | ok | | 19 | 2.322 | 12.0 | 28.0 | ok | | 20 | 0.895 | 118.1 | 105.7 | ok | 小张量(6/7/8/10/11/12/17/19)达到参考的 2–2.5×;大张量(4/5/9/20)卡在带宽墙(~1.0×)。仅用例 20 <1。 ### 1b. Cummin — 分数 55.10,平均加速比 **0.132**(访存受限的扫描) | 用例 | 形状(dtype,dim) | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---|---| | 1 | [1024,1024] f16 −1 | 0.048 | 227.0 | 10.9 | ok | | 2 | [2048,2048] f32 −1 | 0.188 | 464.2 | 87.4 | ok | | 3 | [4096,4096] bf16 −1 | 0.308 | 1088.6 | 335.5 | ok | | 4 | [8192,8192] i32 −1 | 0.326 | 4461.5 | 1454.0 | ok | | 5 | [16384,16384] f16 0 | 0.172 | 18178.5 | 3131.8 | ok | | 6 | [8192,8192] f32 1 | 0.306 | 4754.7 | 1454.0 | ok | | 7 | [1023,1023] bf16 −1 | 0.067 | 259.4 | 17.4 | ok | | 8 | [1009,1021] f16 0 | 0.038 | 278.9 | 10.7 | ok | | 9 | [1537,769] f32 −1 | 0.097 | 253.3 | 24.6 | ok | | 10 | [363,367,373] bf16 1 | 0.278 | 2680.0 | 745.4 | ok | | 11 | [2049,513] f16 −1 | 0.058 | 189.3 | 10.9 | ok | | 12 | [3,7,13,4001] f32 −1 | 0.035 | 654.1 | 22.8 | ok | | 13 | [1000003] bf16 −1 | 0.001 | 24235.7 | 33.3 | ok | | 14 | [11,13,17,67,67] f16 2 | 0.009 | 12046.3 | 113.7 | ok | | 15 | [3,7,11,13,1013] i32 −1 | 0.170 | 373.6 | 63.4 | ok | | 16 | [512,2049] f32 −1 | 0.057 | 383.5 | 21.9 | ok | | 17 | [255,8193] bf16 0 | 0.119 | 234.8 | 27.9 | ok | | 18 | [4097,511] f16 −1 | 0.099 | 220.3 | 21.8 | ok | | 19 | [2,511,2049] f32 1 | 0.154 | 283.9 | 43.6 | ok | | 20 | [4,255,2049] bf16 −1 | 0.100 | 420.0 | 41.8 | ok | 最差:用例 13(单条 1M 通道的一维扫描,仅一个核,0.001)与用例 14(nan/精确标量路径,0.009)。中等 1M 用例(1/7/8/11/12/16)延迟受限,处于 0.03–0.07。 ### 1c. Transpose — 分数 65.16,平均加速比 **0.537** | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 0.021 | 507.5 | 10.9 | ok | | 2 | 1.122 | 35.9 | 40.3 | ok | | 3 | 0.876 | 80.7 | 70.6 | ok | | 4 | 0.528 | 1051.0 | 555.0 | ok | | 5 | 0.062 | 13211.9 | 814.9 | ok | | 6 | 0.099 | 124.2 | 12.3 | ok | | 7 | 0.573 | 19.0 | 10.9 | ok | | 8 | 0.706 | 30.5 | 21.5 | ok | | 9 | 0.625 | 19.7 | 12.3 | ok | | 10 | 1.008 | 646.2 | 651.3 | ok | | 11 | 0.555 | 19.6 | 10.9 | ok | | 12 | 0.672 | 33.9 | 22.8 | ok | | 13 | 0.601 | 16.6 | 10.0 | ok | | 14 | 0.852 | 24.4 | 20.8 | ok | | 15 | 0.428 | 265.9 | 113.7 | ok | | 16 | 0.067 | 1403.6 | 94.6 | ok | | 17 | 0.922 | 23.7 | 21.9 | ok | | 18 | 0.877 | 24.9 | 21.8 | ok | | 19 | 0.014 | 797.3 | 10.9 | ok | | 20 | 0.138 | 158.0 | 21.8 | ok | 多数用例处于参考的 0.5–1.1×。较慢:用例 1、19(0.02,int64/大规模全交换),用例 5(0.06,268 MB int64),用例 16(0.07),用例 6(0.10,A 维极小),用例 20(0.14)。 ## 2. CANN-bench Ascend C 18 个算子逐算子最佳加速比(仅标准 20 用例评测) 按分数从低到高排序。 avg_speedup = 相对官方参考的逐用例加速比均值。 | # | 算子 | 最佳分数 | avg_speedup(vs 参考) | vs_hw | 通过 | |---|---|---|---|---|---| | 1 | WeightQuantBatchMatmul | 33.06 | 0.091 | 0.017 | 9/20 | | 2 | Conv3DBackpropFilter | 36.21 | 0.007 | 0.001 | 14/20 | | 3 | GroupedMatmul | 43.70 | 0.101 | 0.012 | 14/20 | | 4 | DepthwiseConv2D | 48.70 | 0.053 | 0.001 | 18/20 | | 5 | ApplyRotaryPosEmb | 50.06 | 0.090 | 0.010 | 18/20 | | 6 | GQA | 51.84 | 0.048 | 0.009 | 20/20 | | 7 | MLA | 51.88 | 0.049 | 0.005 | 20/20 | | 8 | MHA | 52.20 | 0.062 | 0.014 | 20/20 | | 9 | GroupedMatmulSwigluQuant | 53.48 | 0.088 | 0.011 | 20/20 | | 10 | Gather | 54.35 | 0.212 | 0.007 | 20/20 | | 11 | Cummin | 55.12 | 0.132 | 0.008 | 20/20 | | 12 | QuantMatmul | 56.06 | 0.218 | 0.074 | 20/20 | | 13 | AddRmsNormDynamicQuant | 56.88 | 0.254 | 0.042 | 19/20 | | 14 | TopK | 57.40 | 0.211 | 0.012 | 20/20 | | 15 | Transpose | 65.16 | 0.537 | 0.039 | 20/20 | | 16 | DequantSwigluQuant | 65.84 | 0.559 | 0.082 | 20/20 | | 17 | Softmax | 67.51 | 1.428 | 0.096 | 19/20 | | 18 | ForeachAddcdivScalar | 84.13 | 1.693 | 0.534 | 20/20 | **分数 = 0.2·编译 + 0.3·功能 + 0.5·性能(×100)。** 只要 20/20 全通过,就已拿到 20(编译)+ 30(功能)= **50 分底线**;超过 50 的部分是性能项。因此低分算子分两类失效模式: - **功能受限**(未拿满 30 分底线):WeightQuant(9/20)、Conv3D 与 GroupedMatmul(14/20)、Depthwise 与 ApplyRotary(18/20)、AddRmsNorm 与 Softmax(19/20)。 - **性能受限**(全通过但 avg_speedup ≪ 1):注意力/矩阵乘簇(GQA/MLA/MHA/GroupedMatmul,约 0.05–0.10)与 Conv(0.007)。 ### Ascend C算子未来优化计划(持续更新cann-bench提交) **第一步,提升正确性。** 功能分(每算子最高 30 分)的获取成本低于性能优化,应优先补齐未通过用例:WeightQuant 当前仅通过 9/20,主要受限于 int4/int8 反量化的精度与边界值处理;Conv3D 与 GroupedMatmul 各通过 14/20;Depthwise、ApplyRotary、AddRmsNorm、Softmax 仅一至两个用例未过。与此同时需消除 no-NPU-perf 抖动,确保每个用例都执行可被 profiler 采集的 NPU 算子,避免个别用例缺失计时而导致整个算子被反作弊清零。 **第二步,为矩阵乘与注意力类算子实现一个可复用的 cube(Mmad)分块 GEMM 核**(L1→L0A/L0B→Mmad→L0C,配合双缓冲)。这类算子目前运行在标量/向量单元上,加速比仅 0.05–0.22:QuantMatmul 0.218、GroupedMatmul 与 GroupedMatmulSwigluQuant 0.09、MHA/MLA/GQA 0.05–0.06、Conv3D 0.007(采用 im2col+cube)。该核预计需数小时开发,但可同时带动上述多个算子的性能。 **第三步,进一步优化当前最高分算子 Foreach**(84.13,已超过参考实现)。其瓶颈集中于大张量用例(4/5/9/20,加速比接近 1×),可通过增大 TILE、引入三级缓冲改善数据搬运重叠,或将 Div+Muls+Add 融合为 Div+Axpy 两步来提升。由于该算子分值最高,即使 5% 的提升对总分的贡献也高于修复一个 0.05 的落后算子。 **Transpose(0.537)与 Cummin(0.132)已接近 c220 的性能上限,建议置于最后或暂缓。** 二者剩余的低速用例——transpose 的 int8/int64 与 A 维极小场景、cummin 的单核长扫描——均受硬件限制:c220 不具备 MicroAPI/RegTensor,厂商基于寄存器的 Sklansky 前缀扫描与 int8/int64 硬件转置在此均不可用;已实现并验证正确的两级 block-scan 在 910c 上无净收益。 # Triton-Ascend 优化结果 ### KernelBench L1 AutoResearch 批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:27.2h(12 op × 50 轮 max,per-op 240min wall-clock cap,--eval-timeout 600s) 状态:8 done / 4 error;batch.log 输出 done : 8 (median 1.43x, best 6.80x, worst 0.29x) ### 结果总表(精度均全部通过) | Level | Problem ID | 算子名称 | 验收类型 | PyTorch 性能(μs) | triton 性能(μs) | triton 优化后性能(μs) | 加速比(无工作流直接生成triton代码) | 加速比(AutoResearch初始生成) | 加速比(AutoResearch优化后) | 轮数 | 状态 | |---|---|---|---|---:|---:|---:|---:|---:|---:|---:|---| | 1 | 36 | RMSNorm | VECTOR | 30,043.1 | timeout | 12,310.6 | 0.03x | — | **2.44x** | 26/50 | error (240min cap) | | 1 | 42 | Max_Pooling_2D | VECTOR | 38,458.2 | 3,344,552.8 | 1,737,993.3 | — | 0.011x | **0.022x** | 33/50 | error (240min cap) | | 1 | 44 | Average_Pooling_1D | VECTOR | 20,584.3 | timeout | 12,235.3 | — | — | **1.68x** | 30/30 | done | | 1 | 45 | Average_Pooling_2D | VECTOR | 3,515,948.4 | 2,745,268.0 | 54,680.1 | — | 1.28x | **64.30x** | 40/50 | error (240min cap) | | 1 | 49 | Max_reduction_over_a_dimension | VECTOR | 21,639.9 | 16,499.2 | 6,961.1 | 0.49x | 1.31x | **3.11x** | 50/50 | done | | 1 | 51 | Argmax_over_a_dimension | VECTOR | 21,642.5 | 40,132.3 | 28,674.7 | — | 0.54x | **0.75x** | 50/50 | done | | 1 | 89 | cumsum | VECTOR | 75,221.2 | 706,479.1 | 22,177.0 | 0.22x | 0.11x | **3.39x** | 50/50 | done | | 1 | 93 | masked_cumsum | VECTOR | 90,032.7 | 716,425.3 | 18,959.6 | — | 0.13x | **4.75x** | 14/50 | error (API socket drop) | | 1 | 4 | Matrix_vector_multiplication | CUBE | 34,602.9 | 7,055.8 | 5,089.7 | 0.16x | 4.90x | **6.80x** | 50/50 | done | | 1 | 10 | 3D_tensor_matrix_multiplication | CUBE | 643.6 | 2,139.5 | 743.3 | 0.74x | 0.30x | **0.87x** | 50/50 | done | | 1 | 14 | Matmul_for_upper_triangular_matrices | CUBE | 1,800.5 | 6,464.0 | 1,525.3 | 0.25x | 0.28x | **1.18x** | 50/50 | done | | 1 | 15 | Matmul_for_lower_triangular_matrices | CUBE | 1,795.9 | 6,186.5 | 6,161.8 | 0.01x | 0.29x | **0.29x** | 50/50 | done | ### NPUKernelBench AutoResearch 较难算子批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:30.6h(11 个 op × 50 轮 max,per-op 240min wall-clock cap) #### 结果总表 | Level | Problem ID | 算子名称 | 算子类型 | 基线性能(us) | 初始triton性能(us) | 无工作流直接生成(us) | 加速比 (AutoResearch初始生成) | 加速比(AutoResearch优化后) | 精度通过率 | |---|---|---|---|---|---|---|---|---|---| | 1 | 18 | Index | vector | 89.30 | 741.19 | 700.85 | 0.12x | 0.13x | 41/41 | | 1 | 23 | RepeatInterleave | vector | 137.32 | 1969.94 | 584.05 | 0.07x | 0.24x | 75/75 | | 1 | 24 | EmbeddingDenseBackward | vector | 2227.56 | 3007.04 | 2894.63 | 0.74x | 0.77x | 30/30 | | 1 | 26 | AvgPool3d | vector | 242.78 | 1982.52 | 1267.77 | 0.12x | 0.19x | 72/72 | | 1 | 31 | IOU | vector | 656.20 | 410.17 | 363.18 | 1.60x | 1.81x | 30/30 | | 2 | 1 | RotaryMul | vector | 189.67 | 451.12 | 419.51 | 0.42x | 0.45x | 50/50 | | 2 | 5 | MoeInitRouting | vector | 484.86 | 932.58 | 927.20 | 0.52x | 0.52x | 53/53 | | 2 | 9 | TopKTopP | vector | 8905.87 | 8982.35 | 8927.97 | 0.99x | 1.00x | 50/50 | | 2 | 17 | EmbeddingWithInitialLayernormBackward | vector | 2353.81 | 2292.43 | 2282.59 | 1.03x | 1.03x | 57/57 | | 2 | 18 | FusedAddRmsnorm | vector | 485.82 | 369.37 | 201.61 | 1.32x | 2.41x | 50/50 | | 2 | 23 | HyenaFftSizePaddingRfft | vector | 941.73 | 622.61 | 517.08 | 1.51x | 1.82x | 49/49 | ## 字段说明 - **基线性能**:PyTorch F.X(...) ref 在 NPU 上跑出的延迟,单位 μs - **triton 性能**:手写 triton seed kernel 跑出的延迟(AR 优化前),单位 μs - **triton 优化后性能**:AR 50 轮 EDIT 后最佳 kernel 的延迟,单位 μs - **加速比** = 基线 / triton(>1x 表示 triton 快于 ref)的几何平均 - **加速比(性能优化后)** = 基线 / triton优化后 的几何平均 - **精度通过率** = 通过 allclose 的 case 数 / 总 case 数(per-dtype atol+rtol,fp32 2^-13/1e-5、fp16 2^-10/1e-3、bf16 2^-7/1e-2) #### 特性增强 Enhancements #### 代码清理 Cleanup ## 关联的Issue 无。 ## 测试 - 本地检查插件目录结构,确认 plugins-official/autoresearch 下包含安装脚本、应用代码、qui See merge request: cann/cannbot-skills!653 | 11 天前 | |
在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Co-authored-by: xchang1121<changxiangyu1@huawei.com> # message auto-generated for no-merge-commit merge: !653 merge master into master 在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Created-by: xchang1121 Commit-by: xchang1121 Merged-by: cann-robot Description: ## 描述 #### 新特性 New Features - 【autoresearch】新增 AutoResearch 官方插件。AutoResearch 是基于 Claude Code / Open Code,面向算子优化任务的自动化算子优化工作流项目,负责组织参考实现、候选 kernel、正确性校验、性能评测、远程ssh评测机/本地agent分离调度、批量执行和多轮优化状态管理。支持triton-ascend算子的优化。 - 【autoresearch】安装后以独立项目方式运行,保留原有 slash command、hooks、配置文件、批跑脚本和 worker 连接(使得运行agent端和评测机分离,仅通过ssh连接)方式,用户可以直接创建任务并连接本地或远端 worker 进行评测。 - 【autoresearch】内置 baseline 记录、状态机推进、失败信息提取和 CodeChecker 检查能力,便于跟踪多轮优化中的正确性、性能变化和失败原因。 ## CANN-bench Ascend C VEC算子优化结果: ### 1a. ForeachAddcdivScalar — 分数 84.13,平均加速比 **1.693**(19/20 用例超过参考) | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 1.570 | 23.5 | 36.9 | ok | | 2 | 1.136 | 78.9 | 89.6 | ok | | 3 | 1.243 | 93.1 | 115.8 | ok | | 4 | 1.001 | 890.7 | 892.0 | ok | | 5 | 1.096 | 438.9 | 481.3 | ok | | 6 | 2.480 | 7.5 | 18.7 | ok | | 7 | 2.229 | 11.4 | 25.3 | ok | | 8 | 2.546 | 8.4 | 21.4 | ok | | 9 | 1.163 | 659.9 | 767.6 | ok | | 10 | 2.219 | 10.9 | 24.3 | ok | | 11 | 2.054 | 15.5 | 31.9 | ok | | 12 | 2.120 | 10.8 | 23.0 | ok | | 13 | 1.567 | 51.6 | 80.8 | ok | | 14 | 1.527 | 28.3 | 43.2 | ok | | 15 | 1.590 | 22.6 | 36.0 | ok | | 16 | 1.389 | 51.4 | 71.4 | ok | | 17 | 2.338 | 12.1 | 28.2 | ok | | 18 | 1.374 | 43.6 | 59.9 | ok | | 19 | 2.322 | 12.0 | 28.0 | ok | | 20 | 0.895 | 118.1 | 105.7 | ok | 小张量(6/7/8/10/11/12/17/19)达到参考的 2–2.5×;大张量(4/5/9/20)卡在带宽墙(~1.0×)。仅用例 20 <1。 ### 1b. Cummin — 分数 55.10,平均加速比 **0.132**(访存受限的扫描) | 用例 | 形状(dtype,dim) | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---|---| | 1 | [1024,1024] f16 −1 | 0.048 | 227.0 | 10.9 | ok | | 2 | [2048,2048] f32 −1 | 0.188 | 464.2 | 87.4 | ok | | 3 | [4096,4096] bf16 −1 | 0.308 | 1088.6 | 335.5 | ok | | 4 | [8192,8192] i32 −1 | 0.326 | 4461.5 | 1454.0 | ok | | 5 | [16384,16384] f16 0 | 0.172 | 18178.5 | 3131.8 | ok | | 6 | [8192,8192] f32 1 | 0.306 | 4754.7 | 1454.0 | ok | | 7 | [1023,1023] bf16 −1 | 0.067 | 259.4 | 17.4 | ok | | 8 | [1009,1021] f16 0 | 0.038 | 278.9 | 10.7 | ok | | 9 | [1537,769] f32 −1 | 0.097 | 253.3 | 24.6 | ok | | 10 | [363,367,373] bf16 1 | 0.278 | 2680.0 | 745.4 | ok | | 11 | [2049,513] f16 −1 | 0.058 | 189.3 | 10.9 | ok | | 12 | [3,7,13,4001] f32 −1 | 0.035 | 654.1 | 22.8 | ok | | 13 | [1000003] bf16 −1 | 0.001 | 24235.7 | 33.3 | ok | | 14 | [11,13,17,67,67] f16 2 | 0.009 | 12046.3 | 113.7 | ok | | 15 | [3,7,11,13,1013] i32 −1 | 0.170 | 373.6 | 63.4 | ok | | 16 | [512,2049] f32 −1 | 0.057 | 383.5 | 21.9 | ok | | 17 | [255,8193] bf16 0 | 0.119 | 234.8 | 27.9 | ok | | 18 | [4097,511] f16 −1 | 0.099 | 220.3 | 21.8 | ok | | 19 | [2,511,2049] f32 1 | 0.154 | 283.9 | 43.6 | ok | | 20 | [4,255,2049] bf16 −1 | 0.100 | 420.0 | 41.8 | ok | 最差:用例 13(单条 1M 通道的一维扫描,仅一个核,0.001)与用例 14(nan/精确标量路径,0.009)。中等 1M 用例(1/7/8/11/12/16)延迟受限,处于 0.03–0.07。 ### 1c. Transpose — 分数 65.16,平均加速比 **0.537** | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 0.021 | 507.5 | 10.9 | ok | | 2 | 1.122 | 35.9 | 40.3 | ok | | 3 | 0.876 | 80.7 | 70.6 | ok | | 4 | 0.528 | 1051.0 | 555.0 | ok | | 5 | 0.062 | 13211.9 | 814.9 | ok | | 6 | 0.099 | 124.2 | 12.3 | ok | | 7 | 0.573 | 19.0 | 10.9 | ok | | 8 | 0.706 | 30.5 | 21.5 | ok | | 9 | 0.625 | 19.7 | 12.3 | ok | | 10 | 1.008 | 646.2 | 651.3 | ok | | 11 | 0.555 | 19.6 | 10.9 | ok | | 12 | 0.672 | 33.9 | 22.8 | ok | | 13 | 0.601 | 16.6 | 10.0 | ok | | 14 | 0.852 | 24.4 | 20.8 | ok | | 15 | 0.428 | 265.9 | 113.7 | ok | | 16 | 0.067 | 1403.6 | 94.6 | ok | | 17 | 0.922 | 23.7 | 21.9 | ok | | 18 | 0.877 | 24.9 | 21.8 | ok | | 19 | 0.014 | 797.3 | 10.9 | ok | | 20 | 0.138 | 158.0 | 21.8 | ok | 多数用例处于参考的 0.5–1.1×。较慢:用例 1、19(0.02,int64/大规模全交换),用例 5(0.06,268 MB int64),用例 16(0.07),用例 6(0.10,A 维极小),用例 20(0.14)。 ## 2. CANN-bench Ascend C 18 个算子逐算子最佳加速比(仅标准 20 用例评测) 按分数从低到高排序。 avg_speedup = 相对官方参考的逐用例加速比均值。 | # | 算子 | 最佳分数 | avg_speedup(vs 参考) | vs_hw | 通过 | |---|---|---|---|---|---| | 1 | WeightQuantBatchMatmul | 33.06 | 0.091 | 0.017 | 9/20 | | 2 | Conv3DBackpropFilter | 36.21 | 0.007 | 0.001 | 14/20 | | 3 | GroupedMatmul | 43.70 | 0.101 | 0.012 | 14/20 | | 4 | DepthwiseConv2D | 48.70 | 0.053 | 0.001 | 18/20 | | 5 | ApplyRotaryPosEmb | 50.06 | 0.090 | 0.010 | 18/20 | | 6 | GQA | 51.84 | 0.048 | 0.009 | 20/20 | | 7 | MLA | 51.88 | 0.049 | 0.005 | 20/20 | | 8 | MHA | 52.20 | 0.062 | 0.014 | 20/20 | | 9 | GroupedMatmulSwigluQuant | 53.48 | 0.088 | 0.011 | 20/20 | | 10 | Gather | 54.35 | 0.212 | 0.007 | 20/20 | | 11 | Cummin | 55.12 | 0.132 | 0.008 | 20/20 | | 12 | QuantMatmul | 56.06 | 0.218 | 0.074 | 20/20 | | 13 | AddRmsNormDynamicQuant | 56.88 | 0.254 | 0.042 | 19/20 | | 14 | TopK | 57.40 | 0.211 | 0.012 | 20/20 | | 15 | Transpose | 65.16 | 0.537 | 0.039 | 20/20 | | 16 | DequantSwigluQuant | 65.84 | 0.559 | 0.082 | 20/20 | | 17 | Softmax | 67.51 | 1.428 | 0.096 | 19/20 | | 18 | ForeachAddcdivScalar | 84.13 | 1.693 | 0.534 | 20/20 | **分数 = 0.2·编译 + 0.3·功能 + 0.5·性能(×100)。** 只要 20/20 全通过,就已拿到 20(编译)+ 30(功能)= **50 分底线**;超过 50 的部分是性能项。因此低分算子分两类失效模式: - **功能受限**(未拿满 30 分底线):WeightQuant(9/20)、Conv3D 与 GroupedMatmul(14/20)、Depthwise 与 ApplyRotary(18/20)、AddRmsNorm 与 Softmax(19/20)。 - **性能受限**(全通过但 avg_speedup ≪ 1):注意力/矩阵乘簇(GQA/MLA/MHA/GroupedMatmul,约 0.05–0.10)与 Conv(0.007)。 ### Ascend C算子未来优化计划(持续更新cann-bench提交) **第一步,提升正确性。** 功能分(每算子最高 30 分)的获取成本低于性能优化,应优先补齐未通过用例:WeightQuant 当前仅通过 9/20,主要受限于 int4/int8 反量化的精度与边界值处理;Conv3D 与 GroupedMatmul 各通过 14/20;Depthwise、ApplyRotary、AddRmsNorm、Softmax 仅一至两个用例未过。与此同时需消除 no-NPU-perf 抖动,确保每个用例都执行可被 profiler 采集的 NPU 算子,避免个别用例缺失计时而导致整个算子被反作弊清零。 **第二步,为矩阵乘与注意力类算子实现一个可复用的 cube(Mmad)分块 GEMM 核**(L1→L0A/L0B→Mmad→L0C,配合双缓冲)。这类算子目前运行在标量/向量单元上,加速比仅 0.05–0.22:QuantMatmul 0.218、GroupedMatmul 与 GroupedMatmulSwigluQuant 0.09、MHA/MLA/GQA 0.05–0.06、Conv3D 0.007(采用 im2col+cube)。该核预计需数小时开发,但可同时带动上述多个算子的性能。 **第三步,进一步优化当前最高分算子 Foreach**(84.13,已超过参考实现)。其瓶颈集中于大张量用例(4/5/9/20,加速比接近 1×),可通过增大 TILE、引入三级缓冲改善数据搬运重叠,或将 Div+Muls+Add 融合为 Div+Axpy 两步来提升。由于该算子分值最高,即使 5% 的提升对总分的贡献也高于修复一个 0.05 的落后算子。 **Transpose(0.537)与 Cummin(0.132)已接近 c220 的性能上限,建议置于最后或暂缓。** 二者剩余的低速用例——transpose 的 int8/int64 与 A 维极小场景、cummin 的单核长扫描——均受硬件限制:c220 不具备 MicroAPI/RegTensor,厂商基于寄存器的 Sklansky 前缀扫描与 int8/int64 硬件转置在此均不可用;已实现并验证正确的两级 block-scan 在 910c 上无净收益。 # Triton-Ascend 优化结果 ### KernelBench L1 AutoResearch 批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:27.2h(12 op × 50 轮 max,per-op 240min wall-clock cap,--eval-timeout 600s) 状态:8 done / 4 error;batch.log 输出 done : 8 (median 1.43x, best 6.80x, worst 0.29x) ### 结果总表(精度均全部通过) | Level | Problem ID | 算子名称 | 验收类型 | PyTorch 性能(μs) | triton 性能(μs) | triton 优化后性能(μs) | 加速比(无工作流直接生成triton代码) | 加速比(AutoResearch初始生成) | 加速比(AutoResearch优化后) | 轮数 | 状态 | |---|---|---|---|---:|---:|---:|---:|---:|---:|---:|---| | 1 | 36 | RMSNorm | VECTOR | 30,043.1 | timeout | 12,310.6 | 0.03x | — | **2.44x** | 26/50 | error (240min cap) | | 1 | 42 | Max_Pooling_2D | VECTOR | 38,458.2 | 3,344,552.8 | 1,737,993.3 | — | 0.011x | **0.022x** | 33/50 | error (240min cap) | | 1 | 44 | Average_Pooling_1D | VECTOR | 20,584.3 | timeout | 12,235.3 | — | — | **1.68x** | 30/30 | done | | 1 | 45 | Average_Pooling_2D | VECTOR | 3,515,948.4 | 2,745,268.0 | 54,680.1 | — | 1.28x | **64.30x** | 40/50 | error (240min cap) | | 1 | 49 | Max_reduction_over_a_dimension | VECTOR | 21,639.9 | 16,499.2 | 6,961.1 | 0.49x | 1.31x | **3.11x** | 50/50 | done | | 1 | 51 | Argmax_over_a_dimension | VECTOR | 21,642.5 | 40,132.3 | 28,674.7 | — | 0.54x | **0.75x** | 50/50 | done | | 1 | 89 | cumsum | VECTOR | 75,221.2 | 706,479.1 | 22,177.0 | 0.22x | 0.11x | **3.39x** | 50/50 | done | | 1 | 93 | masked_cumsum | VECTOR | 90,032.7 | 716,425.3 | 18,959.6 | — | 0.13x | **4.75x** | 14/50 | error (API socket drop) | | 1 | 4 | Matrix_vector_multiplication | CUBE | 34,602.9 | 7,055.8 | 5,089.7 | 0.16x | 4.90x | **6.80x** | 50/50 | done | | 1 | 10 | 3D_tensor_matrix_multiplication | CUBE | 643.6 | 2,139.5 | 743.3 | 0.74x | 0.30x | **0.87x** | 50/50 | done | | 1 | 14 | Matmul_for_upper_triangular_matrices | CUBE | 1,800.5 | 6,464.0 | 1,525.3 | 0.25x | 0.28x | **1.18x** | 50/50 | done | | 1 | 15 | Matmul_for_lower_triangular_matrices | CUBE | 1,795.9 | 6,186.5 | 6,161.8 | 0.01x | 0.29x | **0.29x** | 50/50 | done | ### NPUKernelBench AutoResearch 较难算子批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:30.6h(11 个 op × 50 轮 max,per-op 240min wall-clock cap) #### 结果总表 | Level | Problem ID | 算子名称 | 算子类型 | 基线性能(us) | 初始triton性能(us) | 无工作流直接生成(us) | 加速比 (AutoResearch初始生成) | 加速比(AutoResearch优化后) | 精度通过率 | |---|---|---|---|---|---|---|---|---|---| | 1 | 18 | Index | vector | 89.30 | 741.19 | 700.85 | 0.12x | 0.13x | 41/41 | | 1 | 23 | RepeatInterleave | vector | 137.32 | 1969.94 | 584.05 | 0.07x | 0.24x | 75/75 | | 1 | 24 | EmbeddingDenseBackward | vector | 2227.56 | 3007.04 | 2894.63 | 0.74x | 0.77x | 30/30 | | 1 | 26 | AvgPool3d | vector | 242.78 | 1982.52 | 1267.77 | 0.12x | 0.19x | 72/72 | | 1 | 31 | IOU | vector | 656.20 | 410.17 | 363.18 | 1.60x | 1.81x | 30/30 | | 2 | 1 | RotaryMul | vector | 189.67 | 451.12 | 419.51 | 0.42x | 0.45x | 50/50 | | 2 | 5 | MoeInitRouting | vector | 484.86 | 932.58 | 927.20 | 0.52x | 0.52x | 53/53 | | 2 | 9 | TopKTopP | vector | 8905.87 | 8982.35 | 8927.97 | 0.99x | 1.00x | 50/50 | | 2 | 17 | EmbeddingWithInitialLayernormBackward | vector | 2353.81 | 2292.43 | 2282.59 | 1.03x | 1.03x | 57/57 | | 2 | 18 | FusedAddRmsnorm | vector | 485.82 | 369.37 | 201.61 | 1.32x | 2.41x | 50/50 | | 2 | 23 | HyenaFftSizePaddingRfft | vector | 941.73 | 622.61 | 517.08 | 1.51x | 1.82x | 49/49 | ## 字段说明 - **基线性能**:PyTorch F.X(...) ref 在 NPU 上跑出的延迟,单位 μs - **triton 性能**:手写 triton seed kernel 跑出的延迟(AR 优化前),单位 μs - **triton 优化后性能**:AR 50 轮 EDIT 后最佳 kernel 的延迟,单位 μs - **加速比** = 基线 / triton(>1x 表示 triton 快于 ref)的几何平均 - **加速比(性能优化后)** = 基线 / triton优化后 的几何平均 - **精度通过率** = 通过 allclose 的 case 数 / 总 case 数(per-dtype atol+rtol,fp32 2^-13/1e-5、fp16 2^-10/1e-3、bf16 2^-7/1e-2) #### 特性增强 Enhancements #### 代码清理 Cleanup ## 关联的Issue 无。 ## 测试 - 本地检查插件目录结构,确认 plugins-official/autoresearch 下包含安装脚本、应用代码、qui See merge request: cann/cannbot-skills!653 | 11 天前 | |
在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Co-authored-by: xchang1121<changxiangyu1@huawei.com> # message auto-generated for no-merge-commit merge: !653 merge master into master 在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Created-by: xchang1121 Commit-by: xchang1121 Merged-by: cann-robot Description: ## 描述 #### 新特性 New Features - 【autoresearch】新增 AutoResearch 官方插件。AutoResearch 是基于 Claude Code / Open Code,面向算子优化任务的自动化算子优化工作流项目,负责组织参考实现、候选 kernel、正确性校验、性能评测、远程ssh评测机/本地agent分离调度、批量执行和多轮优化状态管理。支持triton-ascend算子的优化。 - 【autoresearch】安装后以独立项目方式运行,保留原有 slash command、hooks、配置文件、批跑脚本和 worker 连接(使得运行agent端和评测机分离,仅通过ssh连接)方式,用户可以直接创建任务并连接本地或远端 worker 进行评测。 - 【autoresearch】内置 baseline 记录、状态机推进、失败信息提取和 CodeChecker 检查能力,便于跟踪多轮优化中的正确性、性能变化和失败原因。 ## CANN-bench Ascend C VEC算子优化结果: ### 1a. ForeachAddcdivScalar — 分数 84.13,平均加速比 **1.693**(19/20 用例超过参考) | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 1.570 | 23.5 | 36.9 | ok | | 2 | 1.136 | 78.9 | 89.6 | ok | | 3 | 1.243 | 93.1 | 115.8 | ok | | 4 | 1.001 | 890.7 | 892.0 | ok | | 5 | 1.096 | 438.9 | 481.3 | ok | | 6 | 2.480 | 7.5 | 18.7 | ok | | 7 | 2.229 | 11.4 | 25.3 | ok | | 8 | 2.546 | 8.4 | 21.4 | ok | | 9 | 1.163 | 659.9 | 767.6 | ok | | 10 | 2.219 | 10.9 | 24.3 | ok | | 11 | 2.054 | 15.5 | 31.9 | ok | | 12 | 2.120 | 10.8 | 23.0 | ok | | 13 | 1.567 | 51.6 | 80.8 | ok | | 14 | 1.527 | 28.3 | 43.2 | ok | | 15 | 1.590 | 22.6 | 36.0 | ok | | 16 | 1.389 | 51.4 | 71.4 | ok | | 17 | 2.338 | 12.1 | 28.2 | ok | | 18 | 1.374 | 43.6 | 59.9 | ok | | 19 | 2.322 | 12.0 | 28.0 | ok | | 20 | 0.895 | 118.1 | 105.7 | ok | 小张量(6/7/8/10/11/12/17/19)达到参考的 2–2.5×;大张量(4/5/9/20)卡在带宽墙(~1.0×)。仅用例 20 <1。 ### 1b. Cummin — 分数 55.10,平均加速比 **0.132**(访存受限的扫描) | 用例 | 形状(dtype,dim) | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---|---| | 1 | [1024,1024] f16 −1 | 0.048 | 227.0 | 10.9 | ok | | 2 | [2048,2048] f32 −1 | 0.188 | 464.2 | 87.4 | ok | | 3 | [4096,4096] bf16 −1 | 0.308 | 1088.6 | 335.5 | ok | | 4 | [8192,8192] i32 −1 | 0.326 | 4461.5 | 1454.0 | ok | | 5 | [16384,16384] f16 0 | 0.172 | 18178.5 | 3131.8 | ok | | 6 | [8192,8192] f32 1 | 0.306 | 4754.7 | 1454.0 | ok | | 7 | [1023,1023] bf16 −1 | 0.067 | 259.4 | 17.4 | ok | | 8 | [1009,1021] f16 0 | 0.038 | 278.9 | 10.7 | ok | | 9 | [1537,769] f32 −1 | 0.097 | 253.3 | 24.6 | ok | | 10 | [363,367,373] bf16 1 | 0.278 | 2680.0 | 745.4 | ok | | 11 | [2049,513] f16 −1 | 0.058 | 189.3 | 10.9 | ok | | 12 | [3,7,13,4001] f32 −1 | 0.035 | 654.1 | 22.8 | ok | | 13 | [1000003] bf16 −1 | 0.001 | 24235.7 | 33.3 | ok | | 14 | [11,13,17,67,67] f16 2 | 0.009 | 12046.3 | 113.7 | ok | | 15 | [3,7,11,13,1013] i32 −1 | 0.170 | 373.6 | 63.4 | ok | | 16 | [512,2049] f32 −1 | 0.057 | 383.5 | 21.9 | ok | | 17 | [255,8193] bf16 0 | 0.119 | 234.8 | 27.9 | ok | | 18 | [4097,511] f16 −1 | 0.099 | 220.3 | 21.8 | ok | | 19 | [2,511,2049] f32 1 | 0.154 | 283.9 | 43.6 | ok | | 20 | [4,255,2049] bf16 −1 | 0.100 | 420.0 | 41.8 | ok | 最差:用例 13(单条 1M 通道的一维扫描,仅一个核,0.001)与用例 14(nan/精确标量路径,0.009)。中等 1M 用例(1/7/8/11/12/16)延迟受限,处于 0.03–0.07。 ### 1c. Transpose — 分数 65.16,平均加速比 **0.537** | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 0.021 | 507.5 | 10.9 | ok | | 2 | 1.122 | 35.9 | 40.3 | ok | | 3 | 0.876 | 80.7 | 70.6 | ok | | 4 | 0.528 | 1051.0 | 555.0 | ok | | 5 | 0.062 | 13211.9 | 814.9 | ok | | 6 | 0.099 | 124.2 | 12.3 | ok | | 7 | 0.573 | 19.0 | 10.9 | ok | | 8 | 0.706 | 30.5 | 21.5 | ok | | 9 | 0.625 | 19.7 | 12.3 | ok | | 10 | 1.008 | 646.2 | 651.3 | ok | | 11 | 0.555 | 19.6 | 10.9 | ok | | 12 | 0.672 | 33.9 | 22.8 | ok | | 13 | 0.601 | 16.6 | 10.0 | ok | | 14 | 0.852 | 24.4 | 20.8 | ok | | 15 | 0.428 | 265.9 | 113.7 | ok | | 16 | 0.067 | 1403.6 | 94.6 | ok | | 17 | 0.922 | 23.7 | 21.9 | ok | | 18 | 0.877 | 24.9 | 21.8 | ok | | 19 | 0.014 | 797.3 | 10.9 | ok | | 20 | 0.138 | 158.0 | 21.8 | ok | 多数用例处于参考的 0.5–1.1×。较慢:用例 1、19(0.02,int64/大规模全交换),用例 5(0.06,268 MB int64),用例 16(0.07),用例 6(0.10,A 维极小),用例 20(0.14)。 ## 2. CANN-bench Ascend C 18 个算子逐算子最佳加速比(仅标准 20 用例评测) 按分数从低到高排序。 avg_speedup = 相对官方参考的逐用例加速比均值。 | # | 算子 | 最佳分数 | avg_speedup(vs 参考) | vs_hw | 通过 | |---|---|---|---|---|---| | 1 | WeightQuantBatchMatmul | 33.06 | 0.091 | 0.017 | 9/20 | | 2 | Conv3DBackpropFilter | 36.21 | 0.007 | 0.001 | 14/20 | | 3 | GroupedMatmul | 43.70 | 0.101 | 0.012 | 14/20 | | 4 | DepthwiseConv2D | 48.70 | 0.053 | 0.001 | 18/20 | | 5 | ApplyRotaryPosEmb | 50.06 | 0.090 | 0.010 | 18/20 | | 6 | GQA | 51.84 | 0.048 | 0.009 | 20/20 | | 7 | MLA | 51.88 | 0.049 | 0.005 | 20/20 | | 8 | MHA | 52.20 | 0.062 | 0.014 | 20/20 | | 9 | GroupedMatmulSwigluQuant | 53.48 | 0.088 | 0.011 | 20/20 | | 10 | Gather | 54.35 | 0.212 | 0.007 | 20/20 | | 11 | Cummin | 55.12 | 0.132 | 0.008 | 20/20 | | 12 | QuantMatmul | 56.06 | 0.218 | 0.074 | 20/20 | | 13 | AddRmsNormDynamicQuant | 56.88 | 0.254 | 0.042 | 19/20 | | 14 | TopK | 57.40 | 0.211 | 0.012 | 20/20 | | 15 | Transpose | 65.16 | 0.537 | 0.039 | 20/20 | | 16 | DequantSwigluQuant | 65.84 | 0.559 | 0.082 | 20/20 | | 17 | Softmax | 67.51 | 1.428 | 0.096 | 19/20 | | 18 | ForeachAddcdivScalar | 84.13 | 1.693 | 0.534 | 20/20 | **分数 = 0.2·编译 + 0.3·功能 + 0.5·性能(×100)。** 只要 20/20 全通过,就已拿到 20(编译)+ 30(功能)= **50 分底线**;超过 50 的部分是性能项。因此低分算子分两类失效模式: - **功能受限**(未拿满 30 分底线):WeightQuant(9/20)、Conv3D 与 GroupedMatmul(14/20)、Depthwise 与 ApplyRotary(18/20)、AddRmsNorm 与 Softmax(19/20)。 - **性能受限**(全通过但 avg_speedup ≪ 1):注意力/矩阵乘簇(GQA/MLA/MHA/GroupedMatmul,约 0.05–0.10)与 Conv(0.007)。 ### Ascend C算子未来优化计划(持续更新cann-bench提交) **第一步,提升正确性。** 功能分(每算子最高 30 分)的获取成本低于性能优化,应优先补齐未通过用例:WeightQuant 当前仅通过 9/20,主要受限于 int4/int8 反量化的精度与边界值处理;Conv3D 与 GroupedMatmul 各通过 14/20;Depthwise、ApplyRotary、AddRmsNorm、Softmax 仅一至两个用例未过。与此同时需消除 no-NPU-perf 抖动,确保每个用例都执行可被 profiler 采集的 NPU 算子,避免个别用例缺失计时而导致整个算子被反作弊清零。 **第二步,为矩阵乘与注意力类算子实现一个可复用的 cube(Mmad)分块 GEMM 核**(L1→L0A/L0B→Mmad→L0C,配合双缓冲)。这类算子目前运行在标量/向量单元上,加速比仅 0.05–0.22:QuantMatmul 0.218、GroupedMatmul 与 GroupedMatmulSwigluQuant 0.09、MHA/MLA/GQA 0.05–0.06、Conv3D 0.007(采用 im2col+cube)。该核预计需数小时开发,但可同时带动上述多个算子的性能。 **第三步,进一步优化当前最高分算子 Foreach**(84.13,已超过参考实现)。其瓶颈集中于大张量用例(4/5/9/20,加速比接近 1×),可通过增大 TILE、引入三级缓冲改善数据搬运重叠,或将 Div+Muls+Add 融合为 Div+Axpy 两步来提升。由于该算子分值最高,即使 5% 的提升对总分的贡献也高于修复一个 0.05 的落后算子。 **Transpose(0.537)与 Cummin(0.132)已接近 c220 的性能上限,建议置于最后或暂缓。** 二者剩余的低速用例——transpose 的 int8/int64 与 A 维极小场景、cummin 的单核长扫描——均受硬件限制:c220 不具备 MicroAPI/RegTensor,厂商基于寄存器的 Sklansky 前缀扫描与 int8/int64 硬件转置在此均不可用;已实现并验证正确的两级 block-scan 在 910c 上无净收益。 # Triton-Ascend 优化结果 ### KernelBench L1 AutoResearch 批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:27.2h(12 op × 50 轮 max,per-op 240min wall-clock cap,--eval-timeout 600s) 状态:8 done / 4 error;batch.log 输出 done : 8 (median 1.43x, best 6.80x, worst 0.29x) ### 结果总表(精度均全部通过) | Level | Problem ID | 算子名称 | 验收类型 | PyTorch 性能(μs) | triton 性能(μs) | triton 优化后性能(μs) | 加速比(无工作流直接生成triton代码) | 加速比(AutoResearch初始生成) | 加速比(AutoResearch优化后) | 轮数 | 状态 | |---|---|---|---|---:|---:|---:|---:|---:|---:|---:|---| | 1 | 36 | RMSNorm | VECTOR | 30,043.1 | timeout | 12,310.6 | 0.03x | — | **2.44x** | 26/50 | error (240min cap) | | 1 | 42 | Max_Pooling_2D | VECTOR | 38,458.2 | 3,344,552.8 | 1,737,993.3 | — | 0.011x | **0.022x** | 33/50 | error (240min cap) | | 1 | 44 | Average_Pooling_1D | VECTOR | 20,584.3 | timeout | 12,235.3 | — | — | **1.68x** | 30/30 | done | | 1 | 45 | Average_Pooling_2D | VECTOR | 3,515,948.4 | 2,745,268.0 | 54,680.1 | — | 1.28x | **64.30x** | 40/50 | error (240min cap) | | 1 | 49 | Max_reduction_over_a_dimension | VECTOR | 21,639.9 | 16,499.2 | 6,961.1 | 0.49x | 1.31x | **3.11x** | 50/50 | done | | 1 | 51 | Argmax_over_a_dimension | VECTOR | 21,642.5 | 40,132.3 | 28,674.7 | — | 0.54x | **0.75x** | 50/50 | done | | 1 | 89 | cumsum | VECTOR | 75,221.2 | 706,479.1 | 22,177.0 | 0.22x | 0.11x | **3.39x** | 50/50 | done | | 1 | 93 | masked_cumsum | VECTOR | 90,032.7 | 716,425.3 | 18,959.6 | — | 0.13x | **4.75x** | 14/50 | error (API socket drop) | | 1 | 4 | Matrix_vector_multiplication | CUBE | 34,602.9 | 7,055.8 | 5,089.7 | 0.16x | 4.90x | **6.80x** | 50/50 | done | | 1 | 10 | 3D_tensor_matrix_multiplication | CUBE | 643.6 | 2,139.5 | 743.3 | 0.74x | 0.30x | **0.87x** | 50/50 | done | | 1 | 14 | Matmul_for_upper_triangular_matrices | CUBE | 1,800.5 | 6,464.0 | 1,525.3 | 0.25x | 0.28x | **1.18x** | 50/50 | done | | 1 | 15 | Matmul_for_lower_triangular_matrices | CUBE | 1,795.9 | 6,186.5 | 6,161.8 | 0.01x | 0.29x | **0.29x** | 50/50 | done | ### NPUKernelBench AutoResearch 较难算子批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:30.6h(11 个 op × 50 轮 max,per-op 240min wall-clock cap) #### 结果总表 | Level | Problem ID | 算子名称 | 算子类型 | 基线性能(us) | 初始triton性能(us) | 无工作流直接生成(us) | 加速比 (AutoResearch初始生成) | 加速比(AutoResearch优化后) | 精度通过率 | |---|---|---|---|---|---|---|---|---|---| | 1 | 18 | Index | vector | 89.30 | 741.19 | 700.85 | 0.12x | 0.13x | 41/41 | | 1 | 23 | RepeatInterleave | vector | 137.32 | 1969.94 | 584.05 | 0.07x | 0.24x | 75/75 | | 1 | 24 | EmbeddingDenseBackward | vector | 2227.56 | 3007.04 | 2894.63 | 0.74x | 0.77x | 30/30 | | 1 | 26 | AvgPool3d | vector | 242.78 | 1982.52 | 1267.77 | 0.12x | 0.19x | 72/72 | | 1 | 31 | IOU | vector | 656.20 | 410.17 | 363.18 | 1.60x | 1.81x | 30/30 | | 2 | 1 | RotaryMul | vector | 189.67 | 451.12 | 419.51 | 0.42x | 0.45x | 50/50 | | 2 | 5 | MoeInitRouting | vector | 484.86 | 932.58 | 927.20 | 0.52x | 0.52x | 53/53 | | 2 | 9 | TopKTopP | vector | 8905.87 | 8982.35 | 8927.97 | 0.99x | 1.00x | 50/50 | | 2 | 17 | EmbeddingWithInitialLayernormBackward | vector | 2353.81 | 2292.43 | 2282.59 | 1.03x | 1.03x | 57/57 | | 2 | 18 | FusedAddRmsnorm | vector | 485.82 | 369.37 | 201.61 | 1.32x | 2.41x | 50/50 | | 2 | 23 | HyenaFftSizePaddingRfft | vector | 941.73 | 622.61 | 517.08 | 1.51x | 1.82x | 49/49 | ## 字段说明 - **基线性能**:PyTorch F.X(...) ref 在 NPU 上跑出的延迟,单位 μs - **triton 性能**:手写 triton seed kernel 跑出的延迟(AR 优化前),单位 μs - **triton 优化后性能**:AR 50 轮 EDIT 后最佳 kernel 的延迟,单位 μs - **加速比** = 基线 / triton(>1x 表示 triton 快于 ref)的几何平均 - **加速比(性能优化后)** = 基线 / triton优化后 的几何平均 - **精度通过率** = 通过 allclose 的 case 数 / 总 case 数(per-dtype atol+rtol,fp32 2^-13/1e-5、fp16 2^-10/1e-3、bf16 2^-7/1e-2) #### 特性增强 Enhancements #### 代码清理 Cleanup ## 关联的Issue 无。 ## 测试 - 本地检查插件目录结构,确认 plugins-official/autoresearch 下包含安装脚本、应用代码、qui See merge request: cann/cannbot-skills!653 | 11 天前 | |
在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Co-authored-by: xchang1121<changxiangyu1@huawei.com> # message auto-generated for no-merge-commit merge: !653 merge master into master 在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Created-by: xchang1121 Commit-by: xchang1121 Merged-by: cann-robot Description: ## 描述 #### 新特性 New Features - 【autoresearch】新增 AutoResearch 官方插件。AutoResearch 是基于 Claude Code / Open Code,面向算子优化任务的自动化算子优化工作流项目,负责组织参考实现、候选 kernel、正确性校验、性能评测、远程ssh评测机/本地agent分离调度、批量执行和多轮优化状态管理。支持triton-ascend算子的优化。 - 【autoresearch】安装后以独立项目方式运行,保留原有 slash command、hooks、配置文件、批跑脚本和 worker 连接(使得运行agent端和评测机分离,仅通过ssh连接)方式,用户可以直接创建任务并连接本地或远端 worker 进行评测。 - 【autoresearch】内置 baseline 记录、状态机推进、失败信息提取和 CodeChecker 检查能力,便于跟踪多轮优化中的正确性、性能变化和失败原因。 ## CANN-bench Ascend C VEC算子优化结果: ### 1a. ForeachAddcdivScalar — 分数 84.13,平均加速比 **1.693**(19/20 用例超过参考) | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 1.570 | 23.5 | 36.9 | ok | | 2 | 1.136 | 78.9 | 89.6 | ok | | 3 | 1.243 | 93.1 | 115.8 | ok | | 4 | 1.001 | 890.7 | 892.0 | ok | | 5 | 1.096 | 438.9 | 481.3 | ok | | 6 | 2.480 | 7.5 | 18.7 | ok | | 7 | 2.229 | 11.4 | 25.3 | ok | | 8 | 2.546 | 8.4 | 21.4 | ok | | 9 | 1.163 | 659.9 | 767.6 | ok | | 10 | 2.219 | 10.9 | 24.3 | ok | | 11 | 2.054 | 15.5 | 31.9 | ok | | 12 | 2.120 | 10.8 | 23.0 | ok | | 13 | 1.567 | 51.6 | 80.8 | ok | | 14 | 1.527 | 28.3 | 43.2 | ok | | 15 | 1.590 | 22.6 | 36.0 | ok | | 16 | 1.389 | 51.4 | 71.4 | ok | | 17 | 2.338 | 12.1 | 28.2 | ok | | 18 | 1.374 | 43.6 | 59.9 | ok | | 19 | 2.322 | 12.0 | 28.0 | ok | | 20 | 0.895 | 118.1 | 105.7 | ok | 小张量(6/7/8/10/11/12/17/19)达到参考的 2–2.5×;大张量(4/5/9/20)卡在带宽墙(~1.0×)。仅用例 20 <1。 ### 1b. Cummin — 分数 55.10,平均加速比 **0.132**(访存受限的扫描) | 用例 | 形状(dtype,dim) | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---|---| | 1 | [1024,1024] f16 −1 | 0.048 | 227.0 | 10.9 | ok | | 2 | [2048,2048] f32 −1 | 0.188 | 464.2 | 87.4 | ok | | 3 | [4096,4096] bf16 −1 | 0.308 | 1088.6 | 335.5 | ok | | 4 | [8192,8192] i32 −1 | 0.326 | 4461.5 | 1454.0 | ok | | 5 | [16384,16384] f16 0 | 0.172 | 18178.5 | 3131.8 | ok | | 6 | [8192,8192] f32 1 | 0.306 | 4754.7 | 1454.0 | ok | | 7 | [1023,1023] bf16 −1 | 0.067 | 259.4 | 17.4 | ok | | 8 | [1009,1021] f16 0 | 0.038 | 278.9 | 10.7 | ok | | 9 | [1537,769] f32 −1 | 0.097 | 253.3 | 24.6 | ok | | 10 | [363,367,373] bf16 1 | 0.278 | 2680.0 | 745.4 | ok | | 11 | [2049,513] f16 −1 | 0.058 | 189.3 | 10.9 | ok | | 12 | [3,7,13,4001] f32 −1 | 0.035 | 654.1 | 22.8 | ok | | 13 | [1000003] bf16 −1 | 0.001 | 24235.7 | 33.3 | ok | | 14 | [11,13,17,67,67] f16 2 | 0.009 | 12046.3 | 113.7 | ok | | 15 | [3,7,11,13,1013] i32 −1 | 0.170 | 373.6 | 63.4 | ok | | 16 | [512,2049] f32 −1 | 0.057 | 383.5 | 21.9 | ok | | 17 | [255,8193] bf16 0 | 0.119 | 234.8 | 27.9 | ok | | 18 | [4097,511] f16 −1 | 0.099 | 220.3 | 21.8 | ok | | 19 | [2,511,2049] f32 1 | 0.154 | 283.9 | 43.6 | ok | | 20 | [4,255,2049] bf16 −1 | 0.100 | 420.0 | 41.8 | ok | 最差:用例 13(单条 1M 通道的一维扫描,仅一个核,0.001)与用例 14(nan/精确标量路径,0.009)。中等 1M 用例(1/7/8/11/12/16)延迟受限,处于 0.03–0.07。 ### 1c. Transpose — 分数 65.16,平均加速比 **0.537** | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 0.021 | 507.5 | 10.9 | ok | | 2 | 1.122 | 35.9 | 40.3 | ok | | 3 | 0.876 | 80.7 | 70.6 | ok | | 4 | 0.528 | 1051.0 | 555.0 | ok | | 5 | 0.062 | 13211.9 | 814.9 | ok | | 6 | 0.099 | 124.2 | 12.3 | ok | | 7 | 0.573 | 19.0 | 10.9 | ok | | 8 | 0.706 | 30.5 | 21.5 | ok | | 9 | 0.625 | 19.7 | 12.3 | ok | | 10 | 1.008 | 646.2 | 651.3 | ok | | 11 | 0.555 | 19.6 | 10.9 | ok | | 12 | 0.672 | 33.9 | 22.8 | ok | | 13 | 0.601 | 16.6 | 10.0 | ok | | 14 | 0.852 | 24.4 | 20.8 | ok | | 15 | 0.428 | 265.9 | 113.7 | ok | | 16 | 0.067 | 1403.6 | 94.6 | ok | | 17 | 0.922 | 23.7 | 21.9 | ok | | 18 | 0.877 | 24.9 | 21.8 | ok | | 19 | 0.014 | 797.3 | 10.9 | ok | | 20 | 0.138 | 158.0 | 21.8 | ok | 多数用例处于参考的 0.5–1.1×。较慢:用例 1、19(0.02,int64/大规模全交换),用例 5(0.06,268 MB int64),用例 16(0.07),用例 6(0.10,A 维极小),用例 20(0.14)。 ## 2. CANN-bench Ascend C 18 个算子逐算子最佳加速比(仅标准 20 用例评测) 按分数从低到高排序。 avg_speedup = 相对官方参考的逐用例加速比均值。 | # | 算子 | 最佳分数 | avg_speedup(vs 参考) | vs_hw | 通过 | |---|---|---|---|---|---| | 1 | WeightQuantBatchMatmul | 33.06 | 0.091 | 0.017 | 9/20 | | 2 | Conv3DBackpropFilter | 36.21 | 0.007 | 0.001 | 14/20 | | 3 | GroupedMatmul | 43.70 | 0.101 | 0.012 | 14/20 | | 4 | DepthwiseConv2D | 48.70 | 0.053 | 0.001 | 18/20 | | 5 | ApplyRotaryPosEmb | 50.06 | 0.090 | 0.010 | 18/20 | | 6 | GQA | 51.84 | 0.048 | 0.009 | 20/20 | | 7 | MLA | 51.88 | 0.049 | 0.005 | 20/20 | | 8 | MHA | 52.20 | 0.062 | 0.014 | 20/20 | | 9 | GroupedMatmulSwigluQuant | 53.48 | 0.088 | 0.011 | 20/20 | | 10 | Gather | 54.35 | 0.212 | 0.007 | 20/20 | | 11 | Cummin | 55.12 | 0.132 | 0.008 | 20/20 | | 12 | QuantMatmul | 56.06 | 0.218 | 0.074 | 20/20 | | 13 | AddRmsNormDynamicQuant | 56.88 | 0.254 | 0.042 | 19/20 | | 14 | TopK | 57.40 | 0.211 | 0.012 | 20/20 | | 15 | Transpose | 65.16 | 0.537 | 0.039 | 20/20 | | 16 | DequantSwigluQuant | 65.84 | 0.559 | 0.082 | 20/20 | | 17 | Softmax | 67.51 | 1.428 | 0.096 | 19/20 | | 18 | ForeachAddcdivScalar | 84.13 | 1.693 | 0.534 | 20/20 | **分数 = 0.2·编译 + 0.3·功能 + 0.5·性能(×100)。** 只要 20/20 全通过,就已拿到 20(编译)+ 30(功能)= **50 分底线**;超过 50 的部分是性能项。因此低分算子分两类失效模式: - **功能受限**(未拿满 30 分底线):WeightQuant(9/20)、Conv3D 与 GroupedMatmul(14/20)、Depthwise 与 ApplyRotary(18/20)、AddRmsNorm 与 Softmax(19/20)。 - **性能受限**(全通过但 avg_speedup ≪ 1):注意力/矩阵乘簇(GQA/MLA/MHA/GroupedMatmul,约 0.05–0.10)与 Conv(0.007)。 ### Ascend C算子未来优化计划(持续更新cann-bench提交) **第一步,提升正确性。** 功能分(每算子最高 30 分)的获取成本低于性能优化,应优先补齐未通过用例:WeightQuant 当前仅通过 9/20,主要受限于 int4/int8 反量化的精度与边界值处理;Conv3D 与 GroupedMatmul 各通过 14/20;Depthwise、ApplyRotary、AddRmsNorm、Softmax 仅一至两个用例未过。与此同时需消除 no-NPU-perf 抖动,确保每个用例都执行可被 profiler 采集的 NPU 算子,避免个别用例缺失计时而导致整个算子被反作弊清零。 **第二步,为矩阵乘与注意力类算子实现一个可复用的 cube(Mmad)分块 GEMM 核**(L1→L0A/L0B→Mmad→L0C,配合双缓冲)。这类算子目前运行在标量/向量单元上,加速比仅 0.05–0.22:QuantMatmul 0.218、GroupedMatmul 与 GroupedMatmulSwigluQuant 0.09、MHA/MLA/GQA 0.05–0.06、Conv3D 0.007(采用 im2col+cube)。该核预计需数小时开发,但可同时带动上述多个算子的性能。 **第三步,进一步优化当前最高分算子 Foreach**(84.13,已超过参考实现)。其瓶颈集中于大张量用例(4/5/9/20,加速比接近 1×),可通过增大 TILE、引入三级缓冲改善数据搬运重叠,或将 Div+Muls+Add 融合为 Div+Axpy 两步来提升。由于该算子分值最高,即使 5% 的提升对总分的贡献也高于修复一个 0.05 的落后算子。 **Transpose(0.537)与 Cummin(0.132)已接近 c220 的性能上限,建议置于最后或暂缓。** 二者剩余的低速用例——transpose 的 int8/int64 与 A 维极小场景、cummin 的单核长扫描——均受硬件限制:c220 不具备 MicroAPI/RegTensor,厂商基于寄存器的 Sklansky 前缀扫描与 int8/int64 硬件转置在此均不可用;已实现并验证正确的两级 block-scan 在 910c 上无净收益。 # Triton-Ascend 优化结果 ### KernelBench L1 AutoResearch 批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:27.2h(12 op × 50 轮 max,per-op 240min wall-clock cap,--eval-timeout 600s) 状态:8 done / 4 error;batch.log 输出 done : 8 (median 1.43x, best 6.80x, worst 0.29x) ### 结果总表(精度均全部通过) | Level | Problem ID | 算子名称 | 验收类型 | PyTorch 性能(μs) | triton 性能(μs) | triton 优化后性能(μs) | 加速比(无工作流直接生成triton代码) | 加速比(AutoResearch初始生成) | 加速比(AutoResearch优化后) | 轮数 | 状态 | |---|---|---|---|---:|---:|---:|---:|---:|---:|---:|---| | 1 | 36 | RMSNorm | VECTOR | 30,043.1 | timeout | 12,310.6 | 0.03x | — | **2.44x** | 26/50 | error (240min cap) | | 1 | 42 | Max_Pooling_2D | VECTOR | 38,458.2 | 3,344,552.8 | 1,737,993.3 | — | 0.011x | **0.022x** | 33/50 | error (240min cap) | | 1 | 44 | Average_Pooling_1D | VECTOR | 20,584.3 | timeout | 12,235.3 | — | — | **1.68x** | 30/30 | done | | 1 | 45 | Average_Pooling_2D | VECTOR | 3,515,948.4 | 2,745,268.0 | 54,680.1 | — | 1.28x | **64.30x** | 40/50 | error (240min cap) | | 1 | 49 | Max_reduction_over_a_dimension | VECTOR | 21,639.9 | 16,499.2 | 6,961.1 | 0.49x | 1.31x | **3.11x** | 50/50 | done | | 1 | 51 | Argmax_over_a_dimension | VECTOR | 21,642.5 | 40,132.3 | 28,674.7 | — | 0.54x | **0.75x** | 50/50 | done | | 1 | 89 | cumsum | VECTOR | 75,221.2 | 706,479.1 | 22,177.0 | 0.22x | 0.11x | **3.39x** | 50/50 | done | | 1 | 93 | masked_cumsum | VECTOR | 90,032.7 | 716,425.3 | 18,959.6 | — | 0.13x | **4.75x** | 14/50 | error (API socket drop) | | 1 | 4 | Matrix_vector_multiplication | CUBE | 34,602.9 | 7,055.8 | 5,089.7 | 0.16x | 4.90x | **6.80x** | 50/50 | done | | 1 | 10 | 3D_tensor_matrix_multiplication | CUBE | 643.6 | 2,139.5 | 743.3 | 0.74x | 0.30x | **0.87x** | 50/50 | done | | 1 | 14 | Matmul_for_upper_triangular_matrices | CUBE | 1,800.5 | 6,464.0 | 1,525.3 | 0.25x | 0.28x | **1.18x** | 50/50 | done | | 1 | 15 | Matmul_for_lower_triangular_matrices | CUBE | 1,795.9 | 6,186.5 | 6,161.8 | 0.01x | 0.29x | **0.29x** | 50/50 | done | ### NPUKernelBench AutoResearch 较难算子批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:30.6h(11 个 op × 50 轮 max,per-op 240min wall-clock cap) #### 结果总表 | Level | Problem ID | 算子名称 | 算子类型 | 基线性能(us) | 初始triton性能(us) | 无工作流直接生成(us) | 加速比 (AutoResearch初始生成) | 加速比(AutoResearch优化后) | 精度通过率 | |---|---|---|---|---|---|---|---|---|---| | 1 | 18 | Index | vector | 89.30 | 741.19 | 700.85 | 0.12x | 0.13x | 41/41 | | 1 | 23 | RepeatInterleave | vector | 137.32 | 1969.94 | 584.05 | 0.07x | 0.24x | 75/75 | | 1 | 24 | EmbeddingDenseBackward | vector | 2227.56 | 3007.04 | 2894.63 | 0.74x | 0.77x | 30/30 | | 1 | 26 | AvgPool3d | vector | 242.78 | 1982.52 | 1267.77 | 0.12x | 0.19x | 72/72 | | 1 | 31 | IOU | vector | 656.20 | 410.17 | 363.18 | 1.60x | 1.81x | 30/30 | | 2 | 1 | RotaryMul | vector | 189.67 | 451.12 | 419.51 | 0.42x | 0.45x | 50/50 | | 2 | 5 | MoeInitRouting | vector | 484.86 | 932.58 | 927.20 | 0.52x | 0.52x | 53/53 | | 2 | 9 | TopKTopP | vector | 8905.87 | 8982.35 | 8927.97 | 0.99x | 1.00x | 50/50 | | 2 | 17 | EmbeddingWithInitialLayernormBackward | vector | 2353.81 | 2292.43 | 2282.59 | 1.03x | 1.03x | 57/57 | | 2 | 18 | FusedAddRmsnorm | vector | 485.82 | 369.37 | 201.61 | 1.32x | 2.41x | 50/50 | | 2 | 23 | HyenaFftSizePaddingRfft | vector | 941.73 | 622.61 | 517.08 | 1.51x | 1.82x | 49/49 | ## 字段说明 - **基线性能**:PyTorch F.X(...) ref 在 NPU 上跑出的延迟,单位 μs - **triton 性能**:手写 triton seed kernel 跑出的延迟(AR 优化前),单位 μs - **triton 优化后性能**:AR 50 轮 EDIT 后最佳 kernel 的延迟,单位 μs - **加速比** = 基线 / triton(>1x 表示 triton 快于 ref)的几何平均 - **加速比(性能优化后)** = 基线 / triton优化后 的几何平均 - **精度通过率** = 通过 allclose 的 case 数 / 总 case 数(per-dtype atol+rtol,fp32 2^-13/1e-5、fp16 2^-10/1e-3、bf16 2^-7/1e-2) #### 特性增强 Enhancements #### 代码清理 Cleanup ## 关联的Issue 无。 ## 测试 - 本地检查插件目录结构,确认 plugins-official/autoresearch 下包含安装脚本、应用代码、qui See merge request: cann/cannbot-skills!653 | 11 天前 | |
在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Co-authored-by: xchang1121<changxiangyu1@huawei.com> # message auto-generated for no-merge-commit merge: !653 merge master into master 在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Created-by: xchang1121 Commit-by: xchang1121 Merged-by: cann-robot Description: ## 描述 #### 新特性 New Features - 【autoresearch】新增 AutoResearch 官方插件。AutoResearch 是基于 Claude Code / Open Code,面向算子优化任务的自动化算子优化工作流项目,负责组织参考实现、候选 kernel、正确性校验、性能评测、远程ssh评测机/本地agent分离调度、批量执行和多轮优化状态管理。支持triton-ascend算子的优化。 - 【autoresearch】安装后以独立项目方式运行,保留原有 slash command、hooks、配置文件、批跑脚本和 worker 连接(使得运行agent端和评测机分离,仅通过ssh连接)方式,用户可以直接创建任务并连接本地或远端 worker 进行评测。 - 【autoresearch】内置 baseline 记录、状态机推进、失败信息提取和 CodeChecker 检查能力,便于跟踪多轮优化中的正确性、性能变化和失败原因。 ## CANN-bench Ascend C VEC算子优化结果: ### 1a. ForeachAddcdivScalar — 分数 84.13,平均加速比 **1.693**(19/20 用例超过参考) | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 1.570 | 23.5 | 36.9 | ok | | 2 | 1.136 | 78.9 | 89.6 | ok | | 3 | 1.243 | 93.1 | 115.8 | ok | | 4 | 1.001 | 890.7 | 892.0 | ok | | 5 | 1.096 | 438.9 | 481.3 | ok | | 6 | 2.480 | 7.5 | 18.7 | ok | | 7 | 2.229 | 11.4 | 25.3 | ok | | 8 | 2.546 | 8.4 | 21.4 | ok | | 9 | 1.163 | 659.9 | 767.6 | ok | | 10 | 2.219 | 10.9 | 24.3 | ok | | 11 | 2.054 | 15.5 | 31.9 | ok | | 12 | 2.120 | 10.8 | 23.0 | ok | | 13 | 1.567 | 51.6 | 80.8 | ok | | 14 | 1.527 | 28.3 | 43.2 | ok | | 15 | 1.590 | 22.6 | 36.0 | ok | | 16 | 1.389 | 51.4 | 71.4 | ok | | 17 | 2.338 | 12.1 | 28.2 | ok | | 18 | 1.374 | 43.6 | 59.9 | ok | | 19 | 2.322 | 12.0 | 28.0 | ok | | 20 | 0.895 | 118.1 | 105.7 | ok | 小张量(6/7/8/10/11/12/17/19)达到参考的 2–2.5×;大张量(4/5/9/20)卡在带宽墙(~1.0×)。仅用例 20 <1。 ### 1b. Cummin — 分数 55.10,平均加速比 **0.132**(访存受限的扫描) | 用例 | 形状(dtype,dim) | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---|---| | 1 | [1024,1024] f16 −1 | 0.048 | 227.0 | 10.9 | ok | | 2 | [2048,2048] f32 −1 | 0.188 | 464.2 | 87.4 | ok | | 3 | [4096,4096] bf16 −1 | 0.308 | 1088.6 | 335.5 | ok | | 4 | [8192,8192] i32 −1 | 0.326 | 4461.5 | 1454.0 | ok | | 5 | [16384,16384] f16 0 | 0.172 | 18178.5 | 3131.8 | ok | | 6 | [8192,8192] f32 1 | 0.306 | 4754.7 | 1454.0 | ok | | 7 | [1023,1023] bf16 −1 | 0.067 | 259.4 | 17.4 | ok | | 8 | [1009,1021] f16 0 | 0.038 | 278.9 | 10.7 | ok | | 9 | [1537,769] f32 −1 | 0.097 | 253.3 | 24.6 | ok | | 10 | [363,367,373] bf16 1 | 0.278 | 2680.0 | 745.4 | ok | | 11 | [2049,513] f16 −1 | 0.058 | 189.3 | 10.9 | ok | | 12 | [3,7,13,4001] f32 −1 | 0.035 | 654.1 | 22.8 | ok | | 13 | [1000003] bf16 −1 | 0.001 | 24235.7 | 33.3 | ok | | 14 | [11,13,17,67,67] f16 2 | 0.009 | 12046.3 | 113.7 | ok | | 15 | [3,7,11,13,1013] i32 −1 | 0.170 | 373.6 | 63.4 | ok | | 16 | [512,2049] f32 −1 | 0.057 | 383.5 | 21.9 | ok | | 17 | [255,8193] bf16 0 | 0.119 | 234.8 | 27.9 | ok | | 18 | [4097,511] f16 −1 | 0.099 | 220.3 | 21.8 | ok | | 19 | [2,511,2049] f32 1 | 0.154 | 283.9 | 43.6 | ok | | 20 | [4,255,2049] bf16 −1 | 0.100 | 420.0 | 41.8 | ok | 最差:用例 13(单条 1M 通道的一维扫描,仅一个核,0.001)与用例 14(nan/精确标量路径,0.009)。中等 1M 用例(1/7/8/11/12/16)延迟受限,处于 0.03–0.07。 ### 1c. Transpose — 分数 65.16,平均加速比 **0.537** | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 0.021 | 507.5 | 10.9 | ok | | 2 | 1.122 | 35.9 | 40.3 | ok | | 3 | 0.876 | 80.7 | 70.6 | ok | | 4 | 0.528 | 1051.0 | 555.0 | ok | | 5 | 0.062 | 13211.9 | 814.9 | ok | | 6 | 0.099 | 124.2 | 12.3 | ok | | 7 | 0.573 | 19.0 | 10.9 | ok | | 8 | 0.706 | 30.5 | 21.5 | ok | | 9 | 0.625 | 19.7 | 12.3 | ok | | 10 | 1.008 | 646.2 | 651.3 | ok | | 11 | 0.555 | 19.6 | 10.9 | ok | | 12 | 0.672 | 33.9 | 22.8 | ok | | 13 | 0.601 | 16.6 | 10.0 | ok | | 14 | 0.852 | 24.4 | 20.8 | ok | | 15 | 0.428 | 265.9 | 113.7 | ok | | 16 | 0.067 | 1403.6 | 94.6 | ok | | 17 | 0.922 | 23.7 | 21.9 | ok | | 18 | 0.877 | 24.9 | 21.8 | ok | | 19 | 0.014 | 797.3 | 10.9 | ok | | 20 | 0.138 | 158.0 | 21.8 | ok | 多数用例处于参考的 0.5–1.1×。较慢:用例 1、19(0.02,int64/大规模全交换),用例 5(0.06,268 MB int64),用例 16(0.07),用例 6(0.10,A 维极小),用例 20(0.14)。 ## 2. CANN-bench Ascend C 18 个算子逐算子最佳加速比(仅标准 20 用例评测) 按分数从低到高排序。 avg_speedup = 相对官方参考的逐用例加速比均值。 | # | 算子 | 最佳分数 | avg_speedup(vs 参考) | vs_hw | 通过 | |---|---|---|---|---|---| | 1 | WeightQuantBatchMatmul | 33.06 | 0.091 | 0.017 | 9/20 | | 2 | Conv3DBackpropFilter | 36.21 | 0.007 | 0.001 | 14/20 | | 3 | GroupedMatmul | 43.70 | 0.101 | 0.012 | 14/20 | | 4 | DepthwiseConv2D | 48.70 | 0.053 | 0.001 | 18/20 | | 5 | ApplyRotaryPosEmb | 50.06 | 0.090 | 0.010 | 18/20 | | 6 | GQA | 51.84 | 0.048 | 0.009 | 20/20 | | 7 | MLA | 51.88 | 0.049 | 0.005 | 20/20 | | 8 | MHA | 52.20 | 0.062 | 0.014 | 20/20 | | 9 | GroupedMatmulSwigluQuant | 53.48 | 0.088 | 0.011 | 20/20 | | 10 | Gather | 54.35 | 0.212 | 0.007 | 20/20 | | 11 | Cummin | 55.12 | 0.132 | 0.008 | 20/20 | | 12 | QuantMatmul | 56.06 | 0.218 | 0.074 | 20/20 | | 13 | AddRmsNormDynamicQuant | 56.88 | 0.254 | 0.042 | 19/20 | | 14 | TopK | 57.40 | 0.211 | 0.012 | 20/20 | | 15 | Transpose | 65.16 | 0.537 | 0.039 | 20/20 | | 16 | DequantSwigluQuant | 65.84 | 0.559 | 0.082 | 20/20 | | 17 | Softmax | 67.51 | 1.428 | 0.096 | 19/20 | | 18 | ForeachAddcdivScalar | 84.13 | 1.693 | 0.534 | 20/20 | **分数 = 0.2·编译 + 0.3·功能 + 0.5·性能(×100)。** 只要 20/20 全通过,就已拿到 20(编译)+ 30(功能)= **50 分底线**;超过 50 的部分是性能项。因此低分算子分两类失效模式: - **功能受限**(未拿满 30 分底线):WeightQuant(9/20)、Conv3D 与 GroupedMatmul(14/20)、Depthwise 与 ApplyRotary(18/20)、AddRmsNorm 与 Softmax(19/20)。 - **性能受限**(全通过但 avg_speedup ≪ 1):注意力/矩阵乘簇(GQA/MLA/MHA/GroupedMatmul,约 0.05–0.10)与 Conv(0.007)。 ### Ascend C算子未来优化计划(持续更新cann-bench提交) **第一步,提升正确性。** 功能分(每算子最高 30 分)的获取成本低于性能优化,应优先补齐未通过用例:WeightQuant 当前仅通过 9/20,主要受限于 int4/int8 反量化的精度与边界值处理;Conv3D 与 GroupedMatmul 各通过 14/20;Depthwise、ApplyRotary、AddRmsNorm、Softmax 仅一至两个用例未过。与此同时需消除 no-NPU-perf 抖动,确保每个用例都执行可被 profiler 采集的 NPU 算子,避免个别用例缺失计时而导致整个算子被反作弊清零。 **第二步,为矩阵乘与注意力类算子实现一个可复用的 cube(Mmad)分块 GEMM 核**(L1→L0A/L0B→Mmad→L0C,配合双缓冲)。这类算子目前运行在标量/向量单元上,加速比仅 0.05–0.22:QuantMatmul 0.218、GroupedMatmul 与 GroupedMatmulSwigluQuant 0.09、MHA/MLA/GQA 0.05–0.06、Conv3D 0.007(采用 im2col+cube)。该核预计需数小时开发,但可同时带动上述多个算子的性能。 **第三步,进一步优化当前最高分算子 Foreach**(84.13,已超过参考实现)。其瓶颈集中于大张量用例(4/5/9/20,加速比接近 1×),可通过增大 TILE、引入三级缓冲改善数据搬运重叠,或将 Div+Muls+Add 融合为 Div+Axpy 两步来提升。由于该算子分值最高,即使 5% 的提升对总分的贡献也高于修复一个 0.05 的落后算子。 **Transpose(0.537)与 Cummin(0.132)已接近 c220 的性能上限,建议置于最后或暂缓。** 二者剩余的低速用例——transpose 的 int8/int64 与 A 维极小场景、cummin 的单核长扫描——均受硬件限制:c220 不具备 MicroAPI/RegTensor,厂商基于寄存器的 Sklansky 前缀扫描与 int8/int64 硬件转置在此均不可用;已实现并验证正确的两级 block-scan 在 910c 上无净收益。 # Triton-Ascend 优化结果 ### KernelBench L1 AutoResearch 批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:27.2h(12 op × 50 轮 max,per-op 240min wall-clock cap,--eval-timeout 600s) 状态:8 done / 4 error;batch.log 输出 done : 8 (median 1.43x, best 6.80x, worst 0.29x) ### 结果总表(精度均全部通过) | Level | Problem ID | 算子名称 | 验收类型 | PyTorch 性能(μs) | triton 性能(μs) | triton 优化后性能(μs) | 加速比(无工作流直接生成triton代码) | 加速比(AutoResearch初始生成) | 加速比(AutoResearch优化后) | 轮数 | 状态 | |---|---|---|---|---:|---:|---:|---:|---:|---:|---:|---| | 1 | 36 | RMSNorm | VECTOR | 30,043.1 | timeout | 12,310.6 | 0.03x | — | **2.44x** | 26/50 | error (240min cap) | | 1 | 42 | Max_Pooling_2D | VECTOR | 38,458.2 | 3,344,552.8 | 1,737,993.3 | — | 0.011x | **0.022x** | 33/50 | error (240min cap) | | 1 | 44 | Average_Pooling_1D | VECTOR | 20,584.3 | timeout | 12,235.3 | — | — | **1.68x** | 30/30 | done | | 1 | 45 | Average_Pooling_2D | VECTOR | 3,515,948.4 | 2,745,268.0 | 54,680.1 | — | 1.28x | **64.30x** | 40/50 | error (240min cap) | | 1 | 49 | Max_reduction_over_a_dimension | VECTOR | 21,639.9 | 16,499.2 | 6,961.1 | 0.49x | 1.31x | **3.11x** | 50/50 | done | | 1 | 51 | Argmax_over_a_dimension | VECTOR | 21,642.5 | 40,132.3 | 28,674.7 | — | 0.54x | **0.75x** | 50/50 | done | | 1 | 89 | cumsum | VECTOR | 75,221.2 | 706,479.1 | 22,177.0 | 0.22x | 0.11x | **3.39x** | 50/50 | done | | 1 | 93 | masked_cumsum | VECTOR | 90,032.7 | 716,425.3 | 18,959.6 | — | 0.13x | **4.75x** | 14/50 | error (API socket drop) | | 1 | 4 | Matrix_vector_multiplication | CUBE | 34,602.9 | 7,055.8 | 5,089.7 | 0.16x | 4.90x | **6.80x** | 50/50 | done | | 1 | 10 | 3D_tensor_matrix_multiplication | CUBE | 643.6 | 2,139.5 | 743.3 | 0.74x | 0.30x | **0.87x** | 50/50 | done | | 1 | 14 | Matmul_for_upper_triangular_matrices | CUBE | 1,800.5 | 6,464.0 | 1,525.3 | 0.25x | 0.28x | **1.18x** | 50/50 | done | | 1 | 15 | Matmul_for_lower_triangular_matrices | CUBE | 1,795.9 | 6,186.5 | 6,161.8 | 0.01x | 0.29x | **0.29x** | 50/50 | done | ### NPUKernelBench AutoResearch 较难算子批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:30.6h(11 个 op × 50 轮 max,per-op 240min wall-clock cap) #### 结果总表 | Level | Problem ID | 算子名称 | 算子类型 | 基线性能(us) | 初始triton性能(us) | 无工作流直接生成(us) | 加速比 (AutoResearch初始生成) | 加速比(AutoResearch优化后) | 精度通过率 | |---|---|---|---|---|---|---|---|---|---| | 1 | 18 | Index | vector | 89.30 | 741.19 | 700.85 | 0.12x | 0.13x | 41/41 | | 1 | 23 | RepeatInterleave | vector | 137.32 | 1969.94 | 584.05 | 0.07x | 0.24x | 75/75 | | 1 | 24 | EmbeddingDenseBackward | vector | 2227.56 | 3007.04 | 2894.63 | 0.74x | 0.77x | 30/30 | | 1 | 26 | AvgPool3d | vector | 242.78 | 1982.52 | 1267.77 | 0.12x | 0.19x | 72/72 | | 1 | 31 | IOU | vector | 656.20 | 410.17 | 363.18 | 1.60x | 1.81x | 30/30 | | 2 | 1 | RotaryMul | vector | 189.67 | 451.12 | 419.51 | 0.42x | 0.45x | 50/50 | | 2 | 5 | MoeInitRouting | vector | 484.86 | 932.58 | 927.20 | 0.52x | 0.52x | 53/53 | | 2 | 9 | TopKTopP | vector | 8905.87 | 8982.35 | 8927.97 | 0.99x | 1.00x | 50/50 | | 2 | 17 | EmbeddingWithInitialLayernormBackward | vector | 2353.81 | 2292.43 | 2282.59 | 1.03x | 1.03x | 57/57 | | 2 | 18 | FusedAddRmsnorm | vector | 485.82 | 369.37 | 201.61 | 1.32x | 2.41x | 50/50 | | 2 | 23 | HyenaFftSizePaddingRfft | vector | 941.73 | 622.61 | 517.08 | 1.51x | 1.82x | 49/49 | ## 字段说明 - **基线性能**:PyTorch F.X(...) ref 在 NPU 上跑出的延迟,单位 μs - **triton 性能**:手写 triton seed kernel 跑出的延迟(AR 优化前),单位 μs - **triton 优化后性能**:AR 50 轮 EDIT 后最佳 kernel 的延迟,单位 μs - **加速比** = 基线 / triton(>1x 表示 triton 快于 ref)的几何平均 - **加速比(性能优化后)** = 基线 / triton优化后 的几何平均 - **精度通过率** = 通过 allclose 的 case 数 / 总 case 数(per-dtype atol+rtol,fp32 2^-13/1e-5、fp16 2^-10/1e-3、bf16 2^-7/1e-2) #### 特性增强 Enhancements #### 代码清理 Cleanup ## 关联的Issue 无。 ## 测试 - 本地检查插件目录结构,确认 plugins-official/autoresearch 下包含安装脚本、应用代码、qui See merge request: cann/cannbot-skills!653 | 11 天前 | |
在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Co-authored-by: xchang1121<changxiangyu1@huawei.com> # message auto-generated for no-merge-commit merge: !653 merge master into master 在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Created-by: xchang1121 Commit-by: xchang1121 Merged-by: cann-robot Description: ## 描述 #### 新特性 New Features - 【autoresearch】新增 AutoResearch 官方插件。AutoResearch 是基于 Claude Code / Open Code,面向算子优化任务的自动化算子优化工作流项目,负责组织参考实现、候选 kernel、正确性校验、性能评测、远程ssh评测机/本地agent分离调度、批量执行和多轮优化状态管理。支持triton-ascend算子的优化。 - 【autoresearch】安装后以独立项目方式运行,保留原有 slash command、hooks、配置文件、批跑脚本和 worker 连接(使得运行agent端和评测机分离,仅通过ssh连接)方式,用户可以直接创建任务并连接本地或远端 worker 进行评测。 - 【autoresearch】内置 baseline 记录、状态机推进、失败信息提取和 CodeChecker 检查能力,便于跟踪多轮优化中的正确性、性能变化和失败原因。 ## CANN-bench Ascend C VEC算子优化结果: ### 1a. ForeachAddcdivScalar — 分数 84.13,平均加速比 **1.693**(19/20 用例超过参考) | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 1.570 | 23.5 | 36.9 | ok | | 2 | 1.136 | 78.9 | 89.6 | ok | | 3 | 1.243 | 93.1 | 115.8 | ok | | 4 | 1.001 | 890.7 | 892.0 | ok | | 5 | 1.096 | 438.9 | 481.3 | ok | | 6 | 2.480 | 7.5 | 18.7 | ok | | 7 | 2.229 | 11.4 | 25.3 | ok | | 8 | 2.546 | 8.4 | 21.4 | ok | | 9 | 1.163 | 659.9 | 767.6 | ok | | 10 | 2.219 | 10.9 | 24.3 | ok | | 11 | 2.054 | 15.5 | 31.9 | ok | | 12 | 2.120 | 10.8 | 23.0 | ok | | 13 | 1.567 | 51.6 | 80.8 | ok | | 14 | 1.527 | 28.3 | 43.2 | ok | | 15 | 1.590 | 22.6 | 36.0 | ok | | 16 | 1.389 | 51.4 | 71.4 | ok | | 17 | 2.338 | 12.1 | 28.2 | ok | | 18 | 1.374 | 43.6 | 59.9 | ok | | 19 | 2.322 | 12.0 | 28.0 | ok | | 20 | 0.895 | 118.1 | 105.7 | ok | 小张量(6/7/8/10/11/12/17/19)达到参考的 2–2.5×;大张量(4/5/9/20)卡在带宽墙(~1.0×)。仅用例 20 <1。 ### 1b. Cummin — 分数 55.10,平均加速比 **0.132**(访存受限的扫描) | 用例 | 形状(dtype,dim) | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---|---| | 1 | [1024,1024] f16 −1 | 0.048 | 227.0 | 10.9 | ok | | 2 | [2048,2048] f32 −1 | 0.188 | 464.2 | 87.4 | ok | | 3 | [4096,4096] bf16 −1 | 0.308 | 1088.6 | 335.5 | ok | | 4 | [8192,8192] i32 −1 | 0.326 | 4461.5 | 1454.0 | ok | | 5 | [16384,16384] f16 0 | 0.172 | 18178.5 | 3131.8 | ok | | 6 | [8192,8192] f32 1 | 0.306 | 4754.7 | 1454.0 | ok | | 7 | [1023,1023] bf16 −1 | 0.067 | 259.4 | 17.4 | ok | | 8 | [1009,1021] f16 0 | 0.038 | 278.9 | 10.7 | ok | | 9 | [1537,769] f32 −1 | 0.097 | 253.3 | 24.6 | ok | | 10 | [363,367,373] bf16 1 | 0.278 | 2680.0 | 745.4 | ok | | 11 | [2049,513] f16 −1 | 0.058 | 189.3 | 10.9 | ok | | 12 | [3,7,13,4001] f32 −1 | 0.035 | 654.1 | 22.8 | ok | | 13 | [1000003] bf16 −1 | 0.001 | 24235.7 | 33.3 | ok | | 14 | [11,13,17,67,67] f16 2 | 0.009 | 12046.3 | 113.7 | ok | | 15 | [3,7,11,13,1013] i32 −1 | 0.170 | 373.6 | 63.4 | ok | | 16 | [512,2049] f32 −1 | 0.057 | 383.5 | 21.9 | ok | | 17 | [255,8193] bf16 0 | 0.119 | 234.8 | 27.9 | ok | | 18 | [4097,511] f16 −1 | 0.099 | 220.3 | 21.8 | ok | | 19 | [2,511,2049] f32 1 | 0.154 | 283.9 | 43.6 | ok | | 20 | [4,255,2049] bf16 −1 | 0.100 | 420.0 | 41.8 | ok | 最差:用例 13(单条 1M 通道的一维扫描,仅一个核,0.001)与用例 14(nan/精确标量路径,0.009)。中等 1M 用例(1/7/8/11/12/16)延迟受限,处于 0.03–0.07。 ### 1c. Transpose — 分数 65.16,平均加速比 **0.537** | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 0.021 | 507.5 | 10.9 | ok | | 2 | 1.122 | 35.9 | 40.3 | ok | | 3 | 0.876 | 80.7 | 70.6 | ok | | 4 | 0.528 | 1051.0 | 555.0 | ok | | 5 | 0.062 | 13211.9 | 814.9 | ok | | 6 | 0.099 | 124.2 | 12.3 | ok | | 7 | 0.573 | 19.0 | 10.9 | ok | | 8 | 0.706 | 30.5 | 21.5 | ok | | 9 | 0.625 | 19.7 | 12.3 | ok | | 10 | 1.008 | 646.2 | 651.3 | ok | | 11 | 0.555 | 19.6 | 10.9 | ok | | 12 | 0.672 | 33.9 | 22.8 | ok | | 13 | 0.601 | 16.6 | 10.0 | ok | | 14 | 0.852 | 24.4 | 20.8 | ok | | 15 | 0.428 | 265.9 | 113.7 | ok | | 16 | 0.067 | 1403.6 | 94.6 | ok | | 17 | 0.922 | 23.7 | 21.9 | ok | | 18 | 0.877 | 24.9 | 21.8 | ok | | 19 | 0.014 | 797.3 | 10.9 | ok | | 20 | 0.138 | 158.0 | 21.8 | ok | 多数用例处于参考的 0.5–1.1×。较慢:用例 1、19(0.02,int64/大规模全交换),用例 5(0.06,268 MB int64),用例 16(0.07),用例 6(0.10,A 维极小),用例 20(0.14)。 ## 2. CANN-bench Ascend C 18 个算子逐算子最佳加速比(仅标准 20 用例评测) 按分数从低到高排序。 avg_speedup = 相对官方参考的逐用例加速比均值。 | # | 算子 | 最佳分数 | avg_speedup(vs 参考) | vs_hw | 通过 | |---|---|---|---|---|---| | 1 | WeightQuantBatchMatmul | 33.06 | 0.091 | 0.017 | 9/20 | | 2 | Conv3DBackpropFilter | 36.21 | 0.007 | 0.001 | 14/20 | | 3 | GroupedMatmul | 43.70 | 0.101 | 0.012 | 14/20 | | 4 | DepthwiseConv2D | 48.70 | 0.053 | 0.001 | 18/20 | | 5 | ApplyRotaryPosEmb | 50.06 | 0.090 | 0.010 | 18/20 | | 6 | GQA | 51.84 | 0.048 | 0.009 | 20/20 | | 7 | MLA | 51.88 | 0.049 | 0.005 | 20/20 | | 8 | MHA | 52.20 | 0.062 | 0.014 | 20/20 | | 9 | GroupedMatmulSwigluQuant | 53.48 | 0.088 | 0.011 | 20/20 | | 10 | Gather | 54.35 | 0.212 | 0.007 | 20/20 | | 11 | Cummin | 55.12 | 0.132 | 0.008 | 20/20 | | 12 | QuantMatmul | 56.06 | 0.218 | 0.074 | 20/20 | | 13 | AddRmsNormDynamicQuant | 56.88 | 0.254 | 0.042 | 19/20 | | 14 | TopK | 57.40 | 0.211 | 0.012 | 20/20 | | 15 | Transpose | 65.16 | 0.537 | 0.039 | 20/20 | | 16 | DequantSwigluQuant | 65.84 | 0.559 | 0.082 | 20/20 | | 17 | Softmax | 67.51 | 1.428 | 0.096 | 19/20 | | 18 | ForeachAddcdivScalar | 84.13 | 1.693 | 0.534 | 20/20 | **分数 = 0.2·编译 + 0.3·功能 + 0.5·性能(×100)。** 只要 20/20 全通过,就已拿到 20(编译)+ 30(功能)= **50 分底线**;超过 50 的部分是性能项。因此低分算子分两类失效模式: - **功能受限**(未拿满 30 分底线):WeightQuant(9/20)、Conv3D 与 GroupedMatmul(14/20)、Depthwise 与 ApplyRotary(18/20)、AddRmsNorm 与 Softmax(19/20)。 - **性能受限**(全通过但 avg_speedup ≪ 1):注意力/矩阵乘簇(GQA/MLA/MHA/GroupedMatmul,约 0.05–0.10)与 Conv(0.007)。 ### Ascend C算子未来优化计划(持续更新cann-bench提交) **第一步,提升正确性。** 功能分(每算子最高 30 分)的获取成本低于性能优化,应优先补齐未通过用例:WeightQuant 当前仅通过 9/20,主要受限于 int4/int8 反量化的精度与边界值处理;Conv3D 与 GroupedMatmul 各通过 14/20;Depthwise、ApplyRotary、AddRmsNorm、Softmax 仅一至两个用例未过。与此同时需消除 no-NPU-perf 抖动,确保每个用例都执行可被 profiler 采集的 NPU 算子,避免个别用例缺失计时而导致整个算子被反作弊清零。 **第二步,为矩阵乘与注意力类算子实现一个可复用的 cube(Mmad)分块 GEMM 核**(L1→L0A/L0B→Mmad→L0C,配合双缓冲)。这类算子目前运行在标量/向量单元上,加速比仅 0.05–0.22:QuantMatmul 0.218、GroupedMatmul 与 GroupedMatmulSwigluQuant 0.09、MHA/MLA/GQA 0.05–0.06、Conv3D 0.007(采用 im2col+cube)。该核预计需数小时开发,但可同时带动上述多个算子的性能。 **第三步,进一步优化当前最高分算子 Foreach**(84.13,已超过参考实现)。其瓶颈集中于大张量用例(4/5/9/20,加速比接近 1×),可通过增大 TILE、引入三级缓冲改善数据搬运重叠,或将 Div+Muls+Add 融合为 Div+Axpy 两步来提升。由于该算子分值最高,即使 5% 的提升对总分的贡献也高于修复一个 0.05 的落后算子。 **Transpose(0.537)与 Cummin(0.132)已接近 c220 的性能上限,建议置于最后或暂缓。** 二者剩余的低速用例——transpose 的 int8/int64 与 A 维极小场景、cummin 的单核长扫描——均受硬件限制:c220 不具备 MicroAPI/RegTensor,厂商基于寄存器的 Sklansky 前缀扫描与 int8/int64 硬件转置在此均不可用;已实现并验证正确的两级 block-scan 在 910c 上无净收益。 # Triton-Ascend 优化结果 ### KernelBench L1 AutoResearch 批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:27.2h(12 op × 50 轮 max,per-op 240min wall-clock cap,--eval-timeout 600s) 状态:8 done / 4 error;batch.log 输出 done : 8 (median 1.43x, best 6.80x, worst 0.29x) ### 结果总表(精度均全部通过) | Level | Problem ID | 算子名称 | 验收类型 | PyTorch 性能(μs) | triton 性能(μs) | triton 优化后性能(μs) | 加速比(无工作流直接生成triton代码) | 加速比(AutoResearch初始生成) | 加速比(AutoResearch优化后) | 轮数 | 状态 | |---|---|---|---|---:|---:|---:|---:|---:|---:|---:|---| | 1 | 36 | RMSNorm | VECTOR | 30,043.1 | timeout | 12,310.6 | 0.03x | — | **2.44x** | 26/50 | error (240min cap) | | 1 | 42 | Max_Pooling_2D | VECTOR | 38,458.2 | 3,344,552.8 | 1,737,993.3 | — | 0.011x | **0.022x** | 33/50 | error (240min cap) | | 1 | 44 | Average_Pooling_1D | VECTOR | 20,584.3 | timeout | 12,235.3 | — | — | **1.68x** | 30/30 | done | | 1 | 45 | Average_Pooling_2D | VECTOR | 3,515,948.4 | 2,745,268.0 | 54,680.1 | — | 1.28x | **64.30x** | 40/50 | error (240min cap) | | 1 | 49 | Max_reduction_over_a_dimension | VECTOR | 21,639.9 | 16,499.2 | 6,961.1 | 0.49x | 1.31x | **3.11x** | 50/50 | done | | 1 | 51 | Argmax_over_a_dimension | VECTOR | 21,642.5 | 40,132.3 | 28,674.7 | — | 0.54x | **0.75x** | 50/50 | done | | 1 | 89 | cumsum | VECTOR | 75,221.2 | 706,479.1 | 22,177.0 | 0.22x | 0.11x | **3.39x** | 50/50 | done | | 1 | 93 | masked_cumsum | VECTOR | 90,032.7 | 716,425.3 | 18,959.6 | — | 0.13x | **4.75x** | 14/50 | error (API socket drop) | | 1 | 4 | Matrix_vector_multiplication | CUBE | 34,602.9 | 7,055.8 | 5,089.7 | 0.16x | 4.90x | **6.80x** | 50/50 | done | | 1 | 10 | 3D_tensor_matrix_multiplication | CUBE | 643.6 | 2,139.5 | 743.3 | 0.74x | 0.30x | **0.87x** | 50/50 | done | | 1 | 14 | Matmul_for_upper_triangular_matrices | CUBE | 1,800.5 | 6,464.0 | 1,525.3 | 0.25x | 0.28x | **1.18x** | 50/50 | done | | 1 | 15 | Matmul_for_lower_triangular_matrices | CUBE | 1,795.9 | 6,186.5 | 6,161.8 | 0.01x | 0.29x | **0.29x** | 50/50 | done | ### NPUKernelBench AutoResearch 较难算子批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:30.6h(11 个 op × 50 轮 max,per-op 240min wall-clock cap) #### 结果总表 | Level | Problem ID | 算子名称 | 算子类型 | 基线性能(us) | 初始triton性能(us) | 无工作流直接生成(us) | 加速比 (AutoResearch初始生成) | 加速比(AutoResearch优化后) | 精度通过率 | |---|---|---|---|---|---|---|---|---|---| | 1 | 18 | Index | vector | 89.30 | 741.19 | 700.85 | 0.12x | 0.13x | 41/41 | | 1 | 23 | RepeatInterleave | vector | 137.32 | 1969.94 | 584.05 | 0.07x | 0.24x | 75/75 | | 1 | 24 | EmbeddingDenseBackward | vector | 2227.56 | 3007.04 | 2894.63 | 0.74x | 0.77x | 30/30 | | 1 | 26 | AvgPool3d | vector | 242.78 | 1982.52 | 1267.77 | 0.12x | 0.19x | 72/72 | | 1 | 31 | IOU | vector | 656.20 | 410.17 | 363.18 | 1.60x | 1.81x | 30/30 | | 2 | 1 | RotaryMul | vector | 189.67 | 451.12 | 419.51 | 0.42x | 0.45x | 50/50 | | 2 | 5 | MoeInitRouting | vector | 484.86 | 932.58 | 927.20 | 0.52x | 0.52x | 53/53 | | 2 | 9 | TopKTopP | vector | 8905.87 | 8982.35 | 8927.97 | 0.99x | 1.00x | 50/50 | | 2 | 17 | EmbeddingWithInitialLayernormBackward | vector | 2353.81 | 2292.43 | 2282.59 | 1.03x | 1.03x | 57/57 | | 2 | 18 | FusedAddRmsnorm | vector | 485.82 | 369.37 | 201.61 | 1.32x | 2.41x | 50/50 | | 2 | 23 | HyenaFftSizePaddingRfft | vector | 941.73 | 622.61 | 517.08 | 1.51x | 1.82x | 49/49 | ## 字段说明 - **基线性能**:PyTorch F.X(...) ref 在 NPU 上跑出的延迟,单位 μs - **triton 性能**:手写 triton seed kernel 跑出的延迟(AR 优化前),单位 μs - **triton 优化后性能**:AR 50 轮 EDIT 后最佳 kernel 的延迟,单位 μs - **加速比** = 基线 / triton(>1x 表示 triton 快于 ref)的几何平均 - **加速比(性能优化后)** = 基线 / triton优化后 的几何平均 - **精度通过率** = 通过 allclose 的 case 数 / 总 case 数(per-dtype atol+rtol,fp32 2^-13/1e-5、fp16 2^-10/1e-3、bf16 2^-7/1e-2) #### 特性增强 Enhancements #### 代码清理 Cleanup ## 关联的Issue 无。 ## 测试 - 本地检查插件目录结构,确认 plugins-official/autoresearch 下包含安装脚本、应用代码、qui See merge request: cann/cannbot-skills!653 | 11 天前 | |
在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Co-authored-by: xchang1121<changxiangyu1@huawei.com> # message auto-generated for no-merge-commit merge: !653 merge master into master 在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Created-by: xchang1121 Commit-by: xchang1121 Merged-by: cann-robot Description: ## 描述 #### 新特性 New Features - 【autoresearch】新增 AutoResearch 官方插件。AutoResearch 是基于 Claude Code / Open Code,面向算子优化任务的自动化算子优化工作流项目,负责组织参考实现、候选 kernel、正确性校验、性能评测、远程ssh评测机/本地agent分离调度、批量执行和多轮优化状态管理。支持triton-ascend算子的优化。 - 【autoresearch】安装后以独立项目方式运行,保留原有 slash command、hooks、配置文件、批跑脚本和 worker 连接(使得运行agent端和评测机分离,仅通过ssh连接)方式,用户可以直接创建任务并连接本地或远端 worker 进行评测。 - 【autoresearch】内置 baseline 记录、状态机推进、失败信息提取和 CodeChecker 检查能力,便于跟踪多轮优化中的正确性、性能变化和失败原因。 ## CANN-bench Ascend C VEC算子优化结果: ### 1a. ForeachAddcdivScalar — 分数 84.13,平均加速比 **1.693**(19/20 用例超过参考) | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 1.570 | 23.5 | 36.9 | ok | | 2 | 1.136 | 78.9 | 89.6 | ok | | 3 | 1.243 | 93.1 | 115.8 | ok | | 4 | 1.001 | 890.7 | 892.0 | ok | | 5 | 1.096 | 438.9 | 481.3 | ok | | 6 | 2.480 | 7.5 | 18.7 | ok | | 7 | 2.229 | 11.4 | 25.3 | ok | | 8 | 2.546 | 8.4 | 21.4 | ok | | 9 | 1.163 | 659.9 | 767.6 | ok | | 10 | 2.219 | 10.9 | 24.3 | ok | | 11 | 2.054 | 15.5 | 31.9 | ok | | 12 | 2.120 | 10.8 | 23.0 | ok | | 13 | 1.567 | 51.6 | 80.8 | ok | | 14 | 1.527 | 28.3 | 43.2 | ok | | 15 | 1.590 | 22.6 | 36.0 | ok | | 16 | 1.389 | 51.4 | 71.4 | ok | | 17 | 2.338 | 12.1 | 28.2 | ok | | 18 | 1.374 | 43.6 | 59.9 | ok | | 19 | 2.322 | 12.0 | 28.0 | ok | | 20 | 0.895 | 118.1 | 105.7 | ok | 小张量(6/7/8/10/11/12/17/19)达到参考的 2–2.5×;大张量(4/5/9/20)卡在带宽墙(~1.0×)。仅用例 20 <1。 ### 1b. Cummin — 分数 55.10,平均加速比 **0.132**(访存受限的扫描) | 用例 | 形状(dtype,dim) | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---|---| | 1 | [1024,1024] f16 −1 | 0.048 | 227.0 | 10.9 | ok | | 2 | [2048,2048] f32 −1 | 0.188 | 464.2 | 87.4 | ok | | 3 | [4096,4096] bf16 −1 | 0.308 | 1088.6 | 335.5 | ok | | 4 | [8192,8192] i32 −1 | 0.326 | 4461.5 | 1454.0 | ok | | 5 | [16384,16384] f16 0 | 0.172 | 18178.5 | 3131.8 | ok | | 6 | [8192,8192] f32 1 | 0.306 | 4754.7 | 1454.0 | ok | | 7 | [1023,1023] bf16 −1 | 0.067 | 259.4 | 17.4 | ok | | 8 | [1009,1021] f16 0 | 0.038 | 278.9 | 10.7 | ok | | 9 | [1537,769] f32 −1 | 0.097 | 253.3 | 24.6 | ok | | 10 | [363,367,373] bf16 1 | 0.278 | 2680.0 | 745.4 | ok | | 11 | [2049,513] f16 −1 | 0.058 | 189.3 | 10.9 | ok | | 12 | [3,7,13,4001] f32 −1 | 0.035 | 654.1 | 22.8 | ok | | 13 | [1000003] bf16 −1 | 0.001 | 24235.7 | 33.3 | ok | | 14 | [11,13,17,67,67] f16 2 | 0.009 | 12046.3 | 113.7 | ok | | 15 | [3,7,11,13,1013] i32 −1 | 0.170 | 373.6 | 63.4 | ok | | 16 | [512,2049] f32 −1 | 0.057 | 383.5 | 21.9 | ok | | 17 | [255,8193] bf16 0 | 0.119 | 234.8 | 27.9 | ok | | 18 | [4097,511] f16 −1 | 0.099 | 220.3 | 21.8 | ok | | 19 | [2,511,2049] f32 1 | 0.154 | 283.9 | 43.6 | ok | | 20 | [4,255,2049] bf16 −1 | 0.100 | 420.0 | 41.8 | ok | 最差:用例 13(单条 1M 通道的一维扫描,仅一个核,0.001)与用例 14(nan/精确标量路径,0.009)。中等 1M 用例(1/7/8/11/12/16)延迟受限,处于 0.03–0.07。 ### 1c. Transpose — 分数 65.16,平均加速比 **0.537** | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 0.021 | 507.5 | 10.9 | ok | | 2 | 1.122 | 35.9 | 40.3 | ok | | 3 | 0.876 | 80.7 | 70.6 | ok | | 4 | 0.528 | 1051.0 | 555.0 | ok | | 5 | 0.062 | 13211.9 | 814.9 | ok | | 6 | 0.099 | 124.2 | 12.3 | ok | | 7 | 0.573 | 19.0 | 10.9 | ok | | 8 | 0.706 | 30.5 | 21.5 | ok | | 9 | 0.625 | 19.7 | 12.3 | ok | | 10 | 1.008 | 646.2 | 651.3 | ok | | 11 | 0.555 | 19.6 | 10.9 | ok | | 12 | 0.672 | 33.9 | 22.8 | ok | | 13 | 0.601 | 16.6 | 10.0 | ok | | 14 | 0.852 | 24.4 | 20.8 | ok | | 15 | 0.428 | 265.9 | 113.7 | ok | | 16 | 0.067 | 1403.6 | 94.6 | ok | | 17 | 0.922 | 23.7 | 21.9 | ok | | 18 | 0.877 | 24.9 | 21.8 | ok | | 19 | 0.014 | 797.3 | 10.9 | ok | | 20 | 0.138 | 158.0 | 21.8 | ok | 多数用例处于参考的 0.5–1.1×。较慢:用例 1、19(0.02,int64/大规模全交换),用例 5(0.06,268 MB int64),用例 16(0.07),用例 6(0.10,A 维极小),用例 20(0.14)。 ## 2. CANN-bench Ascend C 18 个算子逐算子最佳加速比(仅标准 20 用例评测) 按分数从低到高排序。 avg_speedup = 相对官方参考的逐用例加速比均值。 | # | 算子 | 最佳分数 | avg_speedup(vs 参考) | vs_hw | 通过 | |---|---|---|---|---|---| | 1 | WeightQuantBatchMatmul | 33.06 | 0.091 | 0.017 | 9/20 | | 2 | Conv3DBackpropFilter | 36.21 | 0.007 | 0.001 | 14/20 | | 3 | GroupedMatmul | 43.70 | 0.101 | 0.012 | 14/20 | | 4 | DepthwiseConv2D | 48.70 | 0.053 | 0.001 | 18/20 | | 5 | ApplyRotaryPosEmb | 50.06 | 0.090 | 0.010 | 18/20 | | 6 | GQA | 51.84 | 0.048 | 0.009 | 20/20 | | 7 | MLA | 51.88 | 0.049 | 0.005 | 20/20 | | 8 | MHA | 52.20 | 0.062 | 0.014 | 20/20 | | 9 | GroupedMatmulSwigluQuant | 53.48 | 0.088 | 0.011 | 20/20 | | 10 | Gather | 54.35 | 0.212 | 0.007 | 20/20 | | 11 | Cummin | 55.12 | 0.132 | 0.008 | 20/20 | | 12 | QuantMatmul | 56.06 | 0.218 | 0.074 | 20/20 | | 13 | AddRmsNormDynamicQuant | 56.88 | 0.254 | 0.042 | 19/20 | | 14 | TopK | 57.40 | 0.211 | 0.012 | 20/20 | | 15 | Transpose | 65.16 | 0.537 | 0.039 | 20/20 | | 16 | DequantSwigluQuant | 65.84 | 0.559 | 0.082 | 20/20 | | 17 | Softmax | 67.51 | 1.428 | 0.096 | 19/20 | | 18 | ForeachAddcdivScalar | 84.13 | 1.693 | 0.534 | 20/20 | **分数 = 0.2·编译 + 0.3·功能 + 0.5·性能(×100)。** 只要 20/20 全通过,就已拿到 20(编译)+ 30(功能)= **50 分底线**;超过 50 的部分是性能项。因此低分算子分两类失效模式: - **功能受限**(未拿满 30 分底线):WeightQuant(9/20)、Conv3D 与 GroupedMatmul(14/20)、Depthwise 与 ApplyRotary(18/20)、AddRmsNorm 与 Softmax(19/20)。 - **性能受限**(全通过但 avg_speedup ≪ 1):注意力/矩阵乘簇(GQA/MLA/MHA/GroupedMatmul,约 0.05–0.10)与 Conv(0.007)。 ### Ascend C算子未来优化计划(持续更新cann-bench提交) **第一步,提升正确性。** 功能分(每算子最高 30 分)的获取成本低于性能优化,应优先补齐未通过用例:WeightQuant 当前仅通过 9/20,主要受限于 int4/int8 反量化的精度与边界值处理;Conv3D 与 GroupedMatmul 各通过 14/20;Depthwise、ApplyRotary、AddRmsNorm、Softmax 仅一至两个用例未过。与此同时需消除 no-NPU-perf 抖动,确保每个用例都执行可被 profiler 采集的 NPU 算子,避免个别用例缺失计时而导致整个算子被反作弊清零。 **第二步,为矩阵乘与注意力类算子实现一个可复用的 cube(Mmad)分块 GEMM 核**(L1→L0A/L0B→Mmad→L0C,配合双缓冲)。这类算子目前运行在标量/向量单元上,加速比仅 0.05–0.22:QuantMatmul 0.218、GroupedMatmul 与 GroupedMatmulSwigluQuant 0.09、MHA/MLA/GQA 0.05–0.06、Conv3D 0.007(采用 im2col+cube)。该核预计需数小时开发,但可同时带动上述多个算子的性能。 **第三步,进一步优化当前最高分算子 Foreach**(84.13,已超过参考实现)。其瓶颈集中于大张量用例(4/5/9/20,加速比接近 1×),可通过增大 TILE、引入三级缓冲改善数据搬运重叠,或将 Div+Muls+Add 融合为 Div+Axpy 两步来提升。由于该算子分值最高,即使 5% 的提升对总分的贡献也高于修复一个 0.05 的落后算子。 **Transpose(0.537)与 Cummin(0.132)已接近 c220 的性能上限,建议置于最后或暂缓。** 二者剩余的低速用例——transpose 的 int8/int64 与 A 维极小场景、cummin 的单核长扫描——均受硬件限制:c220 不具备 MicroAPI/RegTensor,厂商基于寄存器的 Sklansky 前缀扫描与 int8/int64 硬件转置在此均不可用;已实现并验证正确的两级 block-scan 在 910c 上无净收益。 # Triton-Ascend 优化结果 ### KernelBench L1 AutoResearch 批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:27.2h(12 op × 50 轮 max,per-op 240min wall-clock cap,--eval-timeout 600s) 状态:8 done / 4 error;batch.log 输出 done : 8 (median 1.43x, best 6.80x, worst 0.29x) ### 结果总表(精度均全部通过) | Level | Problem ID | 算子名称 | 验收类型 | PyTorch 性能(μs) | triton 性能(μs) | triton 优化后性能(μs) | 加速比(无工作流直接生成triton代码) | 加速比(AutoResearch初始生成) | 加速比(AutoResearch优化后) | 轮数 | 状态 | |---|---|---|---|---:|---:|---:|---:|---:|---:|---:|---| | 1 | 36 | RMSNorm | VECTOR | 30,043.1 | timeout | 12,310.6 | 0.03x | — | **2.44x** | 26/50 | error (240min cap) | | 1 | 42 | Max_Pooling_2D | VECTOR | 38,458.2 | 3,344,552.8 | 1,737,993.3 | — | 0.011x | **0.022x** | 33/50 | error (240min cap) | | 1 | 44 | Average_Pooling_1D | VECTOR | 20,584.3 | timeout | 12,235.3 | — | — | **1.68x** | 30/30 | done | | 1 | 45 | Average_Pooling_2D | VECTOR | 3,515,948.4 | 2,745,268.0 | 54,680.1 | — | 1.28x | **64.30x** | 40/50 | error (240min cap) | | 1 | 49 | Max_reduction_over_a_dimension | VECTOR | 21,639.9 | 16,499.2 | 6,961.1 | 0.49x | 1.31x | **3.11x** | 50/50 | done | | 1 | 51 | Argmax_over_a_dimension | VECTOR | 21,642.5 | 40,132.3 | 28,674.7 | — | 0.54x | **0.75x** | 50/50 | done | | 1 | 89 | cumsum | VECTOR | 75,221.2 | 706,479.1 | 22,177.0 | 0.22x | 0.11x | **3.39x** | 50/50 | done | | 1 | 93 | masked_cumsum | VECTOR | 90,032.7 | 716,425.3 | 18,959.6 | — | 0.13x | **4.75x** | 14/50 | error (API socket drop) | | 1 | 4 | Matrix_vector_multiplication | CUBE | 34,602.9 | 7,055.8 | 5,089.7 | 0.16x | 4.90x | **6.80x** | 50/50 | done | | 1 | 10 | 3D_tensor_matrix_multiplication | CUBE | 643.6 | 2,139.5 | 743.3 | 0.74x | 0.30x | **0.87x** | 50/50 | done | | 1 | 14 | Matmul_for_upper_triangular_matrices | CUBE | 1,800.5 | 6,464.0 | 1,525.3 | 0.25x | 0.28x | **1.18x** | 50/50 | done | | 1 | 15 | Matmul_for_lower_triangular_matrices | CUBE | 1,795.9 | 6,186.5 | 6,161.8 | 0.01x | 0.29x | **0.29x** | 50/50 | done | ### NPUKernelBench AutoResearch 较难算子批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:30.6h(11 个 op × 50 轮 max,per-op 240min wall-clock cap) #### 结果总表 | Level | Problem ID | 算子名称 | 算子类型 | 基线性能(us) | 初始triton性能(us) | 无工作流直接生成(us) | 加速比 (AutoResearch初始生成) | 加速比(AutoResearch优化后) | 精度通过率 | |---|---|---|---|---|---|---|---|---|---| | 1 | 18 | Index | vector | 89.30 | 741.19 | 700.85 | 0.12x | 0.13x | 41/41 | | 1 | 23 | RepeatInterleave | vector | 137.32 | 1969.94 | 584.05 | 0.07x | 0.24x | 75/75 | | 1 | 24 | EmbeddingDenseBackward | vector | 2227.56 | 3007.04 | 2894.63 | 0.74x | 0.77x | 30/30 | | 1 | 26 | AvgPool3d | vector | 242.78 | 1982.52 | 1267.77 | 0.12x | 0.19x | 72/72 | | 1 | 31 | IOU | vector | 656.20 | 410.17 | 363.18 | 1.60x | 1.81x | 30/30 | | 2 | 1 | RotaryMul | vector | 189.67 | 451.12 | 419.51 | 0.42x | 0.45x | 50/50 | | 2 | 5 | MoeInitRouting | vector | 484.86 | 932.58 | 927.20 | 0.52x | 0.52x | 53/53 | | 2 | 9 | TopKTopP | vector | 8905.87 | 8982.35 | 8927.97 | 0.99x | 1.00x | 50/50 | | 2 | 17 | EmbeddingWithInitialLayernormBackward | vector | 2353.81 | 2292.43 | 2282.59 | 1.03x | 1.03x | 57/57 | | 2 | 18 | FusedAddRmsnorm | vector | 485.82 | 369.37 | 201.61 | 1.32x | 2.41x | 50/50 | | 2 | 23 | HyenaFftSizePaddingRfft | vector | 941.73 | 622.61 | 517.08 | 1.51x | 1.82x | 49/49 | ## 字段说明 - **基线性能**:PyTorch F.X(...) ref 在 NPU 上跑出的延迟,单位 μs - **triton 性能**:手写 triton seed kernel 跑出的延迟(AR 优化前),单位 μs - **triton 优化后性能**:AR 50 轮 EDIT 后最佳 kernel 的延迟,单位 μs - **加速比** = 基线 / triton(>1x 表示 triton 快于 ref)的几何平均 - **加速比(性能优化后)** = 基线 / triton优化后 的几何平均 - **精度通过率** = 通过 allclose 的 case 数 / 总 case 数(per-dtype atol+rtol,fp32 2^-13/1e-5、fp16 2^-10/1e-3、bf16 2^-7/1e-2) #### 特性增强 Enhancements #### 代码清理 Cleanup ## 关联的Issue 无。 ## 测试 - 本地检查插件目录结构,确认 plugins-official/autoresearch 下包含安装脚本、应用代码、qui See merge request: cann/cannbot-skills!653 | 11 天前 | |
在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Co-authored-by: xchang1121<changxiangyu1@huawei.com> # message auto-generated for no-merge-commit merge: !653 merge master into master 在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Created-by: xchang1121 Commit-by: xchang1121 Merged-by: cann-robot Description: ## 描述 #### 新特性 New Features - 【autoresearch】新增 AutoResearch 官方插件。AutoResearch 是基于 Claude Code / Open Code,面向算子优化任务的自动化算子优化工作流项目,负责组织参考实现、候选 kernel、正确性校验、性能评测、远程ssh评测机/本地agent分离调度、批量执行和多轮优化状态管理。支持triton-ascend算子的优化。 - 【autoresearch】安装后以独立项目方式运行,保留原有 slash command、hooks、配置文件、批跑脚本和 worker 连接(使得运行agent端和评测机分离,仅通过ssh连接)方式,用户可以直接创建任务并连接本地或远端 worker 进行评测。 - 【autoresearch】内置 baseline 记录、状态机推进、失败信息提取和 CodeChecker 检查能力,便于跟踪多轮优化中的正确性、性能变化和失败原因。 ## CANN-bench Ascend C VEC算子优化结果: ### 1a. ForeachAddcdivScalar — 分数 84.13,平均加速比 **1.693**(19/20 用例超过参考) | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 1.570 | 23.5 | 36.9 | ok | | 2 | 1.136 | 78.9 | 89.6 | ok | | 3 | 1.243 | 93.1 | 115.8 | ok | | 4 | 1.001 | 890.7 | 892.0 | ok | | 5 | 1.096 | 438.9 | 481.3 | ok | | 6 | 2.480 | 7.5 | 18.7 | ok | | 7 | 2.229 | 11.4 | 25.3 | ok | | 8 | 2.546 | 8.4 | 21.4 | ok | | 9 | 1.163 | 659.9 | 767.6 | ok | | 10 | 2.219 | 10.9 | 24.3 | ok | | 11 | 2.054 | 15.5 | 31.9 | ok | | 12 | 2.120 | 10.8 | 23.0 | ok | | 13 | 1.567 | 51.6 | 80.8 | ok | | 14 | 1.527 | 28.3 | 43.2 | ok | | 15 | 1.590 | 22.6 | 36.0 | ok | | 16 | 1.389 | 51.4 | 71.4 | ok | | 17 | 2.338 | 12.1 | 28.2 | ok | | 18 | 1.374 | 43.6 | 59.9 | ok | | 19 | 2.322 | 12.0 | 28.0 | ok | | 20 | 0.895 | 118.1 | 105.7 | ok | 小张量(6/7/8/10/11/12/17/19)达到参考的 2–2.5×;大张量(4/5/9/20)卡在带宽墙(~1.0×)。仅用例 20 <1。 ### 1b. Cummin — 分数 55.10,平均加速比 **0.132**(访存受限的扫描) | 用例 | 形状(dtype,dim) | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---|---| | 1 | [1024,1024] f16 −1 | 0.048 | 227.0 | 10.9 | ok | | 2 | [2048,2048] f32 −1 | 0.188 | 464.2 | 87.4 | ok | | 3 | [4096,4096] bf16 −1 | 0.308 | 1088.6 | 335.5 | ok | | 4 | [8192,8192] i32 −1 | 0.326 | 4461.5 | 1454.0 | ok | | 5 | [16384,16384] f16 0 | 0.172 | 18178.5 | 3131.8 | ok | | 6 | [8192,8192] f32 1 | 0.306 | 4754.7 | 1454.0 | ok | | 7 | [1023,1023] bf16 −1 | 0.067 | 259.4 | 17.4 | ok | | 8 | [1009,1021] f16 0 | 0.038 | 278.9 | 10.7 | ok | | 9 | [1537,769] f32 −1 | 0.097 | 253.3 | 24.6 | ok | | 10 | [363,367,373] bf16 1 | 0.278 | 2680.0 | 745.4 | ok | | 11 | [2049,513] f16 −1 | 0.058 | 189.3 | 10.9 | ok | | 12 | [3,7,13,4001] f32 −1 | 0.035 | 654.1 | 22.8 | ok | | 13 | [1000003] bf16 −1 | 0.001 | 24235.7 | 33.3 | ok | | 14 | [11,13,17,67,67] f16 2 | 0.009 | 12046.3 | 113.7 | ok | | 15 | [3,7,11,13,1013] i32 −1 | 0.170 | 373.6 | 63.4 | ok | | 16 | [512,2049] f32 −1 | 0.057 | 383.5 | 21.9 | ok | | 17 | [255,8193] bf16 0 | 0.119 | 234.8 | 27.9 | ok | | 18 | [4097,511] f16 −1 | 0.099 | 220.3 | 21.8 | ok | | 19 | [2,511,2049] f32 1 | 0.154 | 283.9 | 43.6 | ok | | 20 | [4,255,2049] bf16 −1 | 0.100 | 420.0 | 41.8 | ok | 最差:用例 13(单条 1M 通道的一维扫描,仅一个核,0.001)与用例 14(nan/精确标量路径,0.009)。中等 1M 用例(1/7/8/11/12/16)延迟受限,处于 0.03–0.07。 ### 1c. Transpose — 分数 65.16,平均加速比 **0.537** | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 0.021 | 507.5 | 10.9 | ok | | 2 | 1.122 | 35.9 | 40.3 | ok | | 3 | 0.876 | 80.7 | 70.6 | ok | | 4 | 0.528 | 1051.0 | 555.0 | ok | | 5 | 0.062 | 13211.9 | 814.9 | ok | | 6 | 0.099 | 124.2 | 12.3 | ok | | 7 | 0.573 | 19.0 | 10.9 | ok | | 8 | 0.706 | 30.5 | 21.5 | ok | | 9 | 0.625 | 19.7 | 12.3 | ok | | 10 | 1.008 | 646.2 | 651.3 | ok | | 11 | 0.555 | 19.6 | 10.9 | ok | | 12 | 0.672 | 33.9 | 22.8 | ok | | 13 | 0.601 | 16.6 | 10.0 | ok | | 14 | 0.852 | 24.4 | 20.8 | ok | | 15 | 0.428 | 265.9 | 113.7 | ok | | 16 | 0.067 | 1403.6 | 94.6 | ok | | 17 | 0.922 | 23.7 | 21.9 | ok | | 18 | 0.877 | 24.9 | 21.8 | ok | | 19 | 0.014 | 797.3 | 10.9 | ok | | 20 | 0.138 | 158.0 | 21.8 | ok | 多数用例处于参考的 0.5–1.1×。较慢:用例 1、19(0.02,int64/大规模全交换),用例 5(0.06,268 MB int64),用例 16(0.07),用例 6(0.10,A 维极小),用例 20(0.14)。 ## 2. CANN-bench Ascend C 18 个算子逐算子最佳加速比(仅标准 20 用例评测) 按分数从低到高排序。 avg_speedup = 相对官方参考的逐用例加速比均值。 | # | 算子 | 最佳分数 | avg_speedup(vs 参考) | vs_hw | 通过 | |---|---|---|---|---|---| | 1 | WeightQuantBatchMatmul | 33.06 | 0.091 | 0.017 | 9/20 | | 2 | Conv3DBackpropFilter | 36.21 | 0.007 | 0.001 | 14/20 | | 3 | GroupedMatmul | 43.70 | 0.101 | 0.012 | 14/20 | | 4 | DepthwiseConv2D | 48.70 | 0.053 | 0.001 | 18/20 | | 5 | ApplyRotaryPosEmb | 50.06 | 0.090 | 0.010 | 18/20 | | 6 | GQA | 51.84 | 0.048 | 0.009 | 20/20 | | 7 | MLA | 51.88 | 0.049 | 0.005 | 20/20 | | 8 | MHA | 52.20 | 0.062 | 0.014 | 20/20 | | 9 | GroupedMatmulSwigluQuant | 53.48 | 0.088 | 0.011 | 20/20 | | 10 | Gather | 54.35 | 0.212 | 0.007 | 20/20 | | 11 | Cummin | 55.12 | 0.132 | 0.008 | 20/20 | | 12 | QuantMatmul | 56.06 | 0.218 | 0.074 | 20/20 | | 13 | AddRmsNormDynamicQuant | 56.88 | 0.254 | 0.042 | 19/20 | | 14 | TopK | 57.40 | 0.211 | 0.012 | 20/20 | | 15 | Transpose | 65.16 | 0.537 | 0.039 | 20/20 | | 16 | DequantSwigluQuant | 65.84 | 0.559 | 0.082 | 20/20 | | 17 | Softmax | 67.51 | 1.428 | 0.096 | 19/20 | | 18 | ForeachAddcdivScalar | 84.13 | 1.693 | 0.534 | 20/20 | **分数 = 0.2·编译 + 0.3·功能 + 0.5·性能(×100)。** 只要 20/20 全通过,就已拿到 20(编译)+ 30(功能)= **50 分底线**;超过 50 的部分是性能项。因此低分算子分两类失效模式: - **功能受限**(未拿满 30 分底线):WeightQuant(9/20)、Conv3D 与 GroupedMatmul(14/20)、Depthwise 与 ApplyRotary(18/20)、AddRmsNorm 与 Softmax(19/20)。 - **性能受限**(全通过但 avg_speedup ≪ 1):注意力/矩阵乘簇(GQA/MLA/MHA/GroupedMatmul,约 0.05–0.10)与 Conv(0.007)。 ### Ascend C算子未来优化计划(持续更新cann-bench提交) **第一步,提升正确性。** 功能分(每算子最高 30 分)的获取成本低于性能优化,应优先补齐未通过用例:WeightQuant 当前仅通过 9/20,主要受限于 int4/int8 反量化的精度与边界值处理;Conv3D 与 GroupedMatmul 各通过 14/20;Depthwise、ApplyRotary、AddRmsNorm、Softmax 仅一至两个用例未过。与此同时需消除 no-NPU-perf 抖动,确保每个用例都执行可被 profiler 采集的 NPU 算子,避免个别用例缺失计时而导致整个算子被反作弊清零。 **第二步,为矩阵乘与注意力类算子实现一个可复用的 cube(Mmad)分块 GEMM 核**(L1→L0A/L0B→Mmad→L0C,配合双缓冲)。这类算子目前运行在标量/向量单元上,加速比仅 0.05–0.22:QuantMatmul 0.218、GroupedMatmul 与 GroupedMatmulSwigluQuant 0.09、MHA/MLA/GQA 0.05–0.06、Conv3D 0.007(采用 im2col+cube)。该核预计需数小时开发,但可同时带动上述多个算子的性能。 **第三步,进一步优化当前最高分算子 Foreach**(84.13,已超过参考实现)。其瓶颈集中于大张量用例(4/5/9/20,加速比接近 1×),可通过增大 TILE、引入三级缓冲改善数据搬运重叠,或将 Div+Muls+Add 融合为 Div+Axpy 两步来提升。由于该算子分值最高,即使 5% 的提升对总分的贡献也高于修复一个 0.05 的落后算子。 **Transpose(0.537)与 Cummin(0.132)已接近 c220 的性能上限,建议置于最后或暂缓。** 二者剩余的低速用例——transpose 的 int8/int64 与 A 维极小场景、cummin 的单核长扫描——均受硬件限制:c220 不具备 MicroAPI/RegTensor,厂商基于寄存器的 Sklansky 前缀扫描与 int8/int64 硬件转置在此均不可用;已实现并验证正确的两级 block-scan 在 910c 上无净收益。 # Triton-Ascend 优化结果 ### KernelBench L1 AutoResearch 批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:27.2h(12 op × 50 轮 max,per-op 240min wall-clock cap,--eval-timeout 600s) 状态:8 done / 4 error;batch.log 输出 done : 8 (median 1.43x, best 6.80x, worst 0.29x) ### 结果总表(精度均全部通过) | Level | Problem ID | 算子名称 | 验收类型 | PyTorch 性能(μs) | triton 性能(μs) | triton 优化后性能(μs) | 加速比(无工作流直接生成triton代码) | 加速比(AutoResearch初始生成) | 加速比(AutoResearch优化后) | 轮数 | 状态 | |---|---|---|---|---:|---:|---:|---:|---:|---:|---:|---| | 1 | 36 | RMSNorm | VECTOR | 30,043.1 | timeout | 12,310.6 | 0.03x | — | **2.44x** | 26/50 | error (240min cap) | | 1 | 42 | Max_Pooling_2D | VECTOR | 38,458.2 | 3,344,552.8 | 1,737,993.3 | — | 0.011x | **0.022x** | 33/50 | error (240min cap) | | 1 | 44 | Average_Pooling_1D | VECTOR | 20,584.3 | timeout | 12,235.3 | — | — | **1.68x** | 30/30 | done | | 1 | 45 | Average_Pooling_2D | VECTOR | 3,515,948.4 | 2,745,268.0 | 54,680.1 | — | 1.28x | **64.30x** | 40/50 | error (240min cap) | | 1 | 49 | Max_reduction_over_a_dimension | VECTOR | 21,639.9 | 16,499.2 | 6,961.1 | 0.49x | 1.31x | **3.11x** | 50/50 | done | | 1 | 51 | Argmax_over_a_dimension | VECTOR | 21,642.5 | 40,132.3 | 28,674.7 | — | 0.54x | **0.75x** | 50/50 | done | | 1 | 89 | cumsum | VECTOR | 75,221.2 | 706,479.1 | 22,177.0 | 0.22x | 0.11x | **3.39x** | 50/50 | done | | 1 | 93 | masked_cumsum | VECTOR | 90,032.7 | 716,425.3 | 18,959.6 | — | 0.13x | **4.75x** | 14/50 | error (API socket drop) | | 1 | 4 | Matrix_vector_multiplication | CUBE | 34,602.9 | 7,055.8 | 5,089.7 | 0.16x | 4.90x | **6.80x** | 50/50 | done | | 1 | 10 | 3D_tensor_matrix_multiplication | CUBE | 643.6 | 2,139.5 | 743.3 | 0.74x | 0.30x | **0.87x** | 50/50 | done | | 1 | 14 | Matmul_for_upper_triangular_matrices | CUBE | 1,800.5 | 6,464.0 | 1,525.3 | 0.25x | 0.28x | **1.18x** | 50/50 | done | | 1 | 15 | Matmul_for_lower_triangular_matrices | CUBE | 1,795.9 | 6,186.5 | 6,161.8 | 0.01x | 0.29x | **0.29x** | 50/50 | done | ### NPUKernelBench AutoResearch 较难算子批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:30.6h(11 个 op × 50 轮 max,per-op 240min wall-clock cap) #### 结果总表 | Level | Problem ID | 算子名称 | 算子类型 | 基线性能(us) | 初始triton性能(us) | 无工作流直接生成(us) | 加速比 (AutoResearch初始生成) | 加速比(AutoResearch优化后) | 精度通过率 | |---|---|---|---|---|---|---|---|---|---| | 1 | 18 | Index | vector | 89.30 | 741.19 | 700.85 | 0.12x | 0.13x | 41/41 | | 1 | 23 | RepeatInterleave | vector | 137.32 | 1969.94 | 584.05 | 0.07x | 0.24x | 75/75 | | 1 | 24 | EmbeddingDenseBackward | vector | 2227.56 | 3007.04 | 2894.63 | 0.74x | 0.77x | 30/30 | | 1 | 26 | AvgPool3d | vector | 242.78 | 1982.52 | 1267.77 | 0.12x | 0.19x | 72/72 | | 1 | 31 | IOU | vector | 656.20 | 410.17 | 363.18 | 1.60x | 1.81x | 30/30 | | 2 | 1 | RotaryMul | vector | 189.67 | 451.12 | 419.51 | 0.42x | 0.45x | 50/50 | | 2 | 5 | MoeInitRouting | vector | 484.86 | 932.58 | 927.20 | 0.52x | 0.52x | 53/53 | | 2 | 9 | TopKTopP | vector | 8905.87 | 8982.35 | 8927.97 | 0.99x | 1.00x | 50/50 | | 2 | 17 | EmbeddingWithInitialLayernormBackward | vector | 2353.81 | 2292.43 | 2282.59 | 1.03x | 1.03x | 57/57 | | 2 | 18 | FusedAddRmsnorm | vector | 485.82 | 369.37 | 201.61 | 1.32x | 2.41x | 50/50 | | 2 | 23 | HyenaFftSizePaddingRfft | vector | 941.73 | 622.61 | 517.08 | 1.51x | 1.82x | 49/49 | ## 字段说明 - **基线性能**:PyTorch F.X(...) ref 在 NPU 上跑出的延迟,单位 μs - **triton 性能**:手写 triton seed kernel 跑出的延迟(AR 优化前),单位 μs - **triton 优化后性能**:AR 50 轮 EDIT 后最佳 kernel 的延迟,单位 μs - **加速比** = 基线 / triton(>1x 表示 triton 快于 ref)的几何平均 - **加速比(性能优化后)** = 基线 / triton优化后 的几何平均 - **精度通过率** = 通过 allclose 的 case 数 / 总 case 数(per-dtype atol+rtol,fp32 2^-13/1e-5、fp16 2^-10/1e-3、bf16 2^-7/1e-2) #### 特性增强 Enhancements #### 代码清理 Cleanup ## 关联的Issue 无。 ## 测试 - 本地检查插件目录结构,确认 plugins-official/autoresearch 下包含安装脚本、应用代码、qui See merge request: cann/cannbot-skills!653 | 11 天前 | |
在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Co-authored-by: xchang1121<changxiangyu1@huawei.com> # message auto-generated for no-merge-commit merge: !653 merge master into master 在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Created-by: xchang1121 Commit-by: xchang1121 Merged-by: cann-robot Description: ## 描述 #### 新特性 New Features - 【autoresearch】新增 AutoResearch 官方插件。AutoResearch 是基于 Claude Code / Open Code,面向算子优化任务的自动化算子优化工作流项目,负责组织参考实现、候选 kernel、正确性校验、性能评测、远程ssh评测机/本地agent分离调度、批量执行和多轮优化状态管理。支持triton-ascend算子的优化。 - 【autoresearch】安装后以独立项目方式运行,保留原有 slash command、hooks、配置文件、批跑脚本和 worker 连接(使得运行agent端和评测机分离,仅通过ssh连接)方式,用户可以直接创建任务并连接本地或远端 worker 进行评测。 - 【autoresearch】内置 baseline 记录、状态机推进、失败信息提取和 CodeChecker 检查能力,便于跟踪多轮优化中的正确性、性能变化和失败原因。 ## CANN-bench Ascend C VEC算子优化结果: ### 1a. ForeachAddcdivScalar — 分数 84.13,平均加速比 **1.693**(19/20 用例超过参考) | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 1.570 | 23.5 | 36.9 | ok | | 2 | 1.136 | 78.9 | 89.6 | ok | | 3 | 1.243 | 93.1 | 115.8 | ok | | 4 | 1.001 | 890.7 | 892.0 | ok | | 5 | 1.096 | 438.9 | 481.3 | ok | | 6 | 2.480 | 7.5 | 18.7 | ok | | 7 | 2.229 | 11.4 | 25.3 | ok | | 8 | 2.546 | 8.4 | 21.4 | ok | | 9 | 1.163 | 659.9 | 767.6 | ok | | 10 | 2.219 | 10.9 | 24.3 | ok | | 11 | 2.054 | 15.5 | 31.9 | ok | | 12 | 2.120 | 10.8 | 23.0 | ok | | 13 | 1.567 | 51.6 | 80.8 | ok | | 14 | 1.527 | 28.3 | 43.2 | ok | | 15 | 1.590 | 22.6 | 36.0 | ok | | 16 | 1.389 | 51.4 | 71.4 | ok | | 17 | 2.338 | 12.1 | 28.2 | ok | | 18 | 1.374 | 43.6 | 59.9 | ok | | 19 | 2.322 | 12.0 | 28.0 | ok | | 20 | 0.895 | 118.1 | 105.7 | ok | 小张量(6/7/8/10/11/12/17/19)达到参考的 2–2.5×;大张量(4/5/9/20)卡在带宽墙(~1.0×)。仅用例 20 <1。 ### 1b. Cummin — 分数 55.10,平均加速比 **0.132**(访存受限的扫描) | 用例 | 形状(dtype,dim) | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---|---| | 1 | [1024,1024] f16 −1 | 0.048 | 227.0 | 10.9 | ok | | 2 | [2048,2048] f32 −1 | 0.188 | 464.2 | 87.4 | ok | | 3 | [4096,4096] bf16 −1 | 0.308 | 1088.6 | 335.5 | ok | | 4 | [8192,8192] i32 −1 | 0.326 | 4461.5 | 1454.0 | ok | | 5 | [16384,16384] f16 0 | 0.172 | 18178.5 | 3131.8 | ok | | 6 | [8192,8192] f32 1 | 0.306 | 4754.7 | 1454.0 | ok | | 7 | [1023,1023] bf16 −1 | 0.067 | 259.4 | 17.4 | ok | | 8 | [1009,1021] f16 0 | 0.038 | 278.9 | 10.7 | ok | | 9 | [1537,769] f32 −1 | 0.097 | 253.3 | 24.6 | ok | | 10 | [363,367,373] bf16 1 | 0.278 | 2680.0 | 745.4 | ok | | 11 | [2049,513] f16 −1 | 0.058 | 189.3 | 10.9 | ok | | 12 | [3,7,13,4001] f32 −1 | 0.035 | 654.1 | 22.8 | ok | | 13 | [1000003] bf16 −1 | 0.001 | 24235.7 | 33.3 | ok | | 14 | [11,13,17,67,67] f16 2 | 0.009 | 12046.3 | 113.7 | ok | | 15 | [3,7,11,13,1013] i32 −1 | 0.170 | 373.6 | 63.4 | ok | | 16 | [512,2049] f32 −1 | 0.057 | 383.5 | 21.9 | ok | | 17 | [255,8193] bf16 0 | 0.119 | 234.8 | 27.9 | ok | | 18 | [4097,511] f16 −1 | 0.099 | 220.3 | 21.8 | ok | | 19 | [2,511,2049] f32 1 | 0.154 | 283.9 | 43.6 | ok | | 20 | [4,255,2049] bf16 −1 | 0.100 | 420.0 | 41.8 | ok | 最差:用例 13(单条 1M 通道的一维扫描,仅一个核,0.001)与用例 14(nan/精确标量路径,0.009)。中等 1M 用例(1/7/8/11/12/16)延迟受限,处于 0.03–0.07。 ### 1c. Transpose — 分数 65.16,平均加速比 **0.537** | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 0.021 | 507.5 | 10.9 | ok | | 2 | 1.122 | 35.9 | 40.3 | ok | | 3 | 0.876 | 80.7 | 70.6 | ok | | 4 | 0.528 | 1051.0 | 555.0 | ok | | 5 | 0.062 | 13211.9 | 814.9 | ok | | 6 | 0.099 | 124.2 | 12.3 | ok | | 7 | 0.573 | 19.0 | 10.9 | ok | | 8 | 0.706 | 30.5 | 21.5 | ok | | 9 | 0.625 | 19.7 | 12.3 | ok | | 10 | 1.008 | 646.2 | 651.3 | ok | | 11 | 0.555 | 19.6 | 10.9 | ok | | 12 | 0.672 | 33.9 | 22.8 | ok | | 13 | 0.601 | 16.6 | 10.0 | ok | | 14 | 0.852 | 24.4 | 20.8 | ok | | 15 | 0.428 | 265.9 | 113.7 | ok | | 16 | 0.067 | 1403.6 | 94.6 | ok | | 17 | 0.922 | 23.7 | 21.9 | ok | | 18 | 0.877 | 24.9 | 21.8 | ok | | 19 | 0.014 | 797.3 | 10.9 | ok | | 20 | 0.138 | 158.0 | 21.8 | ok | 多数用例处于参考的 0.5–1.1×。较慢:用例 1、19(0.02,int64/大规模全交换),用例 5(0.06,268 MB int64),用例 16(0.07),用例 6(0.10,A 维极小),用例 20(0.14)。 ## 2. CANN-bench Ascend C 18 个算子逐算子最佳加速比(仅标准 20 用例评测) 按分数从低到高排序。 avg_speedup = 相对官方参考的逐用例加速比均值。 | # | 算子 | 最佳分数 | avg_speedup(vs 参考) | vs_hw | 通过 | |---|---|---|---|---|---| | 1 | WeightQuantBatchMatmul | 33.06 | 0.091 | 0.017 | 9/20 | | 2 | Conv3DBackpropFilter | 36.21 | 0.007 | 0.001 | 14/20 | | 3 | GroupedMatmul | 43.70 | 0.101 | 0.012 | 14/20 | | 4 | DepthwiseConv2D | 48.70 | 0.053 | 0.001 | 18/20 | | 5 | ApplyRotaryPosEmb | 50.06 | 0.090 | 0.010 | 18/20 | | 6 | GQA | 51.84 | 0.048 | 0.009 | 20/20 | | 7 | MLA | 51.88 | 0.049 | 0.005 | 20/20 | | 8 | MHA | 52.20 | 0.062 | 0.014 | 20/20 | | 9 | GroupedMatmulSwigluQuant | 53.48 | 0.088 | 0.011 | 20/20 | | 10 | Gather | 54.35 | 0.212 | 0.007 | 20/20 | | 11 | Cummin | 55.12 | 0.132 | 0.008 | 20/20 | | 12 | QuantMatmul | 56.06 | 0.218 | 0.074 | 20/20 | | 13 | AddRmsNormDynamicQuant | 56.88 | 0.254 | 0.042 | 19/20 | | 14 | TopK | 57.40 | 0.211 | 0.012 | 20/20 | | 15 | Transpose | 65.16 | 0.537 | 0.039 | 20/20 | | 16 | DequantSwigluQuant | 65.84 | 0.559 | 0.082 | 20/20 | | 17 | Softmax | 67.51 | 1.428 | 0.096 | 19/20 | | 18 | ForeachAddcdivScalar | 84.13 | 1.693 | 0.534 | 20/20 | **分数 = 0.2·编译 + 0.3·功能 + 0.5·性能(×100)。** 只要 20/20 全通过,就已拿到 20(编译)+ 30(功能)= **50 分底线**;超过 50 的部分是性能项。因此低分算子分两类失效模式: - **功能受限**(未拿满 30 分底线):WeightQuant(9/20)、Conv3D 与 GroupedMatmul(14/20)、Depthwise 与 ApplyRotary(18/20)、AddRmsNorm 与 Softmax(19/20)。 - **性能受限**(全通过但 avg_speedup ≪ 1):注意力/矩阵乘簇(GQA/MLA/MHA/GroupedMatmul,约 0.05–0.10)与 Conv(0.007)。 ### Ascend C算子未来优化计划(持续更新cann-bench提交) **第一步,提升正确性。** 功能分(每算子最高 30 分)的获取成本低于性能优化,应优先补齐未通过用例:WeightQuant 当前仅通过 9/20,主要受限于 int4/int8 反量化的精度与边界值处理;Conv3D 与 GroupedMatmul 各通过 14/20;Depthwise、ApplyRotary、AddRmsNorm、Softmax 仅一至两个用例未过。与此同时需消除 no-NPU-perf 抖动,确保每个用例都执行可被 profiler 采集的 NPU 算子,避免个别用例缺失计时而导致整个算子被反作弊清零。 **第二步,为矩阵乘与注意力类算子实现一个可复用的 cube(Mmad)分块 GEMM 核**(L1→L0A/L0B→Mmad→L0C,配合双缓冲)。这类算子目前运行在标量/向量单元上,加速比仅 0.05–0.22:QuantMatmul 0.218、GroupedMatmul 与 GroupedMatmulSwigluQuant 0.09、MHA/MLA/GQA 0.05–0.06、Conv3D 0.007(采用 im2col+cube)。该核预计需数小时开发,但可同时带动上述多个算子的性能。 **第三步,进一步优化当前最高分算子 Foreach**(84.13,已超过参考实现)。其瓶颈集中于大张量用例(4/5/9/20,加速比接近 1×),可通过增大 TILE、引入三级缓冲改善数据搬运重叠,或将 Div+Muls+Add 融合为 Div+Axpy 两步来提升。由于该算子分值最高,即使 5% 的提升对总分的贡献也高于修复一个 0.05 的落后算子。 **Transpose(0.537)与 Cummin(0.132)已接近 c220 的性能上限,建议置于最后或暂缓。** 二者剩余的低速用例——transpose 的 int8/int64 与 A 维极小场景、cummin 的单核长扫描——均受硬件限制:c220 不具备 MicroAPI/RegTensor,厂商基于寄存器的 Sklansky 前缀扫描与 int8/int64 硬件转置在此均不可用;已实现并验证正确的两级 block-scan 在 910c 上无净收益。 # Triton-Ascend 优化结果 ### KernelBench L1 AutoResearch 批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:27.2h(12 op × 50 轮 max,per-op 240min wall-clock cap,--eval-timeout 600s) 状态:8 done / 4 error;batch.log 输出 done : 8 (median 1.43x, best 6.80x, worst 0.29x) ### 结果总表(精度均全部通过) | Level | Problem ID | 算子名称 | 验收类型 | PyTorch 性能(μs) | triton 性能(μs) | triton 优化后性能(μs) | 加速比(无工作流直接生成triton代码) | 加速比(AutoResearch初始生成) | 加速比(AutoResearch优化后) | 轮数 | 状态 | |---|---|---|---|---:|---:|---:|---:|---:|---:|---:|---| | 1 | 36 | RMSNorm | VECTOR | 30,043.1 | timeout | 12,310.6 | 0.03x | — | **2.44x** | 26/50 | error (240min cap) | | 1 | 42 | Max_Pooling_2D | VECTOR | 38,458.2 | 3,344,552.8 | 1,737,993.3 | — | 0.011x | **0.022x** | 33/50 | error (240min cap) | | 1 | 44 | Average_Pooling_1D | VECTOR | 20,584.3 | timeout | 12,235.3 | — | — | **1.68x** | 30/30 | done | | 1 | 45 | Average_Pooling_2D | VECTOR | 3,515,948.4 | 2,745,268.0 | 54,680.1 | — | 1.28x | **64.30x** | 40/50 | error (240min cap) | | 1 | 49 | Max_reduction_over_a_dimension | VECTOR | 21,639.9 | 16,499.2 | 6,961.1 | 0.49x | 1.31x | **3.11x** | 50/50 | done | | 1 | 51 | Argmax_over_a_dimension | VECTOR | 21,642.5 | 40,132.3 | 28,674.7 | — | 0.54x | **0.75x** | 50/50 | done | | 1 | 89 | cumsum | VECTOR | 75,221.2 | 706,479.1 | 22,177.0 | 0.22x | 0.11x | **3.39x** | 50/50 | done | | 1 | 93 | masked_cumsum | VECTOR | 90,032.7 | 716,425.3 | 18,959.6 | — | 0.13x | **4.75x** | 14/50 | error (API socket drop) | | 1 | 4 | Matrix_vector_multiplication | CUBE | 34,602.9 | 7,055.8 | 5,089.7 | 0.16x | 4.90x | **6.80x** | 50/50 | done | | 1 | 10 | 3D_tensor_matrix_multiplication | CUBE | 643.6 | 2,139.5 | 743.3 | 0.74x | 0.30x | **0.87x** | 50/50 | done | | 1 | 14 | Matmul_for_upper_triangular_matrices | CUBE | 1,800.5 | 6,464.0 | 1,525.3 | 0.25x | 0.28x | **1.18x** | 50/50 | done | | 1 | 15 | Matmul_for_lower_triangular_matrices | CUBE | 1,795.9 | 6,186.5 | 6,161.8 | 0.01x | 0.29x | **0.29x** | 50/50 | done | ### NPUKernelBench AutoResearch 较难算子批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:30.6h(11 个 op × 50 轮 max,per-op 240min wall-clock cap) #### 结果总表 | Level | Problem ID | 算子名称 | 算子类型 | 基线性能(us) | 初始triton性能(us) | 无工作流直接生成(us) | 加速比 (AutoResearch初始生成) | 加速比(AutoResearch优化后) | 精度通过率 | |---|---|---|---|---|---|---|---|---|---| | 1 | 18 | Index | vector | 89.30 | 741.19 | 700.85 | 0.12x | 0.13x | 41/41 | | 1 | 23 | RepeatInterleave | vector | 137.32 | 1969.94 | 584.05 | 0.07x | 0.24x | 75/75 | | 1 | 24 | EmbeddingDenseBackward | vector | 2227.56 | 3007.04 | 2894.63 | 0.74x | 0.77x | 30/30 | | 1 | 26 | AvgPool3d | vector | 242.78 | 1982.52 | 1267.77 | 0.12x | 0.19x | 72/72 | | 1 | 31 | IOU | vector | 656.20 | 410.17 | 363.18 | 1.60x | 1.81x | 30/30 | | 2 | 1 | RotaryMul | vector | 189.67 | 451.12 | 419.51 | 0.42x | 0.45x | 50/50 | | 2 | 5 | MoeInitRouting | vector | 484.86 | 932.58 | 927.20 | 0.52x | 0.52x | 53/53 | | 2 | 9 | TopKTopP | vector | 8905.87 | 8982.35 | 8927.97 | 0.99x | 1.00x | 50/50 | | 2 | 17 | EmbeddingWithInitialLayernormBackward | vector | 2353.81 | 2292.43 | 2282.59 | 1.03x | 1.03x | 57/57 | | 2 | 18 | FusedAddRmsnorm | vector | 485.82 | 369.37 | 201.61 | 1.32x | 2.41x | 50/50 | | 2 | 23 | HyenaFftSizePaddingRfft | vector | 941.73 | 622.61 | 517.08 | 1.51x | 1.82x | 49/49 | ## 字段说明 - **基线性能**:PyTorch F.X(...) ref 在 NPU 上跑出的延迟,单位 μs - **triton 性能**:手写 triton seed kernel 跑出的延迟(AR 优化前),单位 μs - **triton 优化后性能**:AR 50 轮 EDIT 后最佳 kernel 的延迟,单位 μs - **加速比** = 基线 / triton(>1x 表示 triton 快于 ref)的几何平均 - **加速比(性能优化后)** = 基线 / triton优化后 的几何平均 - **精度通过率** = 通过 allclose 的 case 数 / 总 case 数(per-dtype atol+rtol,fp32 2^-13/1e-5、fp16 2^-10/1e-3、bf16 2^-7/1e-2) #### 特性增强 Enhancements #### 代码清理 Cleanup ## 关联的Issue 无。 ## 测试 - 本地检查插件目录结构,确认 plugins-official/autoresearch 下包含安装脚本、应用代码、qui See merge request: cann/cannbot-skills!653 | 11 天前 | |
在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Co-authored-by: xchang1121<changxiangyu1@huawei.com> # message auto-generated for no-merge-commit merge: !653 merge master into master 在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Created-by: xchang1121 Commit-by: xchang1121 Merged-by: cann-robot Description: ## 描述 #### 新特性 New Features - 【autoresearch】新增 AutoResearch 官方插件。AutoResearch 是基于 Claude Code / Open Code,面向算子优化任务的自动化算子优化工作流项目,负责组织参考实现、候选 kernel、正确性校验、性能评测、远程ssh评测机/本地agent分离调度、批量执行和多轮优化状态管理。支持triton-ascend算子的优化。 - 【autoresearch】安装后以独立项目方式运行,保留原有 slash command、hooks、配置文件、批跑脚本和 worker 连接(使得运行agent端和评测机分离,仅通过ssh连接)方式,用户可以直接创建任务并连接本地或远端 worker 进行评测。 - 【autoresearch】内置 baseline 记录、状态机推进、失败信息提取和 CodeChecker 检查能力,便于跟踪多轮优化中的正确性、性能变化和失败原因。 ## CANN-bench Ascend C VEC算子优化结果: ### 1a. ForeachAddcdivScalar — 分数 84.13,平均加速比 **1.693**(19/20 用例超过参考) | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 1.570 | 23.5 | 36.9 | ok | | 2 | 1.136 | 78.9 | 89.6 | ok | | 3 | 1.243 | 93.1 | 115.8 | ok | | 4 | 1.001 | 890.7 | 892.0 | ok | | 5 | 1.096 | 438.9 | 481.3 | ok | | 6 | 2.480 | 7.5 | 18.7 | ok | | 7 | 2.229 | 11.4 | 25.3 | ok | | 8 | 2.546 | 8.4 | 21.4 | ok | | 9 | 1.163 | 659.9 | 767.6 | ok | | 10 | 2.219 | 10.9 | 24.3 | ok | | 11 | 2.054 | 15.5 | 31.9 | ok | | 12 | 2.120 | 10.8 | 23.0 | ok | | 13 | 1.567 | 51.6 | 80.8 | ok | | 14 | 1.527 | 28.3 | 43.2 | ok | | 15 | 1.590 | 22.6 | 36.0 | ok | | 16 | 1.389 | 51.4 | 71.4 | ok | | 17 | 2.338 | 12.1 | 28.2 | ok | | 18 | 1.374 | 43.6 | 59.9 | ok | | 19 | 2.322 | 12.0 | 28.0 | ok | | 20 | 0.895 | 118.1 | 105.7 | ok | 小张量(6/7/8/10/11/12/17/19)达到参考的 2–2.5×;大张量(4/5/9/20)卡在带宽墙(~1.0×)。仅用例 20 <1。 ### 1b. Cummin — 分数 55.10,平均加速比 **0.132**(访存受限的扫描) | 用例 | 形状(dtype,dim) | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---|---| | 1 | [1024,1024] f16 −1 | 0.048 | 227.0 | 10.9 | ok | | 2 | [2048,2048] f32 −1 | 0.188 | 464.2 | 87.4 | ok | | 3 | [4096,4096] bf16 −1 | 0.308 | 1088.6 | 335.5 | ok | | 4 | [8192,8192] i32 −1 | 0.326 | 4461.5 | 1454.0 | ok | | 5 | [16384,16384] f16 0 | 0.172 | 18178.5 | 3131.8 | ok | | 6 | [8192,8192] f32 1 | 0.306 | 4754.7 | 1454.0 | ok | | 7 | [1023,1023] bf16 −1 | 0.067 | 259.4 | 17.4 | ok | | 8 | [1009,1021] f16 0 | 0.038 | 278.9 | 10.7 | ok | | 9 | [1537,769] f32 −1 | 0.097 | 253.3 | 24.6 | ok | | 10 | [363,367,373] bf16 1 | 0.278 | 2680.0 | 745.4 | ok | | 11 | [2049,513] f16 −1 | 0.058 | 189.3 | 10.9 | ok | | 12 | [3,7,13,4001] f32 −1 | 0.035 | 654.1 | 22.8 | ok | | 13 | [1000003] bf16 −1 | 0.001 | 24235.7 | 33.3 | ok | | 14 | [11,13,17,67,67] f16 2 | 0.009 | 12046.3 | 113.7 | ok | | 15 | [3,7,11,13,1013] i32 −1 | 0.170 | 373.6 | 63.4 | ok | | 16 | [512,2049] f32 −1 | 0.057 | 383.5 | 21.9 | ok | | 17 | [255,8193] bf16 0 | 0.119 | 234.8 | 27.9 | ok | | 18 | [4097,511] f16 −1 | 0.099 | 220.3 | 21.8 | ok | | 19 | [2,511,2049] f32 1 | 0.154 | 283.9 | 43.6 | ok | | 20 | [4,255,2049] bf16 −1 | 0.100 | 420.0 | 41.8 | ok | 最差:用例 13(单条 1M 通道的一维扫描,仅一个核,0.001)与用例 14(nan/精确标量路径,0.009)。中等 1M 用例(1/7/8/11/12/16)延迟受限,处于 0.03–0.07。 ### 1c. Transpose — 分数 65.16,平均加速比 **0.537** | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 0.021 | 507.5 | 10.9 | ok | | 2 | 1.122 | 35.9 | 40.3 | ok | | 3 | 0.876 | 80.7 | 70.6 | ok | | 4 | 0.528 | 1051.0 | 555.0 | ok | | 5 | 0.062 | 13211.9 | 814.9 | ok | | 6 | 0.099 | 124.2 | 12.3 | ok | | 7 | 0.573 | 19.0 | 10.9 | ok | | 8 | 0.706 | 30.5 | 21.5 | ok | | 9 | 0.625 | 19.7 | 12.3 | ok | | 10 | 1.008 | 646.2 | 651.3 | ok | | 11 | 0.555 | 19.6 | 10.9 | ok | | 12 | 0.672 | 33.9 | 22.8 | ok | | 13 | 0.601 | 16.6 | 10.0 | ok | | 14 | 0.852 | 24.4 | 20.8 | ok | | 15 | 0.428 | 265.9 | 113.7 | ok | | 16 | 0.067 | 1403.6 | 94.6 | ok | | 17 | 0.922 | 23.7 | 21.9 | ok | | 18 | 0.877 | 24.9 | 21.8 | ok | | 19 | 0.014 | 797.3 | 10.9 | ok | | 20 | 0.138 | 158.0 | 21.8 | ok | 多数用例处于参考的 0.5–1.1×。较慢:用例 1、19(0.02,int64/大规模全交换),用例 5(0.06,268 MB int64),用例 16(0.07),用例 6(0.10,A 维极小),用例 20(0.14)。 ## 2. CANN-bench Ascend C 18 个算子逐算子最佳加速比(仅标准 20 用例评测) 按分数从低到高排序。 avg_speedup = 相对官方参考的逐用例加速比均值。 | # | 算子 | 最佳分数 | avg_speedup(vs 参考) | vs_hw | 通过 | |---|---|---|---|---|---| | 1 | WeightQuantBatchMatmul | 33.06 | 0.091 | 0.017 | 9/20 | | 2 | Conv3DBackpropFilter | 36.21 | 0.007 | 0.001 | 14/20 | | 3 | GroupedMatmul | 43.70 | 0.101 | 0.012 | 14/20 | | 4 | DepthwiseConv2D | 48.70 | 0.053 | 0.001 | 18/20 | | 5 | ApplyRotaryPosEmb | 50.06 | 0.090 | 0.010 | 18/20 | | 6 | GQA | 51.84 | 0.048 | 0.009 | 20/20 | | 7 | MLA | 51.88 | 0.049 | 0.005 | 20/20 | | 8 | MHA | 52.20 | 0.062 | 0.014 | 20/20 | | 9 | GroupedMatmulSwigluQuant | 53.48 | 0.088 | 0.011 | 20/20 | | 10 | Gather | 54.35 | 0.212 | 0.007 | 20/20 | | 11 | Cummin | 55.12 | 0.132 | 0.008 | 20/20 | | 12 | QuantMatmul | 56.06 | 0.218 | 0.074 | 20/20 | | 13 | AddRmsNormDynamicQuant | 56.88 | 0.254 | 0.042 | 19/20 | | 14 | TopK | 57.40 | 0.211 | 0.012 | 20/20 | | 15 | Transpose | 65.16 | 0.537 | 0.039 | 20/20 | | 16 | DequantSwigluQuant | 65.84 | 0.559 | 0.082 | 20/20 | | 17 | Softmax | 67.51 | 1.428 | 0.096 | 19/20 | | 18 | ForeachAddcdivScalar | 84.13 | 1.693 | 0.534 | 20/20 | **分数 = 0.2·编译 + 0.3·功能 + 0.5·性能(×100)。** 只要 20/20 全通过,就已拿到 20(编译)+ 30(功能)= **50 分底线**;超过 50 的部分是性能项。因此低分算子分两类失效模式: - **功能受限**(未拿满 30 分底线):WeightQuant(9/20)、Conv3D 与 GroupedMatmul(14/20)、Depthwise 与 ApplyRotary(18/20)、AddRmsNorm 与 Softmax(19/20)。 - **性能受限**(全通过但 avg_speedup ≪ 1):注意力/矩阵乘簇(GQA/MLA/MHA/GroupedMatmul,约 0.05–0.10)与 Conv(0.007)。 ### Ascend C算子未来优化计划(持续更新cann-bench提交) **第一步,提升正确性。** 功能分(每算子最高 30 分)的获取成本低于性能优化,应优先补齐未通过用例:WeightQuant 当前仅通过 9/20,主要受限于 int4/int8 反量化的精度与边界值处理;Conv3D 与 GroupedMatmul 各通过 14/20;Depthwise、ApplyRotary、AddRmsNorm、Softmax 仅一至两个用例未过。与此同时需消除 no-NPU-perf 抖动,确保每个用例都执行可被 profiler 采集的 NPU 算子,避免个别用例缺失计时而导致整个算子被反作弊清零。 **第二步,为矩阵乘与注意力类算子实现一个可复用的 cube(Mmad)分块 GEMM 核**(L1→L0A/L0B→Mmad→L0C,配合双缓冲)。这类算子目前运行在标量/向量单元上,加速比仅 0.05–0.22:QuantMatmul 0.218、GroupedMatmul 与 GroupedMatmulSwigluQuant 0.09、MHA/MLA/GQA 0.05–0.06、Conv3D 0.007(采用 im2col+cube)。该核预计需数小时开发,但可同时带动上述多个算子的性能。 **第三步,进一步优化当前最高分算子 Foreach**(84.13,已超过参考实现)。其瓶颈集中于大张量用例(4/5/9/20,加速比接近 1×),可通过增大 TILE、引入三级缓冲改善数据搬运重叠,或将 Div+Muls+Add 融合为 Div+Axpy 两步来提升。由于该算子分值最高,即使 5% 的提升对总分的贡献也高于修复一个 0.05 的落后算子。 **Transpose(0.537)与 Cummin(0.132)已接近 c220 的性能上限,建议置于最后或暂缓。** 二者剩余的低速用例——transpose 的 int8/int64 与 A 维极小场景、cummin 的单核长扫描——均受硬件限制:c220 不具备 MicroAPI/RegTensor,厂商基于寄存器的 Sklansky 前缀扫描与 int8/int64 硬件转置在此均不可用;已实现并验证正确的两级 block-scan 在 910c 上无净收益。 # Triton-Ascend 优化结果 ### KernelBench L1 AutoResearch 批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:27.2h(12 op × 50 轮 max,per-op 240min wall-clock cap,--eval-timeout 600s) 状态:8 done / 4 error;batch.log 输出 done : 8 (median 1.43x, best 6.80x, worst 0.29x) ### 结果总表(精度均全部通过) | Level | Problem ID | 算子名称 | 验收类型 | PyTorch 性能(μs) | triton 性能(μs) | triton 优化后性能(μs) | 加速比(无工作流直接生成triton代码) | 加速比(AutoResearch初始生成) | 加速比(AutoResearch优化后) | 轮数 | 状态 | |---|---|---|---|---:|---:|---:|---:|---:|---:|---:|---| | 1 | 36 | RMSNorm | VECTOR | 30,043.1 | timeout | 12,310.6 | 0.03x | — | **2.44x** | 26/50 | error (240min cap) | | 1 | 42 | Max_Pooling_2D | VECTOR | 38,458.2 | 3,344,552.8 | 1,737,993.3 | — | 0.011x | **0.022x** | 33/50 | error (240min cap) | | 1 | 44 | Average_Pooling_1D | VECTOR | 20,584.3 | timeout | 12,235.3 | — | — | **1.68x** | 30/30 | done | | 1 | 45 | Average_Pooling_2D | VECTOR | 3,515,948.4 | 2,745,268.0 | 54,680.1 | — | 1.28x | **64.30x** | 40/50 | error (240min cap) | | 1 | 49 | Max_reduction_over_a_dimension | VECTOR | 21,639.9 | 16,499.2 | 6,961.1 | 0.49x | 1.31x | **3.11x** | 50/50 | done | | 1 | 51 | Argmax_over_a_dimension | VECTOR | 21,642.5 | 40,132.3 | 28,674.7 | — | 0.54x | **0.75x** | 50/50 | done | | 1 | 89 | cumsum | VECTOR | 75,221.2 | 706,479.1 | 22,177.0 | 0.22x | 0.11x | **3.39x** | 50/50 | done | | 1 | 93 | masked_cumsum | VECTOR | 90,032.7 | 716,425.3 | 18,959.6 | — | 0.13x | **4.75x** | 14/50 | error (API socket drop) | | 1 | 4 | Matrix_vector_multiplication | CUBE | 34,602.9 | 7,055.8 | 5,089.7 | 0.16x | 4.90x | **6.80x** | 50/50 | done | | 1 | 10 | 3D_tensor_matrix_multiplication | CUBE | 643.6 | 2,139.5 | 743.3 | 0.74x | 0.30x | **0.87x** | 50/50 | done | | 1 | 14 | Matmul_for_upper_triangular_matrices | CUBE | 1,800.5 | 6,464.0 | 1,525.3 | 0.25x | 0.28x | **1.18x** | 50/50 | done | | 1 | 15 | Matmul_for_lower_triangular_matrices | CUBE | 1,795.9 | 6,186.5 | 6,161.8 | 0.01x | 0.29x | **0.29x** | 50/50 | done | ### NPUKernelBench AutoResearch 较难算子批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:30.6h(11 个 op × 50 轮 max,per-op 240min wall-clock cap) #### 结果总表 | Level | Problem ID | 算子名称 | 算子类型 | 基线性能(us) | 初始triton性能(us) | 无工作流直接生成(us) | 加速比 (AutoResearch初始生成) | 加速比(AutoResearch优化后) | 精度通过率 | |---|---|---|---|---|---|---|---|---|---| | 1 | 18 | Index | vector | 89.30 | 741.19 | 700.85 | 0.12x | 0.13x | 41/41 | | 1 | 23 | RepeatInterleave | vector | 137.32 | 1969.94 | 584.05 | 0.07x | 0.24x | 75/75 | | 1 | 24 | EmbeddingDenseBackward | vector | 2227.56 | 3007.04 | 2894.63 | 0.74x | 0.77x | 30/30 | | 1 | 26 | AvgPool3d | vector | 242.78 | 1982.52 | 1267.77 | 0.12x | 0.19x | 72/72 | | 1 | 31 | IOU | vector | 656.20 | 410.17 | 363.18 | 1.60x | 1.81x | 30/30 | | 2 | 1 | RotaryMul | vector | 189.67 | 451.12 | 419.51 | 0.42x | 0.45x | 50/50 | | 2 | 5 | MoeInitRouting | vector | 484.86 | 932.58 | 927.20 | 0.52x | 0.52x | 53/53 | | 2 | 9 | TopKTopP | vector | 8905.87 | 8982.35 | 8927.97 | 0.99x | 1.00x | 50/50 | | 2 | 17 | EmbeddingWithInitialLayernormBackward | vector | 2353.81 | 2292.43 | 2282.59 | 1.03x | 1.03x | 57/57 | | 2 | 18 | FusedAddRmsnorm | vector | 485.82 | 369.37 | 201.61 | 1.32x | 2.41x | 50/50 | | 2 | 23 | HyenaFftSizePaddingRfft | vector | 941.73 | 622.61 | 517.08 | 1.51x | 1.82x | 49/49 | ## 字段说明 - **基线性能**:PyTorch F.X(...) ref 在 NPU 上跑出的延迟,单位 μs - **triton 性能**:手写 triton seed kernel 跑出的延迟(AR 优化前),单位 μs - **triton 优化后性能**:AR 50 轮 EDIT 后最佳 kernel 的延迟,单位 μs - **加速比** = 基线 / triton(>1x 表示 triton 快于 ref)的几何平均 - **加速比(性能优化后)** = 基线 / triton优化后 的几何平均 - **精度通过率** = 通过 allclose 的 case 数 / 总 case 数(per-dtype atol+rtol,fp32 2^-13/1e-5、fp16 2^-10/1e-3、bf16 2^-7/1e-2) #### 特性增强 Enhancements #### 代码清理 Cleanup ## 关联的Issue 无。 ## 测试 - 本地检查插件目录结构,确认 plugins-official/autoresearch 下包含安装脚本、应用代码、qui See merge request: cann/cannbot-skills!653 | 11 天前 | |
在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Co-authored-by: xchang1121<changxiangyu1@huawei.com> # message auto-generated for no-merge-commit merge: !653 merge master into master 在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Created-by: xchang1121 Commit-by: xchang1121 Merged-by: cann-robot Description: ## 描述 #### 新特性 New Features - 【autoresearch】新增 AutoResearch 官方插件。AutoResearch 是基于 Claude Code / Open Code,面向算子优化任务的自动化算子优化工作流项目,负责组织参考实现、候选 kernel、正确性校验、性能评测、远程ssh评测机/本地agent分离调度、批量执行和多轮优化状态管理。支持triton-ascend算子的优化。 - 【autoresearch】安装后以独立项目方式运行,保留原有 slash command、hooks、配置文件、批跑脚本和 worker 连接(使得运行agent端和评测机分离,仅通过ssh连接)方式,用户可以直接创建任务并连接本地或远端 worker 进行评测。 - 【autoresearch】内置 baseline 记录、状态机推进、失败信息提取和 CodeChecker 检查能力,便于跟踪多轮优化中的正确性、性能变化和失败原因。 ## CANN-bench Ascend C VEC算子优化结果: ### 1a. ForeachAddcdivScalar — 分数 84.13,平均加速比 **1.693**(19/20 用例超过参考) | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 1.570 | 23.5 | 36.9 | ok | | 2 | 1.136 | 78.9 | 89.6 | ok | | 3 | 1.243 | 93.1 | 115.8 | ok | | 4 | 1.001 | 890.7 | 892.0 | ok | | 5 | 1.096 | 438.9 | 481.3 | ok | | 6 | 2.480 | 7.5 | 18.7 | ok | | 7 | 2.229 | 11.4 | 25.3 | ok | | 8 | 2.546 | 8.4 | 21.4 | ok | | 9 | 1.163 | 659.9 | 767.6 | ok | | 10 | 2.219 | 10.9 | 24.3 | ok | | 11 | 2.054 | 15.5 | 31.9 | ok | | 12 | 2.120 | 10.8 | 23.0 | ok | | 13 | 1.567 | 51.6 | 80.8 | ok | | 14 | 1.527 | 28.3 | 43.2 | ok | | 15 | 1.590 | 22.6 | 36.0 | ok | | 16 | 1.389 | 51.4 | 71.4 | ok | | 17 | 2.338 | 12.1 | 28.2 | ok | | 18 | 1.374 | 43.6 | 59.9 | ok | | 19 | 2.322 | 12.0 | 28.0 | ok | | 20 | 0.895 | 118.1 | 105.7 | ok | 小张量(6/7/8/10/11/12/17/19)达到参考的 2–2.5×;大张量(4/5/9/20)卡在带宽墙(~1.0×)。仅用例 20 <1。 ### 1b. Cummin — 分数 55.10,平均加速比 **0.132**(访存受限的扫描) | 用例 | 形状(dtype,dim) | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---|---| | 1 | [1024,1024] f16 −1 | 0.048 | 227.0 | 10.9 | ok | | 2 | [2048,2048] f32 −1 | 0.188 | 464.2 | 87.4 | ok | | 3 | [4096,4096] bf16 −1 | 0.308 | 1088.6 | 335.5 | ok | | 4 | [8192,8192] i32 −1 | 0.326 | 4461.5 | 1454.0 | ok | | 5 | [16384,16384] f16 0 | 0.172 | 18178.5 | 3131.8 | ok | | 6 | [8192,8192] f32 1 | 0.306 | 4754.7 | 1454.0 | ok | | 7 | [1023,1023] bf16 −1 | 0.067 | 259.4 | 17.4 | ok | | 8 | [1009,1021] f16 0 | 0.038 | 278.9 | 10.7 | ok | | 9 | [1537,769] f32 −1 | 0.097 | 253.3 | 24.6 | ok | | 10 | [363,367,373] bf16 1 | 0.278 | 2680.0 | 745.4 | ok | | 11 | [2049,513] f16 −1 | 0.058 | 189.3 | 10.9 | ok | | 12 | [3,7,13,4001] f32 −1 | 0.035 | 654.1 | 22.8 | ok | | 13 | [1000003] bf16 −1 | 0.001 | 24235.7 | 33.3 | ok | | 14 | [11,13,17,67,67] f16 2 | 0.009 | 12046.3 | 113.7 | ok | | 15 | [3,7,11,13,1013] i32 −1 | 0.170 | 373.6 | 63.4 | ok | | 16 | [512,2049] f32 −1 | 0.057 | 383.5 | 21.9 | ok | | 17 | [255,8193] bf16 0 | 0.119 | 234.8 | 27.9 | ok | | 18 | [4097,511] f16 −1 | 0.099 | 220.3 | 21.8 | ok | | 19 | [2,511,2049] f32 1 | 0.154 | 283.9 | 43.6 | ok | | 20 | [4,255,2049] bf16 −1 | 0.100 | 420.0 | 41.8 | ok | 最差:用例 13(单条 1M 通道的一维扫描,仅一个核,0.001)与用例 14(nan/精确标量路径,0.009)。中等 1M 用例(1/7/8/11/12/16)延迟受限,处于 0.03–0.07。 ### 1c. Transpose — 分数 65.16,平均加速比 **0.537** | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 0.021 | 507.5 | 10.9 | ok | | 2 | 1.122 | 35.9 | 40.3 | ok | | 3 | 0.876 | 80.7 | 70.6 | ok | | 4 | 0.528 | 1051.0 | 555.0 | ok | | 5 | 0.062 | 13211.9 | 814.9 | ok | | 6 | 0.099 | 124.2 | 12.3 | ok | | 7 | 0.573 | 19.0 | 10.9 | ok | | 8 | 0.706 | 30.5 | 21.5 | ok | | 9 | 0.625 | 19.7 | 12.3 | ok | | 10 | 1.008 | 646.2 | 651.3 | ok | | 11 | 0.555 | 19.6 | 10.9 | ok | | 12 | 0.672 | 33.9 | 22.8 | ok | | 13 | 0.601 | 16.6 | 10.0 | ok | | 14 | 0.852 | 24.4 | 20.8 | ok | | 15 | 0.428 | 265.9 | 113.7 | ok | | 16 | 0.067 | 1403.6 | 94.6 | ok | | 17 | 0.922 | 23.7 | 21.9 | ok | | 18 | 0.877 | 24.9 | 21.8 | ok | | 19 | 0.014 | 797.3 | 10.9 | ok | | 20 | 0.138 | 158.0 | 21.8 | ok | 多数用例处于参考的 0.5–1.1×。较慢:用例 1、19(0.02,int64/大规模全交换),用例 5(0.06,268 MB int64),用例 16(0.07),用例 6(0.10,A 维极小),用例 20(0.14)。 ## 2. CANN-bench Ascend C 18 个算子逐算子最佳加速比(仅标准 20 用例评测) 按分数从低到高排序。 avg_speedup = 相对官方参考的逐用例加速比均值。 | # | 算子 | 最佳分数 | avg_speedup(vs 参考) | vs_hw | 通过 | |---|---|---|---|---|---| | 1 | WeightQuantBatchMatmul | 33.06 | 0.091 | 0.017 | 9/20 | | 2 | Conv3DBackpropFilter | 36.21 | 0.007 | 0.001 | 14/20 | | 3 | GroupedMatmul | 43.70 | 0.101 | 0.012 | 14/20 | | 4 | DepthwiseConv2D | 48.70 | 0.053 | 0.001 | 18/20 | | 5 | ApplyRotaryPosEmb | 50.06 | 0.090 | 0.010 | 18/20 | | 6 | GQA | 51.84 | 0.048 | 0.009 | 20/20 | | 7 | MLA | 51.88 | 0.049 | 0.005 | 20/20 | | 8 | MHA | 52.20 | 0.062 | 0.014 | 20/20 | | 9 | GroupedMatmulSwigluQuant | 53.48 | 0.088 | 0.011 | 20/20 | | 10 | Gather | 54.35 | 0.212 | 0.007 | 20/20 | | 11 | Cummin | 55.12 | 0.132 | 0.008 | 20/20 | | 12 | QuantMatmul | 56.06 | 0.218 | 0.074 | 20/20 | | 13 | AddRmsNormDynamicQuant | 56.88 | 0.254 | 0.042 | 19/20 | | 14 | TopK | 57.40 | 0.211 | 0.012 | 20/20 | | 15 | Transpose | 65.16 | 0.537 | 0.039 | 20/20 | | 16 | DequantSwigluQuant | 65.84 | 0.559 | 0.082 | 20/20 | | 17 | Softmax | 67.51 | 1.428 | 0.096 | 19/20 | | 18 | ForeachAddcdivScalar | 84.13 | 1.693 | 0.534 | 20/20 | **分数 = 0.2·编译 + 0.3·功能 + 0.5·性能(×100)。** 只要 20/20 全通过,就已拿到 20(编译)+ 30(功能)= **50 分底线**;超过 50 的部分是性能项。因此低分算子分两类失效模式: - **功能受限**(未拿满 30 分底线):WeightQuant(9/20)、Conv3D 与 GroupedMatmul(14/20)、Depthwise 与 ApplyRotary(18/20)、AddRmsNorm 与 Softmax(19/20)。 - **性能受限**(全通过但 avg_speedup ≪ 1):注意力/矩阵乘簇(GQA/MLA/MHA/GroupedMatmul,约 0.05–0.10)与 Conv(0.007)。 ### Ascend C算子未来优化计划(持续更新cann-bench提交) **第一步,提升正确性。** 功能分(每算子最高 30 分)的获取成本低于性能优化,应优先补齐未通过用例:WeightQuant 当前仅通过 9/20,主要受限于 int4/int8 反量化的精度与边界值处理;Conv3D 与 GroupedMatmul 各通过 14/20;Depthwise、ApplyRotary、AddRmsNorm、Softmax 仅一至两个用例未过。与此同时需消除 no-NPU-perf 抖动,确保每个用例都执行可被 profiler 采集的 NPU 算子,避免个别用例缺失计时而导致整个算子被反作弊清零。 **第二步,为矩阵乘与注意力类算子实现一个可复用的 cube(Mmad)分块 GEMM 核**(L1→L0A/L0B→Mmad→L0C,配合双缓冲)。这类算子目前运行在标量/向量单元上,加速比仅 0.05–0.22:QuantMatmul 0.218、GroupedMatmul 与 GroupedMatmulSwigluQuant 0.09、MHA/MLA/GQA 0.05–0.06、Conv3D 0.007(采用 im2col+cube)。该核预计需数小时开发,但可同时带动上述多个算子的性能。 **第三步,进一步优化当前最高分算子 Foreach**(84.13,已超过参考实现)。其瓶颈集中于大张量用例(4/5/9/20,加速比接近 1×),可通过增大 TILE、引入三级缓冲改善数据搬运重叠,或将 Div+Muls+Add 融合为 Div+Axpy 两步来提升。由于该算子分值最高,即使 5% 的提升对总分的贡献也高于修复一个 0.05 的落后算子。 **Transpose(0.537)与 Cummin(0.132)已接近 c220 的性能上限,建议置于最后或暂缓。** 二者剩余的低速用例——transpose 的 int8/int64 与 A 维极小场景、cummin 的单核长扫描——均受硬件限制:c220 不具备 MicroAPI/RegTensor,厂商基于寄存器的 Sklansky 前缀扫描与 int8/int64 硬件转置在此均不可用;已实现并验证正确的两级 block-scan 在 910c 上无净收益。 # Triton-Ascend 优化结果 ### KernelBench L1 AutoResearch 批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:27.2h(12 op × 50 轮 max,per-op 240min wall-clock cap,--eval-timeout 600s) 状态:8 done / 4 error;batch.log 输出 done : 8 (median 1.43x, best 6.80x, worst 0.29x) ### 结果总表(精度均全部通过) | Level | Problem ID | 算子名称 | 验收类型 | PyTorch 性能(μs) | triton 性能(μs) | triton 优化后性能(μs) | 加速比(无工作流直接生成triton代码) | 加速比(AutoResearch初始生成) | 加速比(AutoResearch优化后) | 轮数 | 状态 | |---|---|---|---|---:|---:|---:|---:|---:|---:|---:|---| | 1 | 36 | RMSNorm | VECTOR | 30,043.1 | timeout | 12,310.6 | 0.03x | — | **2.44x** | 26/50 | error (240min cap) | | 1 | 42 | Max_Pooling_2D | VECTOR | 38,458.2 | 3,344,552.8 | 1,737,993.3 | — | 0.011x | **0.022x** | 33/50 | error (240min cap) | | 1 | 44 | Average_Pooling_1D | VECTOR | 20,584.3 | timeout | 12,235.3 | — | — | **1.68x** | 30/30 | done | | 1 | 45 | Average_Pooling_2D | VECTOR | 3,515,948.4 | 2,745,268.0 | 54,680.1 | — | 1.28x | **64.30x** | 40/50 | error (240min cap) | | 1 | 49 | Max_reduction_over_a_dimension | VECTOR | 21,639.9 | 16,499.2 | 6,961.1 | 0.49x | 1.31x | **3.11x** | 50/50 | done | | 1 | 51 | Argmax_over_a_dimension | VECTOR | 21,642.5 | 40,132.3 | 28,674.7 | — | 0.54x | **0.75x** | 50/50 | done | | 1 | 89 | cumsum | VECTOR | 75,221.2 | 706,479.1 | 22,177.0 | 0.22x | 0.11x | **3.39x** | 50/50 | done | | 1 | 93 | masked_cumsum | VECTOR | 90,032.7 | 716,425.3 | 18,959.6 | — | 0.13x | **4.75x** | 14/50 | error (API socket drop) | | 1 | 4 | Matrix_vector_multiplication | CUBE | 34,602.9 | 7,055.8 | 5,089.7 | 0.16x | 4.90x | **6.80x** | 50/50 | done | | 1 | 10 | 3D_tensor_matrix_multiplication | CUBE | 643.6 | 2,139.5 | 743.3 | 0.74x | 0.30x | **0.87x** | 50/50 | done | | 1 | 14 | Matmul_for_upper_triangular_matrices | CUBE | 1,800.5 | 6,464.0 | 1,525.3 | 0.25x | 0.28x | **1.18x** | 50/50 | done | | 1 | 15 | Matmul_for_lower_triangular_matrices | CUBE | 1,795.9 | 6,186.5 | 6,161.8 | 0.01x | 0.29x | **0.29x** | 50/50 | done | ### NPUKernelBench AutoResearch 较难算子批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:30.6h(11 个 op × 50 轮 max,per-op 240min wall-clock cap) #### 结果总表 | Level | Problem ID | 算子名称 | 算子类型 | 基线性能(us) | 初始triton性能(us) | 无工作流直接生成(us) | 加速比 (AutoResearch初始生成) | 加速比(AutoResearch优化后) | 精度通过率 | |---|---|---|---|---|---|---|---|---|---| | 1 | 18 | Index | vector | 89.30 | 741.19 | 700.85 | 0.12x | 0.13x | 41/41 | | 1 | 23 | RepeatInterleave | vector | 137.32 | 1969.94 | 584.05 | 0.07x | 0.24x | 75/75 | | 1 | 24 | EmbeddingDenseBackward | vector | 2227.56 | 3007.04 | 2894.63 | 0.74x | 0.77x | 30/30 | | 1 | 26 | AvgPool3d | vector | 242.78 | 1982.52 | 1267.77 | 0.12x | 0.19x | 72/72 | | 1 | 31 | IOU | vector | 656.20 | 410.17 | 363.18 | 1.60x | 1.81x | 30/30 | | 2 | 1 | RotaryMul | vector | 189.67 | 451.12 | 419.51 | 0.42x | 0.45x | 50/50 | | 2 | 5 | MoeInitRouting | vector | 484.86 | 932.58 | 927.20 | 0.52x | 0.52x | 53/53 | | 2 | 9 | TopKTopP | vector | 8905.87 | 8982.35 | 8927.97 | 0.99x | 1.00x | 50/50 | | 2 | 17 | EmbeddingWithInitialLayernormBackward | vector | 2353.81 | 2292.43 | 2282.59 | 1.03x | 1.03x | 57/57 | | 2 | 18 | FusedAddRmsnorm | vector | 485.82 | 369.37 | 201.61 | 1.32x | 2.41x | 50/50 | | 2 | 23 | HyenaFftSizePaddingRfft | vector | 941.73 | 622.61 | 517.08 | 1.51x | 1.82x | 49/49 | ## 字段说明 - **基线性能**:PyTorch F.X(...) ref 在 NPU 上跑出的延迟,单位 μs - **triton 性能**:手写 triton seed kernel 跑出的延迟(AR 优化前),单位 μs - **triton 优化后性能**:AR 50 轮 EDIT 后最佳 kernel 的延迟,单位 μs - **加速比** = 基线 / triton(>1x 表示 triton 快于 ref)的几何平均 - **加速比(性能优化后)** = 基线 / triton优化后 的几何平均 - **精度通过率** = 通过 allclose 的 case 数 / 总 case 数(per-dtype atol+rtol,fp32 2^-13/1e-5、fp16 2^-10/1e-3、bf16 2^-7/1e-2) #### 特性增强 Enhancements #### 代码清理 Cleanup ## 关联的Issue 无。 ## 测试 - 本地检查插件目录结构,确认 plugins-official/autoresearch 下包含安装脚本、应用代码、qui See merge request: cann/cannbot-skills!653 | 11 天前 | |
在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Co-authored-by: xchang1121<changxiangyu1@huawei.com> # message auto-generated for no-merge-commit merge: !653 merge master into master 在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Created-by: xchang1121 Commit-by: xchang1121 Merged-by: cann-robot Description: ## 描述 #### 新特性 New Features - 【autoresearch】新增 AutoResearch 官方插件。AutoResearch 是基于 Claude Code / Open Code,面向算子优化任务的自动化算子优化工作流项目,负责组织参考实现、候选 kernel、正确性校验、性能评测、远程ssh评测机/本地agent分离调度、批量执行和多轮优化状态管理。支持triton-ascend算子的优化。 - 【autoresearch】安装后以独立项目方式运行,保留原有 slash command、hooks、配置文件、批跑脚本和 worker 连接(使得运行agent端和评测机分离,仅通过ssh连接)方式,用户可以直接创建任务并连接本地或远端 worker 进行评测。 - 【autoresearch】内置 baseline 记录、状态机推进、失败信息提取和 CodeChecker 检查能力,便于跟踪多轮优化中的正确性、性能变化和失败原因。 ## CANN-bench Ascend C VEC算子优化结果: ### 1a. ForeachAddcdivScalar — 分数 84.13,平均加速比 **1.693**(19/20 用例超过参考) | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 1.570 | 23.5 | 36.9 | ok | | 2 | 1.136 | 78.9 | 89.6 | ok | | 3 | 1.243 | 93.1 | 115.8 | ok | | 4 | 1.001 | 890.7 | 892.0 | ok | | 5 | 1.096 | 438.9 | 481.3 | ok | | 6 | 2.480 | 7.5 | 18.7 | ok | | 7 | 2.229 | 11.4 | 25.3 | ok | | 8 | 2.546 | 8.4 | 21.4 | ok | | 9 | 1.163 | 659.9 | 767.6 | ok | | 10 | 2.219 | 10.9 | 24.3 | ok | | 11 | 2.054 | 15.5 | 31.9 | ok | | 12 | 2.120 | 10.8 | 23.0 | ok | | 13 | 1.567 | 51.6 | 80.8 | ok | | 14 | 1.527 | 28.3 | 43.2 | ok | | 15 | 1.590 | 22.6 | 36.0 | ok | | 16 | 1.389 | 51.4 | 71.4 | ok | | 17 | 2.338 | 12.1 | 28.2 | ok | | 18 | 1.374 | 43.6 | 59.9 | ok | | 19 | 2.322 | 12.0 | 28.0 | ok | | 20 | 0.895 | 118.1 | 105.7 | ok | 小张量(6/7/8/10/11/12/17/19)达到参考的 2–2.5×;大张量(4/5/9/20)卡在带宽墙(~1.0×)。仅用例 20 <1。 ### 1b. Cummin — 分数 55.10,平均加速比 **0.132**(访存受限的扫描) | 用例 | 形状(dtype,dim) | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---|---| | 1 | [1024,1024] f16 −1 | 0.048 | 227.0 | 10.9 | ok | | 2 | [2048,2048] f32 −1 | 0.188 | 464.2 | 87.4 | ok | | 3 | [4096,4096] bf16 −1 | 0.308 | 1088.6 | 335.5 | ok | | 4 | [8192,8192] i32 −1 | 0.326 | 4461.5 | 1454.0 | ok | | 5 | [16384,16384] f16 0 | 0.172 | 18178.5 | 3131.8 | ok | | 6 | [8192,8192] f32 1 | 0.306 | 4754.7 | 1454.0 | ok | | 7 | [1023,1023] bf16 −1 | 0.067 | 259.4 | 17.4 | ok | | 8 | [1009,1021] f16 0 | 0.038 | 278.9 | 10.7 | ok | | 9 | [1537,769] f32 −1 | 0.097 | 253.3 | 24.6 | ok | | 10 | [363,367,373] bf16 1 | 0.278 | 2680.0 | 745.4 | ok | | 11 | [2049,513] f16 −1 | 0.058 | 189.3 | 10.9 | ok | | 12 | [3,7,13,4001] f32 −1 | 0.035 | 654.1 | 22.8 | ok | | 13 | [1000003] bf16 −1 | 0.001 | 24235.7 | 33.3 | ok | | 14 | [11,13,17,67,67] f16 2 | 0.009 | 12046.3 | 113.7 | ok | | 15 | [3,7,11,13,1013] i32 −1 | 0.170 | 373.6 | 63.4 | ok | | 16 | [512,2049] f32 −1 | 0.057 | 383.5 | 21.9 | ok | | 17 | [255,8193] bf16 0 | 0.119 | 234.8 | 27.9 | ok | | 18 | [4097,511] f16 −1 | 0.099 | 220.3 | 21.8 | ok | | 19 | [2,511,2049] f32 1 | 0.154 | 283.9 | 43.6 | ok | | 20 | [4,255,2049] bf16 −1 | 0.100 | 420.0 | 41.8 | ok | 最差:用例 13(单条 1M 通道的一维扫描,仅一个核,0.001)与用例 14(nan/精确标量路径,0.009)。中等 1M 用例(1/7/8/11/12/16)延迟受限,处于 0.03–0.07。 ### 1c. Transpose — 分数 65.16,平均加速比 **0.537** | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 0.021 | 507.5 | 10.9 | ok | | 2 | 1.122 | 35.9 | 40.3 | ok | | 3 | 0.876 | 80.7 | 70.6 | ok | | 4 | 0.528 | 1051.0 | 555.0 | ok | | 5 | 0.062 | 13211.9 | 814.9 | ok | | 6 | 0.099 | 124.2 | 12.3 | ok | | 7 | 0.573 | 19.0 | 10.9 | ok | | 8 | 0.706 | 30.5 | 21.5 | ok | | 9 | 0.625 | 19.7 | 12.3 | ok | | 10 | 1.008 | 646.2 | 651.3 | ok | | 11 | 0.555 | 19.6 | 10.9 | ok | | 12 | 0.672 | 33.9 | 22.8 | ok | | 13 | 0.601 | 16.6 | 10.0 | ok | | 14 | 0.852 | 24.4 | 20.8 | ok | | 15 | 0.428 | 265.9 | 113.7 | ok | | 16 | 0.067 | 1403.6 | 94.6 | ok | | 17 | 0.922 | 23.7 | 21.9 | ok | | 18 | 0.877 | 24.9 | 21.8 | ok | | 19 | 0.014 | 797.3 | 10.9 | ok | | 20 | 0.138 | 158.0 | 21.8 | ok | 多数用例处于参考的 0.5–1.1×。较慢:用例 1、19(0.02,int64/大规模全交换),用例 5(0.06,268 MB int64),用例 16(0.07),用例 6(0.10,A 维极小),用例 20(0.14)。 ## 2. CANN-bench Ascend C 18 个算子逐算子最佳加速比(仅标准 20 用例评测) 按分数从低到高排序。 avg_speedup = 相对官方参考的逐用例加速比均值。 | # | 算子 | 最佳分数 | avg_speedup(vs 参考) | vs_hw | 通过 | |---|---|---|---|---|---| | 1 | WeightQuantBatchMatmul | 33.06 | 0.091 | 0.017 | 9/20 | | 2 | Conv3DBackpropFilter | 36.21 | 0.007 | 0.001 | 14/20 | | 3 | GroupedMatmul | 43.70 | 0.101 | 0.012 | 14/20 | | 4 | DepthwiseConv2D | 48.70 | 0.053 | 0.001 | 18/20 | | 5 | ApplyRotaryPosEmb | 50.06 | 0.090 | 0.010 | 18/20 | | 6 | GQA | 51.84 | 0.048 | 0.009 | 20/20 | | 7 | MLA | 51.88 | 0.049 | 0.005 | 20/20 | | 8 | MHA | 52.20 | 0.062 | 0.014 | 20/20 | | 9 | GroupedMatmulSwigluQuant | 53.48 | 0.088 | 0.011 | 20/20 | | 10 | Gather | 54.35 | 0.212 | 0.007 | 20/20 | | 11 | Cummin | 55.12 | 0.132 | 0.008 | 20/20 | | 12 | QuantMatmul | 56.06 | 0.218 | 0.074 | 20/20 | | 13 | AddRmsNormDynamicQuant | 56.88 | 0.254 | 0.042 | 19/20 | | 14 | TopK | 57.40 | 0.211 | 0.012 | 20/20 | | 15 | Transpose | 65.16 | 0.537 | 0.039 | 20/20 | | 16 | DequantSwigluQuant | 65.84 | 0.559 | 0.082 | 20/20 | | 17 | Softmax | 67.51 | 1.428 | 0.096 | 19/20 | | 18 | ForeachAddcdivScalar | 84.13 | 1.693 | 0.534 | 20/20 | **分数 = 0.2·编译 + 0.3·功能 + 0.5·性能(×100)。** 只要 20/20 全通过,就已拿到 20(编译)+ 30(功能)= **50 分底线**;超过 50 的部分是性能项。因此低分算子分两类失效模式: - **功能受限**(未拿满 30 分底线):WeightQuant(9/20)、Conv3D 与 GroupedMatmul(14/20)、Depthwise 与 ApplyRotary(18/20)、AddRmsNorm 与 Softmax(19/20)。 - **性能受限**(全通过但 avg_speedup ≪ 1):注意力/矩阵乘簇(GQA/MLA/MHA/GroupedMatmul,约 0.05–0.10)与 Conv(0.007)。 ### Ascend C算子未来优化计划(持续更新cann-bench提交) **第一步,提升正确性。** 功能分(每算子最高 30 分)的获取成本低于性能优化,应优先补齐未通过用例:WeightQuant 当前仅通过 9/20,主要受限于 int4/int8 反量化的精度与边界值处理;Conv3D 与 GroupedMatmul 各通过 14/20;Depthwise、ApplyRotary、AddRmsNorm、Softmax 仅一至两个用例未过。与此同时需消除 no-NPU-perf 抖动,确保每个用例都执行可被 profiler 采集的 NPU 算子,避免个别用例缺失计时而导致整个算子被反作弊清零。 **第二步,为矩阵乘与注意力类算子实现一个可复用的 cube(Mmad)分块 GEMM 核**(L1→L0A/L0B→Mmad→L0C,配合双缓冲)。这类算子目前运行在标量/向量单元上,加速比仅 0.05–0.22:QuantMatmul 0.218、GroupedMatmul 与 GroupedMatmulSwigluQuant 0.09、MHA/MLA/GQA 0.05–0.06、Conv3D 0.007(采用 im2col+cube)。该核预计需数小时开发,但可同时带动上述多个算子的性能。 **第三步,进一步优化当前最高分算子 Foreach**(84.13,已超过参考实现)。其瓶颈集中于大张量用例(4/5/9/20,加速比接近 1×),可通过增大 TILE、引入三级缓冲改善数据搬运重叠,或将 Div+Muls+Add 融合为 Div+Axpy 两步来提升。由于该算子分值最高,即使 5% 的提升对总分的贡献也高于修复一个 0.05 的落后算子。 **Transpose(0.537)与 Cummin(0.132)已接近 c220 的性能上限,建议置于最后或暂缓。** 二者剩余的低速用例——transpose 的 int8/int64 与 A 维极小场景、cummin 的单核长扫描——均受硬件限制:c220 不具备 MicroAPI/RegTensor,厂商基于寄存器的 Sklansky 前缀扫描与 int8/int64 硬件转置在此均不可用;已实现并验证正确的两级 block-scan 在 910c 上无净收益。 # Triton-Ascend 优化结果 ### KernelBench L1 AutoResearch 批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:27.2h(12 op × 50 轮 max,per-op 240min wall-clock cap,--eval-timeout 600s) 状态:8 done / 4 error;batch.log 输出 done : 8 (median 1.43x, best 6.80x, worst 0.29x) ### 结果总表(精度均全部通过) | Level | Problem ID | 算子名称 | 验收类型 | PyTorch 性能(μs) | triton 性能(μs) | triton 优化后性能(μs) | 加速比(无工作流直接生成triton代码) | 加速比(AutoResearch初始生成) | 加速比(AutoResearch优化后) | 轮数 | 状态 | |---|---|---|---|---:|---:|---:|---:|---:|---:|---:|---| | 1 | 36 | RMSNorm | VECTOR | 30,043.1 | timeout | 12,310.6 | 0.03x | — | **2.44x** | 26/50 | error (240min cap) | | 1 | 42 | Max_Pooling_2D | VECTOR | 38,458.2 | 3,344,552.8 | 1,737,993.3 | — | 0.011x | **0.022x** | 33/50 | error (240min cap) | | 1 | 44 | Average_Pooling_1D | VECTOR | 20,584.3 | timeout | 12,235.3 | — | — | **1.68x** | 30/30 | done | | 1 | 45 | Average_Pooling_2D | VECTOR | 3,515,948.4 | 2,745,268.0 | 54,680.1 | — | 1.28x | **64.30x** | 40/50 | error (240min cap) | | 1 | 49 | Max_reduction_over_a_dimension | VECTOR | 21,639.9 | 16,499.2 | 6,961.1 | 0.49x | 1.31x | **3.11x** | 50/50 | done | | 1 | 51 | Argmax_over_a_dimension | VECTOR | 21,642.5 | 40,132.3 | 28,674.7 | — | 0.54x | **0.75x** | 50/50 | done | | 1 | 89 | cumsum | VECTOR | 75,221.2 | 706,479.1 | 22,177.0 | 0.22x | 0.11x | **3.39x** | 50/50 | done | | 1 | 93 | masked_cumsum | VECTOR | 90,032.7 | 716,425.3 | 18,959.6 | — | 0.13x | **4.75x** | 14/50 | error (API socket drop) | | 1 | 4 | Matrix_vector_multiplication | CUBE | 34,602.9 | 7,055.8 | 5,089.7 | 0.16x | 4.90x | **6.80x** | 50/50 | done | | 1 | 10 | 3D_tensor_matrix_multiplication | CUBE | 643.6 | 2,139.5 | 743.3 | 0.74x | 0.30x | **0.87x** | 50/50 | done | | 1 | 14 | Matmul_for_upper_triangular_matrices | CUBE | 1,800.5 | 6,464.0 | 1,525.3 | 0.25x | 0.28x | **1.18x** | 50/50 | done | | 1 | 15 | Matmul_for_lower_triangular_matrices | CUBE | 1,795.9 | 6,186.5 | 6,161.8 | 0.01x | 0.29x | **0.29x** | 50/50 | done | ### NPUKernelBench AutoResearch 较难算子批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:30.6h(11 个 op × 50 轮 max,per-op 240min wall-clock cap) #### 结果总表 | Level | Problem ID | 算子名称 | 算子类型 | 基线性能(us) | 初始triton性能(us) | 无工作流直接生成(us) | 加速比 (AutoResearch初始生成) | 加速比(AutoResearch优化后) | 精度通过率 | |---|---|---|---|---|---|---|---|---|---| | 1 | 18 | Index | vector | 89.30 | 741.19 | 700.85 | 0.12x | 0.13x | 41/41 | | 1 | 23 | RepeatInterleave | vector | 137.32 | 1969.94 | 584.05 | 0.07x | 0.24x | 75/75 | | 1 | 24 | EmbeddingDenseBackward | vector | 2227.56 | 3007.04 | 2894.63 | 0.74x | 0.77x | 30/30 | | 1 | 26 | AvgPool3d | vector | 242.78 | 1982.52 | 1267.77 | 0.12x | 0.19x | 72/72 | | 1 | 31 | IOU | vector | 656.20 | 410.17 | 363.18 | 1.60x | 1.81x | 30/30 | | 2 | 1 | RotaryMul | vector | 189.67 | 451.12 | 419.51 | 0.42x | 0.45x | 50/50 | | 2 | 5 | MoeInitRouting | vector | 484.86 | 932.58 | 927.20 | 0.52x | 0.52x | 53/53 | | 2 | 9 | TopKTopP | vector | 8905.87 | 8982.35 | 8927.97 | 0.99x | 1.00x | 50/50 | | 2 | 17 | EmbeddingWithInitialLayernormBackward | vector | 2353.81 | 2292.43 | 2282.59 | 1.03x | 1.03x | 57/57 | | 2 | 18 | FusedAddRmsnorm | vector | 485.82 | 369.37 | 201.61 | 1.32x | 2.41x | 50/50 | | 2 | 23 | HyenaFftSizePaddingRfft | vector | 941.73 | 622.61 | 517.08 | 1.51x | 1.82x | 49/49 | ## 字段说明 - **基线性能**:PyTorch F.X(...) ref 在 NPU 上跑出的延迟,单位 μs - **triton 性能**:手写 triton seed kernel 跑出的延迟(AR 优化前),单位 μs - **triton 优化后性能**:AR 50 轮 EDIT 后最佳 kernel 的延迟,单位 μs - **加速比** = 基线 / triton(>1x 表示 triton 快于 ref)的几何平均 - **加速比(性能优化后)** = 基线 / triton优化后 的几何平均 - **精度通过率** = 通过 allclose 的 case 数 / 总 case 数(per-dtype atol+rtol,fp32 2^-13/1e-5、fp16 2^-10/1e-3、bf16 2^-7/1e-2) #### 特性增强 Enhancements #### 代码清理 Cleanup ## 关联的Issue 无。 ## 测试 - 本地检查插件目录结构,确认 plugins-official/autoresearch 下包含安装脚本、应用代码、qui See merge request: cann/cannbot-skills!653 | 11 天前 | |
在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Co-authored-by: xchang1121<changxiangyu1@huawei.com> # message auto-generated for no-merge-commit merge: !653 merge master into master 在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Created-by: xchang1121 Commit-by: xchang1121 Merged-by: cann-robot Description: ## 描述 #### 新特性 New Features - 【autoresearch】新增 AutoResearch 官方插件。AutoResearch 是基于 Claude Code / Open Code,面向算子优化任务的自动化算子优化工作流项目,负责组织参考实现、候选 kernel、正确性校验、性能评测、远程ssh评测机/本地agent分离调度、批量执行和多轮优化状态管理。支持triton-ascend算子的优化。 - 【autoresearch】安装后以独立项目方式运行,保留原有 slash command、hooks、配置文件、批跑脚本和 worker 连接(使得运行agent端和评测机分离,仅通过ssh连接)方式,用户可以直接创建任务并连接本地或远端 worker 进行评测。 - 【autoresearch】内置 baseline 记录、状态机推进、失败信息提取和 CodeChecker 检查能力,便于跟踪多轮优化中的正确性、性能变化和失败原因。 ## CANN-bench Ascend C VEC算子优化结果: ### 1a. ForeachAddcdivScalar — 分数 84.13,平均加速比 **1.693**(19/20 用例超过参考) | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 1.570 | 23.5 | 36.9 | ok | | 2 | 1.136 | 78.9 | 89.6 | ok | | 3 | 1.243 | 93.1 | 115.8 | ok | | 4 | 1.001 | 890.7 | 892.0 | ok | | 5 | 1.096 | 438.9 | 481.3 | ok | | 6 | 2.480 | 7.5 | 18.7 | ok | | 7 | 2.229 | 11.4 | 25.3 | ok | | 8 | 2.546 | 8.4 | 21.4 | ok | | 9 | 1.163 | 659.9 | 767.6 | ok | | 10 | 2.219 | 10.9 | 24.3 | ok | | 11 | 2.054 | 15.5 | 31.9 | ok | | 12 | 2.120 | 10.8 | 23.0 | ok | | 13 | 1.567 | 51.6 | 80.8 | ok | | 14 | 1.527 | 28.3 | 43.2 | ok | | 15 | 1.590 | 22.6 | 36.0 | ok | | 16 | 1.389 | 51.4 | 71.4 | ok | | 17 | 2.338 | 12.1 | 28.2 | ok | | 18 | 1.374 | 43.6 | 59.9 | ok | | 19 | 2.322 | 12.0 | 28.0 | ok | | 20 | 0.895 | 118.1 | 105.7 | ok | 小张量(6/7/8/10/11/12/17/19)达到参考的 2–2.5×;大张量(4/5/9/20)卡在带宽墙(~1.0×)。仅用例 20 <1。 ### 1b. Cummin — 分数 55.10,平均加速比 **0.132**(访存受限的扫描) | 用例 | 形状(dtype,dim) | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---|---| | 1 | [1024,1024] f16 −1 | 0.048 | 227.0 | 10.9 | ok | | 2 | [2048,2048] f32 −1 | 0.188 | 464.2 | 87.4 | ok | | 3 | [4096,4096] bf16 −1 | 0.308 | 1088.6 | 335.5 | ok | | 4 | [8192,8192] i32 −1 | 0.326 | 4461.5 | 1454.0 | ok | | 5 | [16384,16384] f16 0 | 0.172 | 18178.5 | 3131.8 | ok | | 6 | [8192,8192] f32 1 | 0.306 | 4754.7 | 1454.0 | ok | | 7 | [1023,1023] bf16 −1 | 0.067 | 259.4 | 17.4 | ok | | 8 | [1009,1021] f16 0 | 0.038 | 278.9 | 10.7 | ok | | 9 | [1537,769] f32 −1 | 0.097 | 253.3 | 24.6 | ok | | 10 | [363,367,373] bf16 1 | 0.278 | 2680.0 | 745.4 | ok | | 11 | [2049,513] f16 −1 | 0.058 | 189.3 | 10.9 | ok | | 12 | [3,7,13,4001] f32 −1 | 0.035 | 654.1 | 22.8 | ok | | 13 | [1000003] bf16 −1 | 0.001 | 24235.7 | 33.3 | ok | | 14 | [11,13,17,67,67] f16 2 | 0.009 | 12046.3 | 113.7 | ok | | 15 | [3,7,11,13,1013] i32 −1 | 0.170 | 373.6 | 63.4 | ok | | 16 | [512,2049] f32 −1 | 0.057 | 383.5 | 21.9 | ok | | 17 | [255,8193] bf16 0 | 0.119 | 234.8 | 27.9 | ok | | 18 | [4097,511] f16 −1 | 0.099 | 220.3 | 21.8 | ok | | 19 | [2,511,2049] f32 1 | 0.154 | 283.9 | 43.6 | ok | | 20 | [4,255,2049] bf16 −1 | 0.100 | 420.0 | 41.8 | ok | 最差:用例 13(单条 1M 通道的一维扫描,仅一个核,0.001)与用例 14(nan/精确标量路径,0.009)。中等 1M 用例(1/7/8/11/12/16)延迟受限,处于 0.03–0.07。 ### 1c. Transpose — 分数 65.16,平均加速比 **0.537** | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 0.021 | 507.5 | 10.9 | ok | | 2 | 1.122 | 35.9 | 40.3 | ok | | 3 | 0.876 | 80.7 | 70.6 | ok | | 4 | 0.528 | 1051.0 | 555.0 | ok | | 5 | 0.062 | 13211.9 | 814.9 | ok | | 6 | 0.099 | 124.2 | 12.3 | ok | | 7 | 0.573 | 19.0 | 10.9 | ok | | 8 | 0.706 | 30.5 | 21.5 | ok | | 9 | 0.625 | 19.7 | 12.3 | ok | | 10 | 1.008 | 646.2 | 651.3 | ok | | 11 | 0.555 | 19.6 | 10.9 | ok | | 12 | 0.672 | 33.9 | 22.8 | ok | | 13 | 0.601 | 16.6 | 10.0 | ok | | 14 | 0.852 | 24.4 | 20.8 | ok | | 15 | 0.428 | 265.9 | 113.7 | ok | | 16 | 0.067 | 1403.6 | 94.6 | ok | | 17 | 0.922 | 23.7 | 21.9 | ok | | 18 | 0.877 | 24.9 | 21.8 | ok | | 19 | 0.014 | 797.3 | 10.9 | ok | | 20 | 0.138 | 158.0 | 21.8 | ok | 多数用例处于参考的 0.5–1.1×。较慢:用例 1、19(0.02,int64/大规模全交换),用例 5(0.06,268 MB int64),用例 16(0.07),用例 6(0.10,A 维极小),用例 20(0.14)。 ## 2. CANN-bench Ascend C 18 个算子逐算子最佳加速比(仅标准 20 用例评测) 按分数从低到高排序。 avg_speedup = 相对官方参考的逐用例加速比均值。 | # | 算子 | 最佳分数 | avg_speedup(vs 参考) | vs_hw | 通过 | |---|---|---|---|---|---| | 1 | WeightQuantBatchMatmul | 33.06 | 0.091 | 0.017 | 9/20 | | 2 | Conv3DBackpropFilter | 36.21 | 0.007 | 0.001 | 14/20 | | 3 | GroupedMatmul | 43.70 | 0.101 | 0.012 | 14/20 | | 4 | DepthwiseConv2D | 48.70 | 0.053 | 0.001 | 18/20 | | 5 | ApplyRotaryPosEmb | 50.06 | 0.090 | 0.010 | 18/20 | | 6 | GQA | 51.84 | 0.048 | 0.009 | 20/20 | | 7 | MLA | 51.88 | 0.049 | 0.005 | 20/20 | | 8 | MHA | 52.20 | 0.062 | 0.014 | 20/20 | | 9 | GroupedMatmulSwigluQuant | 53.48 | 0.088 | 0.011 | 20/20 | | 10 | Gather | 54.35 | 0.212 | 0.007 | 20/20 | | 11 | Cummin | 55.12 | 0.132 | 0.008 | 20/20 | | 12 | QuantMatmul | 56.06 | 0.218 | 0.074 | 20/20 | | 13 | AddRmsNormDynamicQuant | 56.88 | 0.254 | 0.042 | 19/20 | | 14 | TopK | 57.40 | 0.211 | 0.012 | 20/20 | | 15 | Transpose | 65.16 | 0.537 | 0.039 | 20/20 | | 16 | DequantSwigluQuant | 65.84 | 0.559 | 0.082 | 20/20 | | 17 | Softmax | 67.51 | 1.428 | 0.096 | 19/20 | | 18 | ForeachAddcdivScalar | 84.13 | 1.693 | 0.534 | 20/20 | **分数 = 0.2·编译 + 0.3·功能 + 0.5·性能(×100)。** 只要 20/20 全通过,就已拿到 20(编译)+ 30(功能)= **50 分底线**;超过 50 的部分是性能项。因此低分算子分两类失效模式: - **功能受限**(未拿满 30 分底线):WeightQuant(9/20)、Conv3D 与 GroupedMatmul(14/20)、Depthwise 与 ApplyRotary(18/20)、AddRmsNorm 与 Softmax(19/20)。 - **性能受限**(全通过但 avg_speedup ≪ 1):注意力/矩阵乘簇(GQA/MLA/MHA/GroupedMatmul,约 0.05–0.10)与 Conv(0.007)。 ### Ascend C算子未来优化计划(持续更新cann-bench提交) **第一步,提升正确性。** 功能分(每算子最高 30 分)的获取成本低于性能优化,应优先补齐未通过用例:WeightQuant 当前仅通过 9/20,主要受限于 int4/int8 反量化的精度与边界值处理;Conv3D 与 GroupedMatmul 各通过 14/20;Depthwise、ApplyRotary、AddRmsNorm、Softmax 仅一至两个用例未过。与此同时需消除 no-NPU-perf 抖动,确保每个用例都执行可被 profiler 采集的 NPU 算子,避免个别用例缺失计时而导致整个算子被反作弊清零。 **第二步,为矩阵乘与注意力类算子实现一个可复用的 cube(Mmad)分块 GEMM 核**(L1→L0A/L0B→Mmad→L0C,配合双缓冲)。这类算子目前运行在标量/向量单元上,加速比仅 0.05–0.22:QuantMatmul 0.218、GroupedMatmul 与 GroupedMatmulSwigluQuant 0.09、MHA/MLA/GQA 0.05–0.06、Conv3D 0.007(采用 im2col+cube)。该核预计需数小时开发,但可同时带动上述多个算子的性能。 **第三步,进一步优化当前最高分算子 Foreach**(84.13,已超过参考实现)。其瓶颈集中于大张量用例(4/5/9/20,加速比接近 1×),可通过增大 TILE、引入三级缓冲改善数据搬运重叠,或将 Div+Muls+Add 融合为 Div+Axpy 两步来提升。由于该算子分值最高,即使 5% 的提升对总分的贡献也高于修复一个 0.05 的落后算子。 **Transpose(0.537)与 Cummin(0.132)已接近 c220 的性能上限,建议置于最后或暂缓。** 二者剩余的低速用例——transpose 的 int8/int64 与 A 维极小场景、cummin 的单核长扫描——均受硬件限制:c220 不具备 MicroAPI/RegTensor,厂商基于寄存器的 Sklansky 前缀扫描与 int8/int64 硬件转置在此均不可用;已实现并验证正确的两级 block-scan 在 910c 上无净收益。 # Triton-Ascend 优化结果 ### KernelBench L1 AutoResearch 批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:27.2h(12 op × 50 轮 max,per-op 240min wall-clock cap,--eval-timeout 600s) 状态:8 done / 4 error;batch.log 输出 done : 8 (median 1.43x, best 6.80x, worst 0.29x) ### 结果总表(精度均全部通过) | Level | Problem ID | 算子名称 | 验收类型 | PyTorch 性能(μs) | triton 性能(μs) | triton 优化后性能(μs) | 加速比(无工作流直接生成triton代码) | 加速比(AutoResearch初始生成) | 加速比(AutoResearch优化后) | 轮数 | 状态 | |---|---|---|---|---:|---:|---:|---:|---:|---:|---:|---| | 1 | 36 | RMSNorm | VECTOR | 30,043.1 | timeout | 12,310.6 | 0.03x | — | **2.44x** | 26/50 | error (240min cap) | | 1 | 42 | Max_Pooling_2D | VECTOR | 38,458.2 | 3,344,552.8 | 1,737,993.3 | — | 0.011x | **0.022x** | 33/50 | error (240min cap) | | 1 | 44 | Average_Pooling_1D | VECTOR | 20,584.3 | timeout | 12,235.3 | — | — | **1.68x** | 30/30 | done | | 1 | 45 | Average_Pooling_2D | VECTOR | 3,515,948.4 | 2,745,268.0 | 54,680.1 | — | 1.28x | **64.30x** | 40/50 | error (240min cap) | | 1 | 49 | Max_reduction_over_a_dimension | VECTOR | 21,639.9 | 16,499.2 | 6,961.1 | 0.49x | 1.31x | **3.11x** | 50/50 | done | | 1 | 51 | Argmax_over_a_dimension | VECTOR | 21,642.5 | 40,132.3 | 28,674.7 | — | 0.54x | **0.75x** | 50/50 | done | | 1 | 89 | cumsum | VECTOR | 75,221.2 | 706,479.1 | 22,177.0 | 0.22x | 0.11x | **3.39x** | 50/50 | done | | 1 | 93 | masked_cumsum | VECTOR | 90,032.7 | 716,425.3 | 18,959.6 | — | 0.13x | **4.75x** | 14/50 | error (API socket drop) | | 1 | 4 | Matrix_vector_multiplication | CUBE | 34,602.9 | 7,055.8 | 5,089.7 | 0.16x | 4.90x | **6.80x** | 50/50 | done | | 1 | 10 | 3D_tensor_matrix_multiplication | CUBE | 643.6 | 2,139.5 | 743.3 | 0.74x | 0.30x | **0.87x** | 50/50 | done | | 1 | 14 | Matmul_for_upper_triangular_matrices | CUBE | 1,800.5 | 6,464.0 | 1,525.3 | 0.25x | 0.28x | **1.18x** | 50/50 | done | | 1 | 15 | Matmul_for_lower_triangular_matrices | CUBE | 1,795.9 | 6,186.5 | 6,161.8 | 0.01x | 0.29x | **0.29x** | 50/50 | done | ### NPUKernelBench AutoResearch 较难算子批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:30.6h(11 个 op × 50 轮 max,per-op 240min wall-clock cap) #### 结果总表 | Level | Problem ID | 算子名称 | 算子类型 | 基线性能(us) | 初始triton性能(us) | 无工作流直接生成(us) | 加速比 (AutoResearch初始生成) | 加速比(AutoResearch优化后) | 精度通过率 | |---|---|---|---|---|---|---|---|---|---| | 1 | 18 | Index | vector | 89.30 | 741.19 | 700.85 | 0.12x | 0.13x | 41/41 | | 1 | 23 | RepeatInterleave | vector | 137.32 | 1969.94 | 584.05 | 0.07x | 0.24x | 75/75 | | 1 | 24 | EmbeddingDenseBackward | vector | 2227.56 | 3007.04 | 2894.63 | 0.74x | 0.77x | 30/30 | | 1 | 26 | AvgPool3d | vector | 242.78 | 1982.52 | 1267.77 | 0.12x | 0.19x | 72/72 | | 1 | 31 | IOU | vector | 656.20 | 410.17 | 363.18 | 1.60x | 1.81x | 30/30 | | 2 | 1 | RotaryMul | vector | 189.67 | 451.12 | 419.51 | 0.42x | 0.45x | 50/50 | | 2 | 5 | MoeInitRouting | vector | 484.86 | 932.58 | 927.20 | 0.52x | 0.52x | 53/53 | | 2 | 9 | TopKTopP | vector | 8905.87 | 8982.35 | 8927.97 | 0.99x | 1.00x | 50/50 | | 2 | 17 | EmbeddingWithInitialLayernormBackward | vector | 2353.81 | 2292.43 | 2282.59 | 1.03x | 1.03x | 57/57 | | 2 | 18 | FusedAddRmsnorm | vector | 485.82 | 369.37 | 201.61 | 1.32x | 2.41x | 50/50 | | 2 | 23 | HyenaFftSizePaddingRfft | vector | 941.73 | 622.61 | 517.08 | 1.51x | 1.82x | 49/49 | ## 字段说明 - **基线性能**:PyTorch F.X(...) ref 在 NPU 上跑出的延迟,单位 μs - **triton 性能**:手写 triton seed kernel 跑出的延迟(AR 优化前),单位 μs - **triton 优化后性能**:AR 50 轮 EDIT 后最佳 kernel 的延迟,单位 μs - **加速比** = 基线 / triton(>1x 表示 triton 快于 ref)的几何平均 - **加速比(性能优化后)** = 基线 / triton优化后 的几何平均 - **精度通过率** = 通过 allclose 的 case 数 / 总 case 数(per-dtype atol+rtol,fp32 2^-13/1e-5、fp16 2^-10/1e-3、bf16 2^-7/1e-2) #### 特性增强 Enhancements #### 代码清理 Cleanup ## 关联的Issue 无。 ## 测试 - 本地检查插件目录结构,确认 plugins-official/autoresearch 下包含安装脚本、应用代码、qui See merge request: cann/cannbot-skills!653 | 11 天前 | |
在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Co-authored-by: xchang1121<changxiangyu1@huawei.com> # message auto-generated for no-merge-commit merge: !653 merge master into master 在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Created-by: xchang1121 Commit-by: xchang1121 Merged-by: cann-robot Description: ## 描述 #### 新特性 New Features - 【autoresearch】新增 AutoResearch 官方插件。AutoResearch 是基于 Claude Code / Open Code,面向算子优化任务的自动化算子优化工作流项目,负责组织参考实现、候选 kernel、正确性校验、性能评测、远程ssh评测机/本地agent分离调度、批量执行和多轮优化状态管理。支持triton-ascend算子的优化。 - 【autoresearch】安装后以独立项目方式运行,保留原有 slash command、hooks、配置文件、批跑脚本和 worker 连接(使得运行agent端和评测机分离,仅通过ssh连接)方式,用户可以直接创建任务并连接本地或远端 worker 进行评测。 - 【autoresearch】内置 baseline 记录、状态机推进、失败信息提取和 CodeChecker 检查能力,便于跟踪多轮优化中的正确性、性能变化和失败原因。 ## CANN-bench Ascend C VEC算子优化结果: ### 1a. ForeachAddcdivScalar — 分数 84.13,平均加速比 **1.693**(19/20 用例超过参考) | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 1.570 | 23.5 | 36.9 | ok | | 2 | 1.136 | 78.9 | 89.6 | ok | | 3 | 1.243 | 93.1 | 115.8 | ok | | 4 | 1.001 | 890.7 | 892.0 | ok | | 5 | 1.096 | 438.9 | 481.3 | ok | | 6 | 2.480 | 7.5 | 18.7 | ok | | 7 | 2.229 | 11.4 | 25.3 | ok | | 8 | 2.546 | 8.4 | 21.4 | ok | | 9 | 1.163 | 659.9 | 767.6 | ok | | 10 | 2.219 | 10.9 | 24.3 | ok | | 11 | 2.054 | 15.5 | 31.9 | ok | | 12 | 2.120 | 10.8 | 23.0 | ok | | 13 | 1.567 | 51.6 | 80.8 | ok | | 14 | 1.527 | 28.3 | 43.2 | ok | | 15 | 1.590 | 22.6 | 36.0 | ok | | 16 | 1.389 | 51.4 | 71.4 | ok | | 17 | 2.338 | 12.1 | 28.2 | ok | | 18 | 1.374 | 43.6 | 59.9 | ok | | 19 | 2.322 | 12.0 | 28.0 | ok | | 20 | 0.895 | 118.1 | 105.7 | ok | 小张量(6/7/8/10/11/12/17/19)达到参考的 2–2.5×;大张量(4/5/9/20)卡在带宽墙(~1.0×)。仅用例 20 <1。 ### 1b. Cummin — 分数 55.10,平均加速比 **0.132**(访存受限的扫描) | 用例 | 形状(dtype,dim) | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---|---| | 1 | [1024,1024] f16 −1 | 0.048 | 227.0 | 10.9 | ok | | 2 | [2048,2048] f32 −1 | 0.188 | 464.2 | 87.4 | ok | | 3 | [4096,4096] bf16 −1 | 0.308 | 1088.6 | 335.5 | ok | | 4 | [8192,8192] i32 −1 | 0.326 | 4461.5 | 1454.0 | ok | | 5 | [16384,16384] f16 0 | 0.172 | 18178.5 | 3131.8 | ok | | 6 | [8192,8192] f32 1 | 0.306 | 4754.7 | 1454.0 | ok | | 7 | [1023,1023] bf16 −1 | 0.067 | 259.4 | 17.4 | ok | | 8 | [1009,1021] f16 0 | 0.038 | 278.9 | 10.7 | ok | | 9 | [1537,769] f32 −1 | 0.097 | 253.3 | 24.6 | ok | | 10 | [363,367,373] bf16 1 | 0.278 | 2680.0 | 745.4 | ok | | 11 | [2049,513] f16 −1 | 0.058 | 189.3 | 10.9 | ok | | 12 | [3,7,13,4001] f32 −1 | 0.035 | 654.1 | 22.8 | ok | | 13 | [1000003] bf16 −1 | 0.001 | 24235.7 | 33.3 | ok | | 14 | [11,13,17,67,67] f16 2 | 0.009 | 12046.3 | 113.7 | ok | | 15 | [3,7,11,13,1013] i32 −1 | 0.170 | 373.6 | 63.4 | ok | | 16 | [512,2049] f32 −1 | 0.057 | 383.5 | 21.9 | ok | | 17 | [255,8193] bf16 0 | 0.119 | 234.8 | 27.9 | ok | | 18 | [4097,511] f16 −1 | 0.099 | 220.3 | 21.8 | ok | | 19 | [2,511,2049] f32 1 | 0.154 | 283.9 | 43.6 | ok | | 20 | [4,255,2049] bf16 −1 | 0.100 | 420.0 | 41.8 | ok | 最差:用例 13(单条 1M 通道的一维扫描,仅一个核,0.001)与用例 14(nan/精确标量路径,0.009)。中等 1M 用例(1/7/8/11/12/16)延迟受限,处于 0.03–0.07。 ### 1c. Transpose — 分数 65.16,平均加速比 **0.537** | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 0.021 | 507.5 | 10.9 | ok | | 2 | 1.122 | 35.9 | 40.3 | ok | | 3 | 0.876 | 80.7 | 70.6 | ok | | 4 | 0.528 | 1051.0 | 555.0 | ok | | 5 | 0.062 | 13211.9 | 814.9 | ok | | 6 | 0.099 | 124.2 | 12.3 | ok | | 7 | 0.573 | 19.0 | 10.9 | ok | | 8 | 0.706 | 30.5 | 21.5 | ok | | 9 | 0.625 | 19.7 | 12.3 | ok | | 10 | 1.008 | 646.2 | 651.3 | ok | | 11 | 0.555 | 19.6 | 10.9 | ok | | 12 | 0.672 | 33.9 | 22.8 | ok | | 13 | 0.601 | 16.6 | 10.0 | ok | | 14 | 0.852 | 24.4 | 20.8 | ok | | 15 | 0.428 | 265.9 | 113.7 | ok | | 16 | 0.067 | 1403.6 | 94.6 | ok | | 17 | 0.922 | 23.7 | 21.9 | ok | | 18 | 0.877 | 24.9 | 21.8 | ok | | 19 | 0.014 | 797.3 | 10.9 | ok | | 20 | 0.138 | 158.0 | 21.8 | ok | 多数用例处于参考的 0.5–1.1×。较慢:用例 1、19(0.02,int64/大规模全交换),用例 5(0.06,268 MB int64),用例 16(0.07),用例 6(0.10,A 维极小),用例 20(0.14)。 ## 2. CANN-bench Ascend C 18 个算子逐算子最佳加速比(仅标准 20 用例评测) 按分数从低到高排序。 avg_speedup = 相对官方参考的逐用例加速比均值。 | # | 算子 | 最佳分数 | avg_speedup(vs 参考) | vs_hw | 通过 | |---|---|---|---|---|---| | 1 | WeightQuantBatchMatmul | 33.06 | 0.091 | 0.017 | 9/20 | | 2 | Conv3DBackpropFilter | 36.21 | 0.007 | 0.001 | 14/20 | | 3 | GroupedMatmul | 43.70 | 0.101 | 0.012 | 14/20 | | 4 | DepthwiseConv2D | 48.70 | 0.053 | 0.001 | 18/20 | | 5 | ApplyRotaryPosEmb | 50.06 | 0.090 | 0.010 | 18/20 | | 6 | GQA | 51.84 | 0.048 | 0.009 | 20/20 | | 7 | MLA | 51.88 | 0.049 | 0.005 | 20/20 | | 8 | MHA | 52.20 | 0.062 | 0.014 | 20/20 | | 9 | GroupedMatmulSwigluQuant | 53.48 | 0.088 | 0.011 | 20/20 | | 10 | Gather | 54.35 | 0.212 | 0.007 | 20/20 | | 11 | Cummin | 55.12 | 0.132 | 0.008 | 20/20 | | 12 | QuantMatmul | 56.06 | 0.218 | 0.074 | 20/20 | | 13 | AddRmsNormDynamicQuant | 56.88 | 0.254 | 0.042 | 19/20 | | 14 | TopK | 57.40 | 0.211 | 0.012 | 20/20 | | 15 | Transpose | 65.16 | 0.537 | 0.039 | 20/20 | | 16 | DequantSwigluQuant | 65.84 | 0.559 | 0.082 | 20/20 | | 17 | Softmax | 67.51 | 1.428 | 0.096 | 19/20 | | 18 | ForeachAddcdivScalar | 84.13 | 1.693 | 0.534 | 20/20 | **分数 = 0.2·编译 + 0.3·功能 + 0.5·性能(×100)。** 只要 20/20 全通过,就已拿到 20(编译)+ 30(功能)= **50 分底线**;超过 50 的部分是性能项。因此低分算子分两类失效模式: - **功能受限**(未拿满 30 分底线):WeightQuant(9/20)、Conv3D 与 GroupedMatmul(14/20)、Depthwise 与 ApplyRotary(18/20)、AddRmsNorm 与 Softmax(19/20)。 - **性能受限**(全通过但 avg_speedup ≪ 1):注意力/矩阵乘簇(GQA/MLA/MHA/GroupedMatmul,约 0.05–0.10)与 Conv(0.007)。 ### Ascend C算子未来优化计划(持续更新cann-bench提交) **第一步,提升正确性。** 功能分(每算子最高 30 分)的获取成本低于性能优化,应优先补齐未通过用例:WeightQuant 当前仅通过 9/20,主要受限于 int4/int8 反量化的精度与边界值处理;Conv3D 与 GroupedMatmul 各通过 14/20;Depthwise、ApplyRotary、AddRmsNorm、Softmax 仅一至两个用例未过。与此同时需消除 no-NPU-perf 抖动,确保每个用例都执行可被 profiler 采集的 NPU 算子,避免个别用例缺失计时而导致整个算子被反作弊清零。 **第二步,为矩阵乘与注意力类算子实现一个可复用的 cube(Mmad)分块 GEMM 核**(L1→L0A/L0B→Mmad→L0C,配合双缓冲)。这类算子目前运行在标量/向量单元上,加速比仅 0.05–0.22:QuantMatmul 0.218、GroupedMatmul 与 GroupedMatmulSwigluQuant 0.09、MHA/MLA/GQA 0.05–0.06、Conv3D 0.007(采用 im2col+cube)。该核预计需数小时开发,但可同时带动上述多个算子的性能。 **第三步,进一步优化当前最高分算子 Foreach**(84.13,已超过参考实现)。其瓶颈集中于大张量用例(4/5/9/20,加速比接近 1×),可通过增大 TILE、引入三级缓冲改善数据搬运重叠,或将 Div+Muls+Add 融合为 Div+Axpy 两步来提升。由于该算子分值最高,即使 5% 的提升对总分的贡献也高于修复一个 0.05 的落后算子。 **Transpose(0.537)与 Cummin(0.132)已接近 c220 的性能上限,建议置于最后或暂缓。** 二者剩余的低速用例——transpose 的 int8/int64 与 A 维极小场景、cummin 的单核长扫描——均受硬件限制:c220 不具备 MicroAPI/RegTensor,厂商基于寄存器的 Sklansky 前缀扫描与 int8/int64 硬件转置在此均不可用;已实现并验证正确的两级 block-scan 在 910c 上无净收益。 # Triton-Ascend 优化结果 ### KernelBench L1 AutoResearch 批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:27.2h(12 op × 50 轮 max,per-op 240min wall-clock cap,--eval-timeout 600s) 状态:8 done / 4 error;batch.log 输出 done : 8 (median 1.43x, best 6.80x, worst 0.29x) ### 结果总表(精度均全部通过) | Level | Problem ID | 算子名称 | 验收类型 | PyTorch 性能(μs) | triton 性能(μs) | triton 优化后性能(μs) | 加速比(无工作流直接生成triton代码) | 加速比(AutoResearch初始生成) | 加速比(AutoResearch优化后) | 轮数 | 状态 | |---|---|---|---|---:|---:|---:|---:|---:|---:|---:|---| | 1 | 36 | RMSNorm | VECTOR | 30,043.1 | timeout | 12,310.6 | 0.03x | — | **2.44x** | 26/50 | error (240min cap) | | 1 | 42 | Max_Pooling_2D | VECTOR | 38,458.2 | 3,344,552.8 | 1,737,993.3 | — | 0.011x | **0.022x** | 33/50 | error (240min cap) | | 1 | 44 | Average_Pooling_1D | VECTOR | 20,584.3 | timeout | 12,235.3 | — | — | **1.68x** | 30/30 | done | | 1 | 45 | Average_Pooling_2D | VECTOR | 3,515,948.4 | 2,745,268.0 | 54,680.1 | — | 1.28x | **64.30x** | 40/50 | error (240min cap) | | 1 | 49 | Max_reduction_over_a_dimension | VECTOR | 21,639.9 | 16,499.2 | 6,961.1 | 0.49x | 1.31x | **3.11x** | 50/50 | done | | 1 | 51 | Argmax_over_a_dimension | VECTOR | 21,642.5 | 40,132.3 | 28,674.7 | — | 0.54x | **0.75x** | 50/50 | done | | 1 | 89 | cumsum | VECTOR | 75,221.2 | 706,479.1 | 22,177.0 | 0.22x | 0.11x | **3.39x** | 50/50 | done | | 1 | 93 | masked_cumsum | VECTOR | 90,032.7 | 716,425.3 | 18,959.6 | — | 0.13x | **4.75x** | 14/50 | error (API socket drop) | | 1 | 4 | Matrix_vector_multiplication | CUBE | 34,602.9 | 7,055.8 | 5,089.7 | 0.16x | 4.90x | **6.80x** | 50/50 | done | | 1 | 10 | 3D_tensor_matrix_multiplication | CUBE | 643.6 | 2,139.5 | 743.3 | 0.74x | 0.30x | **0.87x** | 50/50 | done | | 1 | 14 | Matmul_for_upper_triangular_matrices | CUBE | 1,800.5 | 6,464.0 | 1,525.3 | 0.25x | 0.28x | **1.18x** | 50/50 | done | | 1 | 15 | Matmul_for_lower_triangular_matrices | CUBE | 1,795.9 | 6,186.5 | 6,161.8 | 0.01x | 0.29x | **0.29x** | 50/50 | done | ### NPUKernelBench AutoResearch 较难算子批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:30.6h(11 个 op × 50 轮 max,per-op 240min wall-clock cap) #### 结果总表 | Level | Problem ID | 算子名称 | 算子类型 | 基线性能(us) | 初始triton性能(us) | 无工作流直接生成(us) | 加速比 (AutoResearch初始生成) | 加速比(AutoResearch优化后) | 精度通过率 | |---|---|---|---|---|---|---|---|---|---| | 1 | 18 | Index | vector | 89.30 | 741.19 | 700.85 | 0.12x | 0.13x | 41/41 | | 1 | 23 | RepeatInterleave | vector | 137.32 | 1969.94 | 584.05 | 0.07x | 0.24x | 75/75 | | 1 | 24 | EmbeddingDenseBackward | vector | 2227.56 | 3007.04 | 2894.63 | 0.74x | 0.77x | 30/30 | | 1 | 26 | AvgPool3d | vector | 242.78 | 1982.52 | 1267.77 | 0.12x | 0.19x | 72/72 | | 1 | 31 | IOU | vector | 656.20 | 410.17 | 363.18 | 1.60x | 1.81x | 30/30 | | 2 | 1 | RotaryMul | vector | 189.67 | 451.12 | 419.51 | 0.42x | 0.45x | 50/50 | | 2 | 5 | MoeInitRouting | vector | 484.86 | 932.58 | 927.20 | 0.52x | 0.52x | 53/53 | | 2 | 9 | TopKTopP | vector | 8905.87 | 8982.35 | 8927.97 | 0.99x | 1.00x | 50/50 | | 2 | 17 | EmbeddingWithInitialLayernormBackward | vector | 2353.81 | 2292.43 | 2282.59 | 1.03x | 1.03x | 57/57 | | 2 | 18 | FusedAddRmsnorm | vector | 485.82 | 369.37 | 201.61 | 1.32x | 2.41x | 50/50 | | 2 | 23 | HyenaFftSizePaddingRfft | vector | 941.73 | 622.61 | 517.08 | 1.51x | 1.82x | 49/49 | ## 字段说明 - **基线性能**:PyTorch F.X(...) ref 在 NPU 上跑出的延迟,单位 μs - **triton 性能**:手写 triton seed kernel 跑出的延迟(AR 优化前),单位 μs - **triton 优化后性能**:AR 50 轮 EDIT 后最佳 kernel 的延迟,单位 μs - **加速比** = 基线 / triton(>1x 表示 triton 快于 ref)的几何平均 - **加速比(性能优化后)** = 基线 / triton优化后 的几何平均 - **精度通过率** = 通过 allclose 的 case 数 / 总 case 数(per-dtype atol+rtol,fp32 2^-13/1e-5、fp16 2^-10/1e-3、bf16 2^-7/1e-2) #### 特性增强 Enhancements #### 代码清理 Cleanup ## 关联的Issue 无。 ## 测试 - 本地检查插件目录结构,确认 plugins-official/autoresearch 下包含安装脚本、应用代码、qui See merge request: cann/cannbot-skills!653 | 11 天前 | |
在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Co-authored-by: xchang1121<changxiangyu1@huawei.com> # message auto-generated for no-merge-commit merge: !653 merge master into master 在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Created-by: xchang1121 Commit-by: xchang1121 Merged-by: cann-robot Description: ## 描述 #### 新特性 New Features - 【autoresearch】新增 AutoResearch 官方插件。AutoResearch 是基于 Claude Code / Open Code,面向算子优化任务的自动化算子优化工作流项目,负责组织参考实现、候选 kernel、正确性校验、性能评测、远程ssh评测机/本地agent分离调度、批量执行和多轮优化状态管理。支持triton-ascend算子的优化。 - 【autoresearch】安装后以独立项目方式运行,保留原有 slash command、hooks、配置文件、批跑脚本和 worker 连接(使得运行agent端和评测机分离,仅通过ssh连接)方式,用户可以直接创建任务并连接本地或远端 worker 进行评测。 - 【autoresearch】内置 baseline 记录、状态机推进、失败信息提取和 CodeChecker 检查能力,便于跟踪多轮优化中的正确性、性能变化和失败原因。 ## CANN-bench Ascend C VEC算子优化结果: ### 1a. ForeachAddcdivScalar — 分数 84.13,平均加速比 **1.693**(19/20 用例超过参考) | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 1.570 | 23.5 | 36.9 | ok | | 2 | 1.136 | 78.9 | 89.6 | ok | | 3 | 1.243 | 93.1 | 115.8 | ok | | 4 | 1.001 | 890.7 | 892.0 | ok | | 5 | 1.096 | 438.9 | 481.3 | ok | | 6 | 2.480 | 7.5 | 18.7 | ok | | 7 | 2.229 | 11.4 | 25.3 | ok | | 8 | 2.546 | 8.4 | 21.4 | ok | | 9 | 1.163 | 659.9 | 767.6 | ok | | 10 | 2.219 | 10.9 | 24.3 | ok | | 11 | 2.054 | 15.5 | 31.9 | ok | | 12 | 2.120 | 10.8 | 23.0 | ok | | 13 | 1.567 | 51.6 | 80.8 | ok | | 14 | 1.527 | 28.3 | 43.2 | ok | | 15 | 1.590 | 22.6 | 36.0 | ok | | 16 | 1.389 | 51.4 | 71.4 | ok | | 17 | 2.338 | 12.1 | 28.2 | ok | | 18 | 1.374 | 43.6 | 59.9 | ok | | 19 | 2.322 | 12.0 | 28.0 | ok | | 20 | 0.895 | 118.1 | 105.7 | ok | 小张量(6/7/8/10/11/12/17/19)达到参考的 2–2.5×;大张量(4/5/9/20)卡在带宽墙(~1.0×)。仅用例 20 <1。 ### 1b. Cummin — 分数 55.10,平均加速比 **0.132**(访存受限的扫描) | 用例 | 形状(dtype,dim) | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---|---| | 1 | [1024,1024] f16 −1 | 0.048 | 227.0 | 10.9 | ok | | 2 | [2048,2048] f32 −1 | 0.188 | 464.2 | 87.4 | ok | | 3 | [4096,4096] bf16 −1 | 0.308 | 1088.6 | 335.5 | ok | | 4 | [8192,8192] i32 −1 | 0.326 | 4461.5 | 1454.0 | ok | | 5 | [16384,16384] f16 0 | 0.172 | 18178.5 | 3131.8 | ok | | 6 | [8192,8192] f32 1 | 0.306 | 4754.7 | 1454.0 | ok | | 7 | [1023,1023] bf16 −1 | 0.067 | 259.4 | 17.4 | ok | | 8 | [1009,1021] f16 0 | 0.038 | 278.9 | 10.7 | ok | | 9 | [1537,769] f32 −1 | 0.097 | 253.3 | 24.6 | ok | | 10 | [363,367,373] bf16 1 | 0.278 | 2680.0 | 745.4 | ok | | 11 | [2049,513] f16 −1 | 0.058 | 189.3 | 10.9 | ok | | 12 | [3,7,13,4001] f32 −1 | 0.035 | 654.1 | 22.8 | ok | | 13 | [1000003] bf16 −1 | 0.001 | 24235.7 | 33.3 | ok | | 14 | [11,13,17,67,67] f16 2 | 0.009 | 12046.3 | 113.7 | ok | | 15 | [3,7,11,13,1013] i32 −1 | 0.170 | 373.6 | 63.4 | ok | | 16 | [512,2049] f32 −1 | 0.057 | 383.5 | 21.9 | ok | | 17 | [255,8193] bf16 0 | 0.119 | 234.8 | 27.9 | ok | | 18 | [4097,511] f16 −1 | 0.099 | 220.3 | 21.8 | ok | | 19 | [2,511,2049] f32 1 | 0.154 | 283.9 | 43.6 | ok | | 20 | [4,255,2049] bf16 −1 | 0.100 | 420.0 | 41.8 | ok | 最差:用例 13(单条 1M 通道的一维扫描,仅一个核,0.001)与用例 14(nan/精确标量路径,0.009)。中等 1M 用例(1/7/8/11/12/16)延迟受限,处于 0.03–0.07。 ### 1c. Transpose — 分数 65.16,平均加速比 **0.537** | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 0.021 | 507.5 | 10.9 | ok | | 2 | 1.122 | 35.9 | 40.3 | ok | | 3 | 0.876 | 80.7 | 70.6 | ok | | 4 | 0.528 | 1051.0 | 555.0 | ok | | 5 | 0.062 | 13211.9 | 814.9 | ok | | 6 | 0.099 | 124.2 | 12.3 | ok | | 7 | 0.573 | 19.0 | 10.9 | ok | | 8 | 0.706 | 30.5 | 21.5 | ok | | 9 | 0.625 | 19.7 | 12.3 | ok | | 10 | 1.008 | 646.2 | 651.3 | ok | | 11 | 0.555 | 19.6 | 10.9 | ok | | 12 | 0.672 | 33.9 | 22.8 | ok | | 13 | 0.601 | 16.6 | 10.0 | ok | | 14 | 0.852 | 24.4 | 20.8 | ok | | 15 | 0.428 | 265.9 | 113.7 | ok | | 16 | 0.067 | 1403.6 | 94.6 | ok | | 17 | 0.922 | 23.7 | 21.9 | ok | | 18 | 0.877 | 24.9 | 21.8 | ok | | 19 | 0.014 | 797.3 | 10.9 | ok | | 20 | 0.138 | 158.0 | 21.8 | ok | 多数用例处于参考的 0.5–1.1×。较慢:用例 1、19(0.02,int64/大规模全交换),用例 5(0.06,268 MB int64),用例 16(0.07),用例 6(0.10,A 维极小),用例 20(0.14)。 ## 2. CANN-bench Ascend C 18 个算子逐算子最佳加速比(仅标准 20 用例评测) 按分数从低到高排序。 avg_speedup = 相对官方参考的逐用例加速比均值。 | # | 算子 | 最佳分数 | avg_speedup(vs 参考) | vs_hw | 通过 | |---|---|---|---|---|---| | 1 | WeightQuantBatchMatmul | 33.06 | 0.091 | 0.017 | 9/20 | | 2 | Conv3DBackpropFilter | 36.21 | 0.007 | 0.001 | 14/20 | | 3 | GroupedMatmul | 43.70 | 0.101 | 0.012 | 14/20 | | 4 | DepthwiseConv2D | 48.70 | 0.053 | 0.001 | 18/20 | | 5 | ApplyRotaryPosEmb | 50.06 | 0.090 | 0.010 | 18/20 | | 6 | GQA | 51.84 | 0.048 | 0.009 | 20/20 | | 7 | MLA | 51.88 | 0.049 | 0.005 | 20/20 | | 8 | MHA | 52.20 | 0.062 | 0.014 | 20/20 | | 9 | GroupedMatmulSwigluQuant | 53.48 | 0.088 | 0.011 | 20/20 | | 10 | Gather | 54.35 | 0.212 | 0.007 | 20/20 | | 11 | Cummin | 55.12 | 0.132 | 0.008 | 20/20 | | 12 | QuantMatmul | 56.06 | 0.218 | 0.074 | 20/20 | | 13 | AddRmsNormDynamicQuant | 56.88 | 0.254 | 0.042 | 19/20 | | 14 | TopK | 57.40 | 0.211 | 0.012 | 20/20 | | 15 | Transpose | 65.16 | 0.537 | 0.039 | 20/20 | | 16 | DequantSwigluQuant | 65.84 | 0.559 | 0.082 | 20/20 | | 17 | Softmax | 67.51 | 1.428 | 0.096 | 19/20 | | 18 | ForeachAddcdivScalar | 84.13 | 1.693 | 0.534 | 20/20 | **分数 = 0.2·编译 + 0.3·功能 + 0.5·性能(×100)。** 只要 20/20 全通过,就已拿到 20(编译)+ 30(功能)= **50 分底线**;超过 50 的部分是性能项。因此低分算子分两类失效模式: - **功能受限**(未拿满 30 分底线):WeightQuant(9/20)、Conv3D 与 GroupedMatmul(14/20)、Depthwise 与 ApplyRotary(18/20)、AddRmsNorm 与 Softmax(19/20)。 - **性能受限**(全通过但 avg_speedup ≪ 1):注意力/矩阵乘簇(GQA/MLA/MHA/GroupedMatmul,约 0.05–0.10)与 Conv(0.007)。 ### Ascend C算子未来优化计划(持续更新cann-bench提交) **第一步,提升正确性。** 功能分(每算子最高 30 分)的获取成本低于性能优化,应优先补齐未通过用例:WeightQuant 当前仅通过 9/20,主要受限于 int4/int8 反量化的精度与边界值处理;Conv3D 与 GroupedMatmul 各通过 14/20;Depthwise、ApplyRotary、AddRmsNorm、Softmax 仅一至两个用例未过。与此同时需消除 no-NPU-perf 抖动,确保每个用例都执行可被 profiler 采集的 NPU 算子,避免个别用例缺失计时而导致整个算子被反作弊清零。 **第二步,为矩阵乘与注意力类算子实现一个可复用的 cube(Mmad)分块 GEMM 核**(L1→L0A/L0B→Mmad→L0C,配合双缓冲)。这类算子目前运行在标量/向量单元上,加速比仅 0.05–0.22:QuantMatmul 0.218、GroupedMatmul 与 GroupedMatmulSwigluQuant 0.09、MHA/MLA/GQA 0.05–0.06、Conv3D 0.007(采用 im2col+cube)。该核预计需数小时开发,但可同时带动上述多个算子的性能。 **第三步,进一步优化当前最高分算子 Foreach**(84.13,已超过参考实现)。其瓶颈集中于大张量用例(4/5/9/20,加速比接近 1×),可通过增大 TILE、引入三级缓冲改善数据搬运重叠,或将 Div+Muls+Add 融合为 Div+Axpy 两步来提升。由于该算子分值最高,即使 5% 的提升对总分的贡献也高于修复一个 0.05 的落后算子。 **Transpose(0.537)与 Cummin(0.132)已接近 c220 的性能上限,建议置于最后或暂缓。** 二者剩余的低速用例——transpose 的 int8/int64 与 A 维极小场景、cummin 的单核长扫描——均受硬件限制:c220 不具备 MicroAPI/RegTensor,厂商基于寄存器的 Sklansky 前缀扫描与 int8/int64 硬件转置在此均不可用;已实现并验证正确的两级 block-scan 在 910c 上无净收益。 # Triton-Ascend 优化结果 ### KernelBench L1 AutoResearch 批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:27.2h(12 op × 50 轮 max,per-op 240min wall-clock cap,--eval-timeout 600s) 状态:8 done / 4 error;batch.log 输出 done : 8 (median 1.43x, best 6.80x, worst 0.29x) ### 结果总表(精度均全部通过) | Level | Problem ID | 算子名称 | 验收类型 | PyTorch 性能(μs) | triton 性能(μs) | triton 优化后性能(μs) | 加速比(无工作流直接生成triton代码) | 加速比(AutoResearch初始生成) | 加速比(AutoResearch优化后) | 轮数 | 状态 | |---|---|---|---|---:|---:|---:|---:|---:|---:|---:|---| | 1 | 36 | RMSNorm | VECTOR | 30,043.1 | timeout | 12,310.6 | 0.03x | — | **2.44x** | 26/50 | error (240min cap) | | 1 | 42 | Max_Pooling_2D | VECTOR | 38,458.2 | 3,344,552.8 | 1,737,993.3 | — | 0.011x | **0.022x** | 33/50 | error (240min cap) | | 1 | 44 | Average_Pooling_1D | VECTOR | 20,584.3 | timeout | 12,235.3 | — | — | **1.68x** | 30/30 | done | | 1 | 45 | Average_Pooling_2D | VECTOR | 3,515,948.4 | 2,745,268.0 | 54,680.1 | — | 1.28x | **64.30x** | 40/50 | error (240min cap) | | 1 | 49 | Max_reduction_over_a_dimension | VECTOR | 21,639.9 | 16,499.2 | 6,961.1 | 0.49x | 1.31x | **3.11x** | 50/50 | done | | 1 | 51 | Argmax_over_a_dimension | VECTOR | 21,642.5 | 40,132.3 | 28,674.7 | — | 0.54x | **0.75x** | 50/50 | done | | 1 | 89 | cumsum | VECTOR | 75,221.2 | 706,479.1 | 22,177.0 | 0.22x | 0.11x | **3.39x** | 50/50 | done | | 1 | 93 | masked_cumsum | VECTOR | 90,032.7 | 716,425.3 | 18,959.6 | — | 0.13x | **4.75x** | 14/50 | error (API socket drop) | | 1 | 4 | Matrix_vector_multiplication | CUBE | 34,602.9 | 7,055.8 | 5,089.7 | 0.16x | 4.90x | **6.80x** | 50/50 | done | | 1 | 10 | 3D_tensor_matrix_multiplication | CUBE | 643.6 | 2,139.5 | 743.3 | 0.74x | 0.30x | **0.87x** | 50/50 | done | | 1 | 14 | Matmul_for_upper_triangular_matrices | CUBE | 1,800.5 | 6,464.0 | 1,525.3 | 0.25x | 0.28x | **1.18x** | 50/50 | done | | 1 | 15 | Matmul_for_lower_triangular_matrices | CUBE | 1,795.9 | 6,186.5 | 6,161.8 | 0.01x | 0.29x | **0.29x** | 50/50 | done | ### NPUKernelBench AutoResearch 较难算子批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:30.6h(11 个 op × 50 轮 max,per-op 240min wall-clock cap) #### 结果总表 | Level | Problem ID | 算子名称 | 算子类型 | 基线性能(us) | 初始triton性能(us) | 无工作流直接生成(us) | 加速比 (AutoResearch初始生成) | 加速比(AutoResearch优化后) | 精度通过率 | |---|---|---|---|---|---|---|---|---|---| | 1 | 18 | Index | vector | 89.30 | 741.19 | 700.85 | 0.12x | 0.13x | 41/41 | | 1 | 23 | RepeatInterleave | vector | 137.32 | 1969.94 | 584.05 | 0.07x | 0.24x | 75/75 | | 1 | 24 | EmbeddingDenseBackward | vector | 2227.56 | 3007.04 | 2894.63 | 0.74x | 0.77x | 30/30 | | 1 | 26 | AvgPool3d | vector | 242.78 | 1982.52 | 1267.77 | 0.12x | 0.19x | 72/72 | | 1 | 31 | IOU | vector | 656.20 | 410.17 | 363.18 | 1.60x | 1.81x | 30/30 | | 2 | 1 | RotaryMul | vector | 189.67 | 451.12 | 419.51 | 0.42x | 0.45x | 50/50 | | 2 | 5 | MoeInitRouting | vector | 484.86 | 932.58 | 927.20 | 0.52x | 0.52x | 53/53 | | 2 | 9 | TopKTopP | vector | 8905.87 | 8982.35 | 8927.97 | 0.99x | 1.00x | 50/50 | | 2 | 17 | EmbeddingWithInitialLayernormBackward | vector | 2353.81 | 2292.43 | 2282.59 | 1.03x | 1.03x | 57/57 | | 2 | 18 | FusedAddRmsnorm | vector | 485.82 | 369.37 | 201.61 | 1.32x | 2.41x | 50/50 | | 2 | 23 | HyenaFftSizePaddingRfft | vector | 941.73 | 622.61 | 517.08 | 1.51x | 1.82x | 49/49 | ## 字段说明 - **基线性能**:PyTorch F.X(...) ref 在 NPU 上跑出的延迟,单位 μs - **triton 性能**:手写 triton seed kernel 跑出的延迟(AR 优化前),单位 μs - **triton 优化后性能**:AR 50 轮 EDIT 后最佳 kernel 的延迟,单位 μs - **加速比** = 基线 / triton(>1x 表示 triton 快于 ref)的几何平均 - **加速比(性能优化后)** = 基线 / triton优化后 的几何平均 - **精度通过率** = 通过 allclose 的 case 数 / 总 case 数(per-dtype atol+rtol,fp32 2^-13/1e-5、fp16 2^-10/1e-3、bf16 2^-7/1e-2) #### 特性增强 Enhancements #### 代码清理 Cleanup ## 关联的Issue 无。 ## 测试 - 本地检查插件目录结构,确认 plugins-official/autoresearch 下包含安装脚本、应用代码、qui See merge request: cann/cannbot-skills!653 | 11 天前 | |
在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Co-authored-by: xchang1121<changxiangyu1@huawei.com> # message auto-generated for no-merge-commit merge: !653 merge master into master 在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Created-by: xchang1121 Commit-by: xchang1121 Merged-by: cann-robot Description: ## 描述 #### 新特性 New Features - 【autoresearch】新增 AutoResearch 官方插件。AutoResearch 是基于 Claude Code / Open Code,面向算子优化任务的自动化算子优化工作流项目,负责组织参考实现、候选 kernel、正确性校验、性能评测、远程ssh评测机/本地agent分离调度、批量执行和多轮优化状态管理。支持triton-ascend算子的优化。 - 【autoresearch】安装后以独立项目方式运行,保留原有 slash command、hooks、配置文件、批跑脚本和 worker 连接(使得运行agent端和评测机分离,仅通过ssh连接)方式,用户可以直接创建任务并连接本地或远端 worker 进行评测。 - 【autoresearch】内置 baseline 记录、状态机推进、失败信息提取和 CodeChecker 检查能力,便于跟踪多轮优化中的正确性、性能变化和失败原因。 ## CANN-bench Ascend C VEC算子优化结果: ### 1a. ForeachAddcdivScalar — 分数 84.13,平均加速比 **1.693**(19/20 用例超过参考) | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 1.570 | 23.5 | 36.9 | ok | | 2 | 1.136 | 78.9 | 89.6 | ok | | 3 | 1.243 | 93.1 | 115.8 | ok | | 4 | 1.001 | 890.7 | 892.0 | ok | | 5 | 1.096 | 438.9 | 481.3 | ok | | 6 | 2.480 | 7.5 | 18.7 | ok | | 7 | 2.229 | 11.4 | 25.3 | ok | | 8 | 2.546 | 8.4 | 21.4 | ok | | 9 | 1.163 | 659.9 | 767.6 | ok | | 10 | 2.219 | 10.9 | 24.3 | ok | | 11 | 2.054 | 15.5 | 31.9 | ok | | 12 | 2.120 | 10.8 | 23.0 | ok | | 13 | 1.567 | 51.6 | 80.8 | ok | | 14 | 1.527 | 28.3 | 43.2 | ok | | 15 | 1.590 | 22.6 | 36.0 | ok | | 16 | 1.389 | 51.4 | 71.4 | ok | | 17 | 2.338 | 12.1 | 28.2 | ok | | 18 | 1.374 | 43.6 | 59.9 | ok | | 19 | 2.322 | 12.0 | 28.0 | ok | | 20 | 0.895 | 118.1 | 105.7 | ok | 小张量(6/7/8/10/11/12/17/19)达到参考的 2–2.5×;大张量(4/5/9/20)卡在带宽墙(~1.0×)。仅用例 20 <1。 ### 1b. Cummin — 分数 55.10,平均加速比 **0.132**(访存受限的扫描) | 用例 | 形状(dtype,dim) | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---|---| | 1 | [1024,1024] f16 −1 | 0.048 | 227.0 | 10.9 | ok | | 2 | [2048,2048] f32 −1 | 0.188 | 464.2 | 87.4 | ok | | 3 | [4096,4096] bf16 −1 | 0.308 | 1088.6 | 335.5 | ok | | 4 | [8192,8192] i32 −1 | 0.326 | 4461.5 | 1454.0 | ok | | 5 | [16384,16384] f16 0 | 0.172 | 18178.5 | 3131.8 | ok | | 6 | [8192,8192] f32 1 | 0.306 | 4754.7 | 1454.0 | ok | | 7 | [1023,1023] bf16 −1 | 0.067 | 259.4 | 17.4 | ok | | 8 | [1009,1021] f16 0 | 0.038 | 278.9 | 10.7 | ok | | 9 | [1537,769] f32 −1 | 0.097 | 253.3 | 24.6 | ok | | 10 | [363,367,373] bf16 1 | 0.278 | 2680.0 | 745.4 | ok | | 11 | [2049,513] f16 −1 | 0.058 | 189.3 | 10.9 | ok | | 12 | [3,7,13,4001] f32 −1 | 0.035 | 654.1 | 22.8 | ok | | 13 | [1000003] bf16 −1 | 0.001 | 24235.7 | 33.3 | ok | | 14 | [11,13,17,67,67] f16 2 | 0.009 | 12046.3 | 113.7 | ok | | 15 | [3,7,11,13,1013] i32 −1 | 0.170 | 373.6 | 63.4 | ok | | 16 | [512,2049] f32 −1 | 0.057 | 383.5 | 21.9 | ok | | 17 | [255,8193] bf16 0 | 0.119 | 234.8 | 27.9 | ok | | 18 | [4097,511] f16 −1 | 0.099 | 220.3 | 21.8 | ok | | 19 | [2,511,2049] f32 1 | 0.154 | 283.9 | 43.6 | ok | | 20 | [4,255,2049] bf16 −1 | 0.100 | 420.0 | 41.8 | ok | 最差:用例 13(单条 1M 通道的一维扫描,仅一个核,0.001)与用例 14(nan/精确标量路径,0.009)。中等 1M 用例(1/7/8/11/12/16)延迟受限,处于 0.03–0.07。 ### 1c. Transpose — 分数 65.16,平均加速比 **0.537** | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 0.021 | 507.5 | 10.9 | ok | | 2 | 1.122 | 35.9 | 40.3 | ok | | 3 | 0.876 | 80.7 | 70.6 | ok | | 4 | 0.528 | 1051.0 | 555.0 | ok | | 5 | 0.062 | 13211.9 | 814.9 | ok | | 6 | 0.099 | 124.2 | 12.3 | ok | | 7 | 0.573 | 19.0 | 10.9 | ok | | 8 | 0.706 | 30.5 | 21.5 | ok | | 9 | 0.625 | 19.7 | 12.3 | ok | | 10 | 1.008 | 646.2 | 651.3 | ok | | 11 | 0.555 | 19.6 | 10.9 | ok | | 12 | 0.672 | 33.9 | 22.8 | ok | | 13 | 0.601 | 16.6 | 10.0 | ok | | 14 | 0.852 | 24.4 | 20.8 | ok | | 15 | 0.428 | 265.9 | 113.7 | ok | | 16 | 0.067 | 1403.6 | 94.6 | ok | | 17 | 0.922 | 23.7 | 21.9 | ok | | 18 | 0.877 | 24.9 | 21.8 | ok | | 19 | 0.014 | 797.3 | 10.9 | ok | | 20 | 0.138 | 158.0 | 21.8 | ok | 多数用例处于参考的 0.5–1.1×。较慢:用例 1、19(0.02,int64/大规模全交换),用例 5(0.06,268 MB int64),用例 16(0.07),用例 6(0.10,A 维极小),用例 20(0.14)。 ## 2. CANN-bench Ascend C 18 个算子逐算子最佳加速比(仅标准 20 用例评测) 按分数从低到高排序。 avg_speedup = 相对官方参考的逐用例加速比均值。 | # | 算子 | 最佳分数 | avg_speedup(vs 参考) | vs_hw | 通过 | |---|---|---|---|---|---| | 1 | WeightQuantBatchMatmul | 33.06 | 0.091 | 0.017 | 9/20 | | 2 | Conv3DBackpropFilter | 36.21 | 0.007 | 0.001 | 14/20 | | 3 | GroupedMatmul | 43.70 | 0.101 | 0.012 | 14/20 | | 4 | DepthwiseConv2D | 48.70 | 0.053 | 0.001 | 18/20 | | 5 | ApplyRotaryPosEmb | 50.06 | 0.090 | 0.010 | 18/20 | | 6 | GQA | 51.84 | 0.048 | 0.009 | 20/20 | | 7 | MLA | 51.88 | 0.049 | 0.005 | 20/20 | | 8 | MHA | 52.20 | 0.062 | 0.014 | 20/20 | | 9 | GroupedMatmulSwigluQuant | 53.48 | 0.088 | 0.011 | 20/20 | | 10 | Gather | 54.35 | 0.212 | 0.007 | 20/20 | | 11 | Cummin | 55.12 | 0.132 | 0.008 | 20/20 | | 12 | QuantMatmul | 56.06 | 0.218 | 0.074 | 20/20 | | 13 | AddRmsNormDynamicQuant | 56.88 | 0.254 | 0.042 | 19/20 | | 14 | TopK | 57.40 | 0.211 | 0.012 | 20/20 | | 15 | Transpose | 65.16 | 0.537 | 0.039 | 20/20 | | 16 | DequantSwigluQuant | 65.84 | 0.559 | 0.082 | 20/20 | | 17 | Softmax | 67.51 | 1.428 | 0.096 | 19/20 | | 18 | ForeachAddcdivScalar | 84.13 | 1.693 | 0.534 | 20/20 | **分数 = 0.2·编译 + 0.3·功能 + 0.5·性能(×100)。** 只要 20/20 全通过,就已拿到 20(编译)+ 30(功能)= **50 分底线**;超过 50 的部分是性能项。因此低分算子分两类失效模式: - **功能受限**(未拿满 30 分底线):WeightQuant(9/20)、Conv3D 与 GroupedMatmul(14/20)、Depthwise 与 ApplyRotary(18/20)、AddRmsNorm 与 Softmax(19/20)。 - **性能受限**(全通过但 avg_speedup ≪ 1):注意力/矩阵乘簇(GQA/MLA/MHA/GroupedMatmul,约 0.05–0.10)与 Conv(0.007)。 ### Ascend C算子未来优化计划(持续更新cann-bench提交) **第一步,提升正确性。** 功能分(每算子最高 30 分)的获取成本低于性能优化,应优先补齐未通过用例:WeightQuant 当前仅通过 9/20,主要受限于 int4/int8 反量化的精度与边界值处理;Conv3D 与 GroupedMatmul 各通过 14/20;Depthwise、ApplyRotary、AddRmsNorm、Softmax 仅一至两个用例未过。与此同时需消除 no-NPU-perf 抖动,确保每个用例都执行可被 profiler 采集的 NPU 算子,避免个别用例缺失计时而导致整个算子被反作弊清零。 **第二步,为矩阵乘与注意力类算子实现一个可复用的 cube(Mmad)分块 GEMM 核**(L1→L0A/L0B→Mmad→L0C,配合双缓冲)。这类算子目前运行在标量/向量单元上,加速比仅 0.05–0.22:QuantMatmul 0.218、GroupedMatmul 与 GroupedMatmulSwigluQuant 0.09、MHA/MLA/GQA 0.05–0.06、Conv3D 0.007(采用 im2col+cube)。该核预计需数小时开发,但可同时带动上述多个算子的性能。 **第三步,进一步优化当前最高分算子 Foreach**(84.13,已超过参考实现)。其瓶颈集中于大张量用例(4/5/9/20,加速比接近 1×),可通过增大 TILE、引入三级缓冲改善数据搬运重叠,或将 Div+Muls+Add 融合为 Div+Axpy 两步来提升。由于该算子分值最高,即使 5% 的提升对总分的贡献也高于修复一个 0.05 的落后算子。 **Transpose(0.537)与 Cummin(0.132)已接近 c220 的性能上限,建议置于最后或暂缓。** 二者剩余的低速用例——transpose 的 int8/int64 与 A 维极小场景、cummin 的单核长扫描——均受硬件限制:c220 不具备 MicroAPI/RegTensor,厂商基于寄存器的 Sklansky 前缀扫描与 int8/int64 硬件转置在此均不可用;已实现并验证正确的两级 block-scan 在 910c 上无净收益。 # Triton-Ascend 优化结果 ### KernelBench L1 AutoResearch 批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:27.2h(12 op × 50 轮 max,per-op 240min wall-clock cap,--eval-timeout 600s) 状态:8 done / 4 error;batch.log 输出 done : 8 (median 1.43x, best 6.80x, worst 0.29x) ### 结果总表(精度均全部通过) | Level | Problem ID | 算子名称 | 验收类型 | PyTorch 性能(μs) | triton 性能(μs) | triton 优化后性能(μs) | 加速比(无工作流直接生成triton代码) | 加速比(AutoResearch初始生成) | 加速比(AutoResearch优化后) | 轮数 | 状态 | |---|---|---|---|---:|---:|---:|---:|---:|---:|---:|---| | 1 | 36 | RMSNorm | VECTOR | 30,043.1 | timeout | 12,310.6 | 0.03x | — | **2.44x** | 26/50 | error (240min cap) | | 1 | 42 | Max_Pooling_2D | VECTOR | 38,458.2 | 3,344,552.8 | 1,737,993.3 | — | 0.011x | **0.022x** | 33/50 | error (240min cap) | | 1 | 44 | Average_Pooling_1D | VECTOR | 20,584.3 | timeout | 12,235.3 | — | — | **1.68x** | 30/30 | done | | 1 | 45 | Average_Pooling_2D | VECTOR | 3,515,948.4 | 2,745,268.0 | 54,680.1 | — | 1.28x | **64.30x** | 40/50 | error (240min cap) | | 1 | 49 | Max_reduction_over_a_dimension | VECTOR | 21,639.9 | 16,499.2 | 6,961.1 | 0.49x | 1.31x | **3.11x** | 50/50 | done | | 1 | 51 | Argmax_over_a_dimension | VECTOR | 21,642.5 | 40,132.3 | 28,674.7 | — | 0.54x | **0.75x** | 50/50 | done | | 1 | 89 | cumsum | VECTOR | 75,221.2 | 706,479.1 | 22,177.0 | 0.22x | 0.11x | **3.39x** | 50/50 | done | | 1 | 93 | masked_cumsum | VECTOR | 90,032.7 | 716,425.3 | 18,959.6 | — | 0.13x | **4.75x** | 14/50 | error (API socket drop) | | 1 | 4 | Matrix_vector_multiplication | CUBE | 34,602.9 | 7,055.8 | 5,089.7 | 0.16x | 4.90x | **6.80x** | 50/50 | done | | 1 | 10 | 3D_tensor_matrix_multiplication | CUBE | 643.6 | 2,139.5 | 743.3 | 0.74x | 0.30x | **0.87x** | 50/50 | done | | 1 | 14 | Matmul_for_upper_triangular_matrices | CUBE | 1,800.5 | 6,464.0 | 1,525.3 | 0.25x | 0.28x | **1.18x** | 50/50 | done | | 1 | 15 | Matmul_for_lower_triangular_matrices | CUBE | 1,795.9 | 6,186.5 | 6,161.8 | 0.01x | 0.29x | **0.29x** | 50/50 | done | ### NPUKernelBench AutoResearch 较难算子批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:30.6h(11 个 op × 50 轮 max,per-op 240min wall-clock cap) #### 结果总表 | Level | Problem ID | 算子名称 | 算子类型 | 基线性能(us) | 初始triton性能(us) | 无工作流直接生成(us) | 加速比 (AutoResearch初始生成) | 加速比(AutoResearch优化后) | 精度通过率 | |---|---|---|---|---|---|---|---|---|---| | 1 | 18 | Index | vector | 89.30 | 741.19 | 700.85 | 0.12x | 0.13x | 41/41 | | 1 | 23 | RepeatInterleave | vector | 137.32 | 1969.94 | 584.05 | 0.07x | 0.24x | 75/75 | | 1 | 24 | EmbeddingDenseBackward | vector | 2227.56 | 3007.04 | 2894.63 | 0.74x | 0.77x | 30/30 | | 1 | 26 | AvgPool3d | vector | 242.78 | 1982.52 | 1267.77 | 0.12x | 0.19x | 72/72 | | 1 | 31 | IOU | vector | 656.20 | 410.17 | 363.18 | 1.60x | 1.81x | 30/30 | | 2 | 1 | RotaryMul | vector | 189.67 | 451.12 | 419.51 | 0.42x | 0.45x | 50/50 | | 2 | 5 | MoeInitRouting | vector | 484.86 | 932.58 | 927.20 | 0.52x | 0.52x | 53/53 | | 2 | 9 | TopKTopP | vector | 8905.87 | 8982.35 | 8927.97 | 0.99x | 1.00x | 50/50 | | 2 | 17 | EmbeddingWithInitialLayernormBackward | vector | 2353.81 | 2292.43 | 2282.59 | 1.03x | 1.03x | 57/57 | | 2 | 18 | FusedAddRmsnorm | vector | 485.82 | 369.37 | 201.61 | 1.32x | 2.41x | 50/50 | | 2 | 23 | HyenaFftSizePaddingRfft | vector | 941.73 | 622.61 | 517.08 | 1.51x | 1.82x | 49/49 | ## 字段说明 - **基线性能**:PyTorch F.X(...) ref 在 NPU 上跑出的延迟,单位 μs - **triton 性能**:手写 triton seed kernel 跑出的延迟(AR 优化前),单位 μs - **triton 优化后性能**:AR 50 轮 EDIT 后最佳 kernel 的延迟,单位 μs - **加速比** = 基线 / triton(>1x 表示 triton 快于 ref)的几何平均 - **加速比(性能优化后)** = 基线 / triton优化后 的几何平均 - **精度通过率** = 通过 allclose 的 case 数 / 总 case 数(per-dtype atol+rtol,fp32 2^-13/1e-5、fp16 2^-10/1e-3、bf16 2^-7/1e-2) #### 特性增强 Enhancements #### 代码清理 Cleanup ## 关联的Issue 无。 ## 测试 - 本地检查插件目录结构,确认 plugins-official/autoresearch 下包含安装脚本、应用代码、qui See merge request: cann/cannbot-skills!653 | 11 天前 | |
在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Co-authored-by: xchang1121<changxiangyu1@huawei.com> # message auto-generated for no-merge-commit merge: !653 merge master into master 在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Created-by: xchang1121 Commit-by: xchang1121 Merged-by: cann-robot Description: ## 描述 #### 新特性 New Features - 【autoresearch】新增 AutoResearch 官方插件。AutoResearch 是基于 Claude Code / Open Code,面向算子优化任务的自动化算子优化工作流项目,负责组织参考实现、候选 kernel、正确性校验、性能评测、远程ssh评测机/本地agent分离调度、批量执行和多轮优化状态管理。支持triton-ascend算子的优化。 - 【autoresearch】安装后以独立项目方式运行,保留原有 slash command、hooks、配置文件、批跑脚本和 worker 连接(使得运行agent端和评测机分离,仅通过ssh连接)方式,用户可以直接创建任务并连接本地或远端 worker 进行评测。 - 【autoresearch】内置 baseline 记录、状态机推进、失败信息提取和 CodeChecker 检查能力,便于跟踪多轮优化中的正确性、性能变化和失败原因。 ## CANN-bench Ascend C VEC算子优化结果: ### 1a. ForeachAddcdivScalar — 分数 84.13,平均加速比 **1.693**(19/20 用例超过参考) | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 1.570 | 23.5 | 36.9 | ok | | 2 | 1.136 | 78.9 | 89.6 | ok | | 3 | 1.243 | 93.1 | 115.8 | ok | | 4 | 1.001 | 890.7 | 892.0 | ok | | 5 | 1.096 | 438.9 | 481.3 | ok | | 6 | 2.480 | 7.5 | 18.7 | ok | | 7 | 2.229 | 11.4 | 25.3 | ok | | 8 | 2.546 | 8.4 | 21.4 | ok | | 9 | 1.163 | 659.9 | 767.6 | ok | | 10 | 2.219 | 10.9 | 24.3 | ok | | 11 | 2.054 | 15.5 | 31.9 | ok | | 12 | 2.120 | 10.8 | 23.0 | ok | | 13 | 1.567 | 51.6 | 80.8 | ok | | 14 | 1.527 | 28.3 | 43.2 | ok | | 15 | 1.590 | 22.6 | 36.0 | ok | | 16 | 1.389 | 51.4 | 71.4 | ok | | 17 | 2.338 | 12.1 | 28.2 | ok | | 18 | 1.374 | 43.6 | 59.9 | ok | | 19 | 2.322 | 12.0 | 28.0 | ok | | 20 | 0.895 | 118.1 | 105.7 | ok | 小张量(6/7/8/10/11/12/17/19)达到参考的 2–2.5×;大张量(4/5/9/20)卡在带宽墙(~1.0×)。仅用例 20 <1。 ### 1b. Cummin — 分数 55.10,平均加速比 **0.132**(访存受限的扫描) | 用例 | 形状(dtype,dim) | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---|---| | 1 | [1024,1024] f16 −1 | 0.048 | 227.0 | 10.9 | ok | | 2 | [2048,2048] f32 −1 | 0.188 | 464.2 | 87.4 | ok | | 3 | [4096,4096] bf16 −1 | 0.308 | 1088.6 | 335.5 | ok | | 4 | [8192,8192] i32 −1 | 0.326 | 4461.5 | 1454.0 | ok | | 5 | [16384,16384] f16 0 | 0.172 | 18178.5 | 3131.8 | ok | | 6 | [8192,8192] f32 1 | 0.306 | 4754.7 | 1454.0 | ok | | 7 | [1023,1023] bf16 −1 | 0.067 | 259.4 | 17.4 | ok | | 8 | [1009,1021] f16 0 | 0.038 | 278.9 | 10.7 | ok | | 9 | [1537,769] f32 −1 | 0.097 | 253.3 | 24.6 | ok | | 10 | [363,367,373] bf16 1 | 0.278 | 2680.0 | 745.4 | ok | | 11 | [2049,513] f16 −1 | 0.058 | 189.3 | 10.9 | ok | | 12 | [3,7,13,4001] f32 −1 | 0.035 | 654.1 | 22.8 | ok | | 13 | [1000003] bf16 −1 | 0.001 | 24235.7 | 33.3 | ok | | 14 | [11,13,17,67,67] f16 2 | 0.009 | 12046.3 | 113.7 | ok | | 15 | [3,7,11,13,1013] i32 −1 | 0.170 | 373.6 | 63.4 | ok | | 16 | [512,2049] f32 −1 | 0.057 | 383.5 | 21.9 | ok | | 17 | [255,8193] bf16 0 | 0.119 | 234.8 | 27.9 | ok | | 18 | [4097,511] f16 −1 | 0.099 | 220.3 | 21.8 | ok | | 19 | [2,511,2049] f32 1 | 0.154 | 283.9 | 43.6 | ok | | 20 | [4,255,2049] bf16 −1 | 0.100 | 420.0 | 41.8 | ok | 最差:用例 13(单条 1M 通道的一维扫描,仅一个核,0.001)与用例 14(nan/精确标量路径,0.009)。中等 1M 用例(1/7/8/11/12/16)延迟受限,处于 0.03–0.07。 ### 1c. Transpose — 分数 65.16,平均加速比 **0.537** | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 0.021 | 507.5 | 10.9 | ok | | 2 | 1.122 | 35.9 | 40.3 | ok | | 3 | 0.876 | 80.7 | 70.6 | ok | | 4 | 0.528 | 1051.0 | 555.0 | ok | | 5 | 0.062 | 13211.9 | 814.9 | ok | | 6 | 0.099 | 124.2 | 12.3 | ok | | 7 | 0.573 | 19.0 | 10.9 | ok | | 8 | 0.706 | 30.5 | 21.5 | ok | | 9 | 0.625 | 19.7 | 12.3 | ok | | 10 | 1.008 | 646.2 | 651.3 | ok | | 11 | 0.555 | 19.6 | 10.9 | ok | | 12 | 0.672 | 33.9 | 22.8 | ok | | 13 | 0.601 | 16.6 | 10.0 | ok | | 14 | 0.852 | 24.4 | 20.8 | ok | | 15 | 0.428 | 265.9 | 113.7 | ok | | 16 | 0.067 | 1403.6 | 94.6 | ok | | 17 | 0.922 | 23.7 | 21.9 | ok | | 18 | 0.877 | 24.9 | 21.8 | ok | | 19 | 0.014 | 797.3 | 10.9 | ok | | 20 | 0.138 | 158.0 | 21.8 | ok | 多数用例处于参考的 0.5–1.1×。较慢:用例 1、19(0.02,int64/大规模全交换),用例 5(0.06,268 MB int64),用例 16(0.07),用例 6(0.10,A 维极小),用例 20(0.14)。 ## 2. CANN-bench Ascend C 18 个算子逐算子最佳加速比(仅标准 20 用例评测) 按分数从低到高排序。 avg_speedup = 相对官方参考的逐用例加速比均值。 | # | 算子 | 最佳分数 | avg_speedup(vs 参考) | vs_hw | 通过 | |---|---|---|---|---|---| | 1 | WeightQuantBatchMatmul | 33.06 | 0.091 | 0.017 | 9/20 | | 2 | Conv3DBackpropFilter | 36.21 | 0.007 | 0.001 | 14/20 | | 3 | GroupedMatmul | 43.70 | 0.101 | 0.012 | 14/20 | | 4 | DepthwiseConv2D | 48.70 | 0.053 | 0.001 | 18/20 | | 5 | ApplyRotaryPosEmb | 50.06 | 0.090 | 0.010 | 18/20 | | 6 | GQA | 51.84 | 0.048 | 0.009 | 20/20 | | 7 | MLA | 51.88 | 0.049 | 0.005 | 20/20 | | 8 | MHA | 52.20 | 0.062 | 0.014 | 20/20 | | 9 | GroupedMatmulSwigluQuant | 53.48 | 0.088 | 0.011 | 20/20 | | 10 | Gather | 54.35 | 0.212 | 0.007 | 20/20 | | 11 | Cummin | 55.12 | 0.132 | 0.008 | 20/20 | | 12 | QuantMatmul | 56.06 | 0.218 | 0.074 | 20/20 | | 13 | AddRmsNormDynamicQuant | 56.88 | 0.254 | 0.042 | 19/20 | | 14 | TopK | 57.40 | 0.211 | 0.012 | 20/20 | | 15 | Transpose | 65.16 | 0.537 | 0.039 | 20/20 | | 16 | DequantSwigluQuant | 65.84 | 0.559 | 0.082 | 20/20 | | 17 | Softmax | 67.51 | 1.428 | 0.096 | 19/20 | | 18 | ForeachAddcdivScalar | 84.13 | 1.693 | 0.534 | 20/20 | **分数 = 0.2·编译 + 0.3·功能 + 0.5·性能(×100)。** 只要 20/20 全通过,就已拿到 20(编译)+ 30(功能)= **50 分底线**;超过 50 的部分是性能项。因此低分算子分两类失效模式: - **功能受限**(未拿满 30 分底线):WeightQuant(9/20)、Conv3D 与 GroupedMatmul(14/20)、Depthwise 与 ApplyRotary(18/20)、AddRmsNorm 与 Softmax(19/20)。 - **性能受限**(全通过但 avg_speedup ≪ 1):注意力/矩阵乘簇(GQA/MLA/MHA/GroupedMatmul,约 0.05–0.10)与 Conv(0.007)。 ### Ascend C算子未来优化计划(持续更新cann-bench提交) **第一步,提升正确性。** 功能分(每算子最高 30 分)的获取成本低于性能优化,应优先补齐未通过用例:WeightQuant 当前仅通过 9/20,主要受限于 int4/int8 反量化的精度与边界值处理;Conv3D 与 GroupedMatmul 各通过 14/20;Depthwise、ApplyRotary、AddRmsNorm、Softmax 仅一至两个用例未过。与此同时需消除 no-NPU-perf 抖动,确保每个用例都执行可被 profiler 采集的 NPU 算子,避免个别用例缺失计时而导致整个算子被反作弊清零。 **第二步,为矩阵乘与注意力类算子实现一个可复用的 cube(Mmad)分块 GEMM 核**(L1→L0A/L0B→Mmad→L0C,配合双缓冲)。这类算子目前运行在标量/向量单元上,加速比仅 0.05–0.22:QuantMatmul 0.218、GroupedMatmul 与 GroupedMatmulSwigluQuant 0.09、MHA/MLA/GQA 0.05–0.06、Conv3D 0.007(采用 im2col+cube)。该核预计需数小时开发,但可同时带动上述多个算子的性能。 **第三步,进一步优化当前最高分算子 Foreach**(84.13,已超过参考实现)。其瓶颈集中于大张量用例(4/5/9/20,加速比接近 1×),可通过增大 TILE、引入三级缓冲改善数据搬运重叠,或将 Div+Muls+Add 融合为 Div+Axpy 两步来提升。由于该算子分值最高,即使 5% 的提升对总分的贡献也高于修复一个 0.05 的落后算子。 **Transpose(0.537)与 Cummin(0.132)已接近 c220 的性能上限,建议置于最后或暂缓。** 二者剩余的低速用例——transpose 的 int8/int64 与 A 维极小场景、cummin 的单核长扫描——均受硬件限制:c220 不具备 MicroAPI/RegTensor,厂商基于寄存器的 Sklansky 前缀扫描与 int8/int64 硬件转置在此均不可用;已实现并验证正确的两级 block-scan 在 910c 上无净收益。 # Triton-Ascend 优化结果 ### KernelBench L1 AutoResearch 批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:27.2h(12 op × 50 轮 max,per-op 240min wall-clock cap,--eval-timeout 600s) 状态:8 done / 4 error;batch.log 输出 done : 8 (median 1.43x, best 6.80x, worst 0.29x) ### 结果总表(精度均全部通过) | Level | Problem ID | 算子名称 | 验收类型 | PyTorch 性能(μs) | triton 性能(μs) | triton 优化后性能(μs) | 加速比(无工作流直接生成triton代码) | 加速比(AutoResearch初始生成) | 加速比(AutoResearch优化后) | 轮数 | 状态 | |---|---|---|---|---:|---:|---:|---:|---:|---:|---:|---| | 1 | 36 | RMSNorm | VECTOR | 30,043.1 | timeout | 12,310.6 | 0.03x | — | **2.44x** | 26/50 | error (240min cap) | | 1 | 42 | Max_Pooling_2D | VECTOR | 38,458.2 | 3,344,552.8 | 1,737,993.3 | — | 0.011x | **0.022x** | 33/50 | error (240min cap) | | 1 | 44 | Average_Pooling_1D | VECTOR | 20,584.3 | timeout | 12,235.3 | — | — | **1.68x** | 30/30 | done | | 1 | 45 | Average_Pooling_2D | VECTOR | 3,515,948.4 | 2,745,268.0 | 54,680.1 | — | 1.28x | **64.30x** | 40/50 | error (240min cap) | | 1 | 49 | Max_reduction_over_a_dimension | VECTOR | 21,639.9 | 16,499.2 | 6,961.1 | 0.49x | 1.31x | **3.11x** | 50/50 | done | | 1 | 51 | Argmax_over_a_dimension | VECTOR | 21,642.5 | 40,132.3 | 28,674.7 | — | 0.54x | **0.75x** | 50/50 | done | | 1 | 89 | cumsum | VECTOR | 75,221.2 | 706,479.1 | 22,177.0 | 0.22x | 0.11x | **3.39x** | 50/50 | done | | 1 | 93 | masked_cumsum | VECTOR | 90,032.7 | 716,425.3 | 18,959.6 | — | 0.13x | **4.75x** | 14/50 | error (API socket drop) | | 1 | 4 | Matrix_vector_multiplication | CUBE | 34,602.9 | 7,055.8 | 5,089.7 | 0.16x | 4.90x | **6.80x** | 50/50 | done | | 1 | 10 | 3D_tensor_matrix_multiplication | CUBE | 643.6 | 2,139.5 | 743.3 | 0.74x | 0.30x | **0.87x** | 50/50 | done | | 1 | 14 | Matmul_for_upper_triangular_matrices | CUBE | 1,800.5 | 6,464.0 | 1,525.3 | 0.25x | 0.28x | **1.18x** | 50/50 | done | | 1 | 15 | Matmul_for_lower_triangular_matrices | CUBE | 1,795.9 | 6,186.5 | 6,161.8 | 0.01x | 0.29x | **0.29x** | 50/50 | done | ### NPUKernelBench AutoResearch 较难算子批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:30.6h(11 个 op × 50 轮 max,per-op 240min wall-clock cap) #### 结果总表 | Level | Problem ID | 算子名称 | 算子类型 | 基线性能(us) | 初始triton性能(us) | 无工作流直接生成(us) | 加速比 (AutoResearch初始生成) | 加速比(AutoResearch优化后) | 精度通过率 | |---|---|---|---|---|---|---|---|---|---| | 1 | 18 | Index | vector | 89.30 | 741.19 | 700.85 | 0.12x | 0.13x | 41/41 | | 1 | 23 | RepeatInterleave | vector | 137.32 | 1969.94 | 584.05 | 0.07x | 0.24x | 75/75 | | 1 | 24 | EmbeddingDenseBackward | vector | 2227.56 | 3007.04 | 2894.63 | 0.74x | 0.77x | 30/30 | | 1 | 26 | AvgPool3d | vector | 242.78 | 1982.52 | 1267.77 | 0.12x | 0.19x | 72/72 | | 1 | 31 | IOU | vector | 656.20 | 410.17 | 363.18 | 1.60x | 1.81x | 30/30 | | 2 | 1 | RotaryMul | vector | 189.67 | 451.12 | 419.51 | 0.42x | 0.45x | 50/50 | | 2 | 5 | MoeInitRouting | vector | 484.86 | 932.58 | 927.20 | 0.52x | 0.52x | 53/53 | | 2 | 9 | TopKTopP | vector | 8905.87 | 8982.35 | 8927.97 | 0.99x | 1.00x | 50/50 | | 2 | 17 | EmbeddingWithInitialLayernormBackward | vector | 2353.81 | 2292.43 | 2282.59 | 1.03x | 1.03x | 57/57 | | 2 | 18 | FusedAddRmsnorm | vector | 485.82 | 369.37 | 201.61 | 1.32x | 2.41x | 50/50 | | 2 | 23 | HyenaFftSizePaddingRfft | vector | 941.73 | 622.61 | 517.08 | 1.51x | 1.82x | 49/49 | ## 字段说明 - **基线性能**:PyTorch F.X(...) ref 在 NPU 上跑出的延迟,单位 μs - **triton 性能**:手写 triton seed kernel 跑出的延迟(AR 优化前),单位 μs - **triton 优化后性能**:AR 50 轮 EDIT 后最佳 kernel 的延迟,单位 μs - **加速比** = 基线 / triton(>1x 表示 triton 快于 ref)的几何平均 - **加速比(性能优化后)** = 基线 / triton优化后 的几何平均 - **精度通过率** = 通过 allclose 的 case 数 / 总 case 数(per-dtype atol+rtol,fp32 2^-13/1e-5、fp16 2^-10/1e-3、bf16 2^-7/1e-2) #### 特性增强 Enhancements #### 代码清理 Cleanup ## 关联的Issue 无。 ## 测试 - 本地检查插件目录结构,确认 plugins-official/autoresearch 下包含安装脚本、应用代码、qui See merge request: cann/cannbot-skills!653 | 11 天前 | |
在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Co-authored-by: xchang1121<changxiangyu1@huawei.com> # message auto-generated for no-merge-commit merge: !653 merge master into master 在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Created-by: xchang1121 Commit-by: xchang1121 Merged-by: cann-robot Description: ## 描述 #### 新特性 New Features - 【autoresearch】新增 AutoResearch 官方插件。AutoResearch 是基于 Claude Code / Open Code,面向算子优化任务的自动化算子优化工作流项目,负责组织参考实现、候选 kernel、正确性校验、性能评测、远程ssh评测机/本地agent分离调度、批量执行和多轮优化状态管理。支持triton-ascend算子的优化。 - 【autoresearch】安装后以独立项目方式运行,保留原有 slash command、hooks、配置文件、批跑脚本和 worker 连接(使得运行agent端和评测机分离,仅通过ssh连接)方式,用户可以直接创建任务并连接本地或远端 worker 进行评测。 - 【autoresearch】内置 baseline 记录、状态机推进、失败信息提取和 CodeChecker 检查能力,便于跟踪多轮优化中的正确性、性能变化和失败原因。 ## CANN-bench Ascend C VEC算子优化结果: ### 1a. ForeachAddcdivScalar — 分数 84.13,平均加速比 **1.693**(19/20 用例超过参考) | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 1.570 | 23.5 | 36.9 | ok | | 2 | 1.136 | 78.9 | 89.6 | ok | | 3 | 1.243 | 93.1 | 115.8 | ok | | 4 | 1.001 | 890.7 | 892.0 | ok | | 5 | 1.096 | 438.9 | 481.3 | ok | | 6 | 2.480 | 7.5 | 18.7 | ok | | 7 | 2.229 | 11.4 | 25.3 | ok | | 8 | 2.546 | 8.4 | 21.4 | ok | | 9 | 1.163 | 659.9 | 767.6 | ok | | 10 | 2.219 | 10.9 | 24.3 | ok | | 11 | 2.054 | 15.5 | 31.9 | ok | | 12 | 2.120 | 10.8 | 23.0 | ok | | 13 | 1.567 | 51.6 | 80.8 | ok | | 14 | 1.527 | 28.3 | 43.2 | ok | | 15 | 1.590 | 22.6 | 36.0 | ok | | 16 | 1.389 | 51.4 | 71.4 | ok | | 17 | 2.338 | 12.1 | 28.2 | ok | | 18 | 1.374 | 43.6 | 59.9 | ok | | 19 | 2.322 | 12.0 | 28.0 | ok | | 20 | 0.895 | 118.1 | 105.7 | ok | 小张量(6/7/8/10/11/12/17/19)达到参考的 2–2.5×;大张量(4/5/9/20)卡在带宽墙(~1.0×)。仅用例 20 <1。 ### 1b. Cummin — 分数 55.10,平均加速比 **0.132**(访存受限的扫描) | 用例 | 形状(dtype,dim) | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---|---| | 1 | [1024,1024] f16 −1 | 0.048 | 227.0 | 10.9 | ok | | 2 | [2048,2048] f32 −1 | 0.188 | 464.2 | 87.4 | ok | | 3 | [4096,4096] bf16 −1 | 0.308 | 1088.6 | 335.5 | ok | | 4 | [8192,8192] i32 −1 | 0.326 | 4461.5 | 1454.0 | ok | | 5 | [16384,16384] f16 0 | 0.172 | 18178.5 | 3131.8 | ok | | 6 | [8192,8192] f32 1 | 0.306 | 4754.7 | 1454.0 | ok | | 7 | [1023,1023] bf16 −1 | 0.067 | 259.4 | 17.4 | ok | | 8 | [1009,1021] f16 0 | 0.038 | 278.9 | 10.7 | ok | | 9 | [1537,769] f32 −1 | 0.097 | 253.3 | 24.6 | ok | | 10 | [363,367,373] bf16 1 | 0.278 | 2680.0 | 745.4 | ok | | 11 | [2049,513] f16 −1 | 0.058 | 189.3 | 10.9 | ok | | 12 | [3,7,13,4001] f32 −1 | 0.035 | 654.1 | 22.8 | ok | | 13 | [1000003] bf16 −1 | 0.001 | 24235.7 | 33.3 | ok | | 14 | [11,13,17,67,67] f16 2 | 0.009 | 12046.3 | 113.7 | ok | | 15 | [3,7,11,13,1013] i32 −1 | 0.170 | 373.6 | 63.4 | ok | | 16 | [512,2049] f32 −1 | 0.057 | 383.5 | 21.9 | ok | | 17 | [255,8193] bf16 0 | 0.119 | 234.8 | 27.9 | ok | | 18 | [4097,511] f16 −1 | 0.099 | 220.3 | 21.8 | ok | | 19 | [2,511,2049] f32 1 | 0.154 | 283.9 | 43.6 | ok | | 20 | [4,255,2049] bf16 −1 | 0.100 | 420.0 | 41.8 | ok | 最差:用例 13(单条 1M 通道的一维扫描,仅一个核,0.001)与用例 14(nan/精确标量路径,0.009)。中等 1M 用例(1/7/8/11/12/16)延迟受限,处于 0.03–0.07。 ### 1c. Transpose — 分数 65.16,平均加速比 **0.537** | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 0.021 | 507.5 | 10.9 | ok | | 2 | 1.122 | 35.9 | 40.3 | ok | | 3 | 0.876 | 80.7 | 70.6 | ok | | 4 | 0.528 | 1051.0 | 555.0 | ok | | 5 | 0.062 | 13211.9 | 814.9 | ok | | 6 | 0.099 | 124.2 | 12.3 | ok | | 7 | 0.573 | 19.0 | 10.9 | ok | | 8 | 0.706 | 30.5 | 21.5 | ok | | 9 | 0.625 | 19.7 | 12.3 | ok | | 10 | 1.008 | 646.2 | 651.3 | ok | | 11 | 0.555 | 19.6 | 10.9 | ok | | 12 | 0.672 | 33.9 | 22.8 | ok | | 13 | 0.601 | 16.6 | 10.0 | ok | | 14 | 0.852 | 24.4 | 20.8 | ok | | 15 | 0.428 | 265.9 | 113.7 | ok | | 16 | 0.067 | 1403.6 | 94.6 | ok | | 17 | 0.922 | 23.7 | 21.9 | ok | | 18 | 0.877 | 24.9 | 21.8 | ok | | 19 | 0.014 | 797.3 | 10.9 | ok | | 20 | 0.138 | 158.0 | 21.8 | ok | 多数用例处于参考的 0.5–1.1×。较慢:用例 1、19(0.02,int64/大规模全交换),用例 5(0.06,268 MB int64),用例 16(0.07),用例 6(0.10,A 维极小),用例 20(0.14)。 ## 2. CANN-bench Ascend C 18 个算子逐算子最佳加速比(仅标准 20 用例评测) 按分数从低到高排序。 avg_speedup = 相对官方参考的逐用例加速比均值。 | # | 算子 | 最佳分数 | avg_speedup(vs 参考) | vs_hw | 通过 | |---|---|---|---|---|---| | 1 | WeightQuantBatchMatmul | 33.06 | 0.091 | 0.017 | 9/20 | | 2 | Conv3DBackpropFilter | 36.21 | 0.007 | 0.001 | 14/20 | | 3 | GroupedMatmul | 43.70 | 0.101 | 0.012 | 14/20 | | 4 | DepthwiseConv2D | 48.70 | 0.053 | 0.001 | 18/20 | | 5 | ApplyRotaryPosEmb | 50.06 | 0.090 | 0.010 | 18/20 | | 6 | GQA | 51.84 | 0.048 | 0.009 | 20/20 | | 7 | MLA | 51.88 | 0.049 | 0.005 | 20/20 | | 8 | MHA | 52.20 | 0.062 | 0.014 | 20/20 | | 9 | GroupedMatmulSwigluQuant | 53.48 | 0.088 | 0.011 | 20/20 | | 10 | Gather | 54.35 | 0.212 | 0.007 | 20/20 | | 11 | Cummin | 55.12 | 0.132 | 0.008 | 20/20 | | 12 | QuantMatmul | 56.06 | 0.218 | 0.074 | 20/20 | | 13 | AddRmsNormDynamicQuant | 56.88 | 0.254 | 0.042 | 19/20 | | 14 | TopK | 57.40 | 0.211 | 0.012 | 20/20 | | 15 | Transpose | 65.16 | 0.537 | 0.039 | 20/20 | | 16 | DequantSwigluQuant | 65.84 | 0.559 | 0.082 | 20/20 | | 17 | Softmax | 67.51 | 1.428 | 0.096 | 19/20 | | 18 | ForeachAddcdivScalar | 84.13 | 1.693 | 0.534 | 20/20 | **分数 = 0.2·编译 + 0.3·功能 + 0.5·性能(×100)。** 只要 20/20 全通过,就已拿到 20(编译)+ 30(功能)= **50 分底线**;超过 50 的部分是性能项。因此低分算子分两类失效模式: - **功能受限**(未拿满 30 分底线):WeightQuant(9/20)、Conv3D 与 GroupedMatmul(14/20)、Depthwise 与 ApplyRotary(18/20)、AddRmsNorm 与 Softmax(19/20)。 - **性能受限**(全通过但 avg_speedup ≪ 1):注意力/矩阵乘簇(GQA/MLA/MHA/GroupedMatmul,约 0.05–0.10)与 Conv(0.007)。 ### Ascend C算子未来优化计划(持续更新cann-bench提交) **第一步,提升正确性。** 功能分(每算子最高 30 分)的获取成本低于性能优化,应优先补齐未通过用例:WeightQuant 当前仅通过 9/20,主要受限于 int4/int8 反量化的精度与边界值处理;Conv3D 与 GroupedMatmul 各通过 14/20;Depthwise、ApplyRotary、AddRmsNorm、Softmax 仅一至两个用例未过。与此同时需消除 no-NPU-perf 抖动,确保每个用例都执行可被 profiler 采集的 NPU 算子,避免个别用例缺失计时而导致整个算子被反作弊清零。 **第二步,为矩阵乘与注意力类算子实现一个可复用的 cube(Mmad)分块 GEMM 核**(L1→L0A/L0B→Mmad→L0C,配合双缓冲)。这类算子目前运行在标量/向量单元上,加速比仅 0.05–0.22:QuantMatmul 0.218、GroupedMatmul 与 GroupedMatmulSwigluQuant 0.09、MHA/MLA/GQA 0.05–0.06、Conv3D 0.007(采用 im2col+cube)。该核预计需数小时开发,但可同时带动上述多个算子的性能。 **第三步,进一步优化当前最高分算子 Foreach**(84.13,已超过参考实现)。其瓶颈集中于大张量用例(4/5/9/20,加速比接近 1×),可通过增大 TILE、引入三级缓冲改善数据搬运重叠,或将 Div+Muls+Add 融合为 Div+Axpy 两步来提升。由于该算子分值最高,即使 5% 的提升对总分的贡献也高于修复一个 0.05 的落后算子。 **Transpose(0.537)与 Cummin(0.132)已接近 c220 的性能上限,建议置于最后或暂缓。** 二者剩余的低速用例——transpose 的 int8/int64 与 A 维极小场景、cummin 的单核长扫描——均受硬件限制:c220 不具备 MicroAPI/RegTensor,厂商基于寄存器的 Sklansky 前缀扫描与 int8/int64 硬件转置在此均不可用;已实现并验证正确的两级 block-scan 在 910c 上无净收益。 # Triton-Ascend 优化结果 ### KernelBench L1 AutoResearch 批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:27.2h(12 op × 50 轮 max,per-op 240min wall-clock cap,--eval-timeout 600s) 状态:8 done / 4 error;batch.log 输出 done : 8 (median 1.43x, best 6.80x, worst 0.29x) ### 结果总表(精度均全部通过) | Level | Problem ID | 算子名称 | 验收类型 | PyTorch 性能(μs) | triton 性能(μs) | triton 优化后性能(μs) | 加速比(无工作流直接生成triton代码) | 加速比(AutoResearch初始生成) | 加速比(AutoResearch优化后) | 轮数 | 状态 | |---|---|---|---|---:|---:|---:|---:|---:|---:|---:|---| | 1 | 36 | RMSNorm | VECTOR | 30,043.1 | timeout | 12,310.6 | 0.03x | — | **2.44x** | 26/50 | error (240min cap) | | 1 | 42 | Max_Pooling_2D | VECTOR | 38,458.2 | 3,344,552.8 | 1,737,993.3 | — | 0.011x | **0.022x** | 33/50 | error (240min cap) | | 1 | 44 | Average_Pooling_1D | VECTOR | 20,584.3 | timeout | 12,235.3 | — | — | **1.68x** | 30/30 | done | | 1 | 45 | Average_Pooling_2D | VECTOR | 3,515,948.4 | 2,745,268.0 | 54,680.1 | — | 1.28x | **64.30x** | 40/50 | error (240min cap) | | 1 | 49 | Max_reduction_over_a_dimension | VECTOR | 21,639.9 | 16,499.2 | 6,961.1 | 0.49x | 1.31x | **3.11x** | 50/50 | done | | 1 | 51 | Argmax_over_a_dimension | VECTOR | 21,642.5 | 40,132.3 | 28,674.7 | — | 0.54x | **0.75x** | 50/50 | done | | 1 | 89 | cumsum | VECTOR | 75,221.2 | 706,479.1 | 22,177.0 | 0.22x | 0.11x | **3.39x** | 50/50 | done | | 1 | 93 | masked_cumsum | VECTOR | 90,032.7 | 716,425.3 | 18,959.6 | — | 0.13x | **4.75x** | 14/50 | error (API socket drop) | | 1 | 4 | Matrix_vector_multiplication | CUBE | 34,602.9 | 7,055.8 | 5,089.7 | 0.16x | 4.90x | **6.80x** | 50/50 | done | | 1 | 10 | 3D_tensor_matrix_multiplication | CUBE | 643.6 | 2,139.5 | 743.3 | 0.74x | 0.30x | **0.87x** | 50/50 | done | | 1 | 14 | Matmul_for_upper_triangular_matrices | CUBE | 1,800.5 | 6,464.0 | 1,525.3 | 0.25x | 0.28x | **1.18x** | 50/50 | done | | 1 | 15 | Matmul_for_lower_triangular_matrices | CUBE | 1,795.9 | 6,186.5 | 6,161.8 | 0.01x | 0.29x | **0.29x** | 50/50 | done | ### NPUKernelBench AutoResearch 较难算子批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:30.6h(11 个 op × 50 轮 max,per-op 240min wall-clock cap) #### 结果总表 | Level | Problem ID | 算子名称 | 算子类型 | 基线性能(us) | 初始triton性能(us) | 无工作流直接生成(us) | 加速比 (AutoResearch初始生成) | 加速比(AutoResearch优化后) | 精度通过率 | |---|---|---|---|---|---|---|---|---|---| | 1 | 18 | Index | vector | 89.30 | 741.19 | 700.85 | 0.12x | 0.13x | 41/41 | | 1 | 23 | RepeatInterleave | vector | 137.32 | 1969.94 | 584.05 | 0.07x | 0.24x | 75/75 | | 1 | 24 | EmbeddingDenseBackward | vector | 2227.56 | 3007.04 | 2894.63 | 0.74x | 0.77x | 30/30 | | 1 | 26 | AvgPool3d | vector | 242.78 | 1982.52 | 1267.77 | 0.12x | 0.19x | 72/72 | | 1 | 31 | IOU | vector | 656.20 | 410.17 | 363.18 | 1.60x | 1.81x | 30/30 | | 2 | 1 | RotaryMul | vector | 189.67 | 451.12 | 419.51 | 0.42x | 0.45x | 50/50 | | 2 | 5 | MoeInitRouting | vector | 484.86 | 932.58 | 927.20 | 0.52x | 0.52x | 53/53 | | 2 | 9 | TopKTopP | vector | 8905.87 | 8982.35 | 8927.97 | 0.99x | 1.00x | 50/50 | | 2 | 17 | EmbeddingWithInitialLayernormBackward | vector | 2353.81 | 2292.43 | 2282.59 | 1.03x | 1.03x | 57/57 | | 2 | 18 | FusedAddRmsnorm | vector | 485.82 | 369.37 | 201.61 | 1.32x | 2.41x | 50/50 | | 2 | 23 | HyenaFftSizePaddingRfft | vector | 941.73 | 622.61 | 517.08 | 1.51x | 1.82x | 49/49 | ## 字段说明 - **基线性能**:PyTorch F.X(...) ref 在 NPU 上跑出的延迟,单位 μs - **triton 性能**:手写 triton seed kernel 跑出的延迟(AR 优化前),单位 μs - **triton 优化后性能**:AR 50 轮 EDIT 后最佳 kernel 的延迟,单位 μs - **加速比** = 基线 / triton(>1x 表示 triton 快于 ref)的几何平均 - **加速比(性能优化后)** = 基线 / triton优化后 的几何平均 - **精度通过率** = 通过 allclose 的 case 数 / 总 case 数(per-dtype atol+rtol,fp32 2^-13/1e-5、fp16 2^-10/1e-3、bf16 2^-7/1e-2) #### 特性增强 Enhancements #### 代码清理 Cleanup ## 关联的Issue 无。 ## 测试 - 本地检查插件目录结构,确认 plugins-official/autoresearch 下包含安装脚本、应用代码、qui See merge request: cann/cannbot-skills!653 | 11 天前 | |
在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Co-authored-by: xchang1121<changxiangyu1@huawei.com> # message auto-generated for no-merge-commit merge: !653 merge master into master 在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Created-by: xchang1121 Commit-by: xchang1121 Merged-by: cann-robot Description: ## 描述 #### 新特性 New Features - 【autoresearch】新增 AutoResearch 官方插件。AutoResearch 是基于 Claude Code / Open Code,面向算子优化任务的自动化算子优化工作流项目,负责组织参考实现、候选 kernel、正确性校验、性能评测、远程ssh评测机/本地agent分离调度、批量执行和多轮优化状态管理。支持triton-ascend算子的优化。 - 【autoresearch】安装后以独立项目方式运行,保留原有 slash command、hooks、配置文件、批跑脚本和 worker 连接(使得运行agent端和评测机分离,仅通过ssh连接)方式,用户可以直接创建任务并连接本地或远端 worker 进行评测。 - 【autoresearch】内置 baseline 记录、状态机推进、失败信息提取和 CodeChecker 检查能力,便于跟踪多轮优化中的正确性、性能变化和失败原因。 ## CANN-bench Ascend C VEC算子优化结果: ### 1a. ForeachAddcdivScalar — 分数 84.13,平均加速比 **1.693**(19/20 用例超过参考) | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 1.570 | 23.5 | 36.9 | ok | | 2 | 1.136 | 78.9 | 89.6 | ok | | 3 | 1.243 | 93.1 | 115.8 | ok | | 4 | 1.001 | 890.7 | 892.0 | ok | | 5 | 1.096 | 438.9 | 481.3 | ok | | 6 | 2.480 | 7.5 | 18.7 | ok | | 7 | 2.229 | 11.4 | 25.3 | ok | | 8 | 2.546 | 8.4 | 21.4 | ok | | 9 | 1.163 | 659.9 | 767.6 | ok | | 10 | 2.219 | 10.9 | 24.3 | ok | | 11 | 2.054 | 15.5 | 31.9 | ok | | 12 | 2.120 | 10.8 | 23.0 | ok | | 13 | 1.567 | 51.6 | 80.8 | ok | | 14 | 1.527 | 28.3 | 43.2 | ok | | 15 | 1.590 | 22.6 | 36.0 | ok | | 16 | 1.389 | 51.4 | 71.4 | ok | | 17 | 2.338 | 12.1 | 28.2 | ok | | 18 | 1.374 | 43.6 | 59.9 | ok | | 19 | 2.322 | 12.0 | 28.0 | ok | | 20 | 0.895 | 118.1 | 105.7 | ok | 小张量(6/7/8/10/11/12/17/19)达到参考的 2–2.5×;大张量(4/5/9/20)卡在带宽墙(~1.0×)。仅用例 20 <1。 ### 1b. Cummin — 分数 55.10,平均加速比 **0.132**(访存受限的扫描) | 用例 | 形状(dtype,dim) | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---|---| | 1 | [1024,1024] f16 −1 | 0.048 | 227.0 | 10.9 | ok | | 2 | [2048,2048] f32 −1 | 0.188 | 464.2 | 87.4 | ok | | 3 | [4096,4096] bf16 −1 | 0.308 | 1088.6 | 335.5 | ok | | 4 | [8192,8192] i32 −1 | 0.326 | 4461.5 | 1454.0 | ok | | 5 | [16384,16384] f16 0 | 0.172 | 18178.5 | 3131.8 | ok | | 6 | [8192,8192] f32 1 | 0.306 | 4754.7 | 1454.0 | ok | | 7 | [1023,1023] bf16 −1 | 0.067 | 259.4 | 17.4 | ok | | 8 | [1009,1021] f16 0 | 0.038 | 278.9 | 10.7 | ok | | 9 | [1537,769] f32 −1 | 0.097 | 253.3 | 24.6 | ok | | 10 | [363,367,373] bf16 1 | 0.278 | 2680.0 | 745.4 | ok | | 11 | [2049,513] f16 −1 | 0.058 | 189.3 | 10.9 | ok | | 12 | [3,7,13,4001] f32 −1 | 0.035 | 654.1 | 22.8 | ok | | 13 | [1000003] bf16 −1 | 0.001 | 24235.7 | 33.3 | ok | | 14 | [11,13,17,67,67] f16 2 | 0.009 | 12046.3 | 113.7 | ok | | 15 | [3,7,11,13,1013] i32 −1 | 0.170 | 373.6 | 63.4 | ok | | 16 | [512,2049] f32 −1 | 0.057 | 383.5 | 21.9 | ok | | 17 | [255,8193] bf16 0 | 0.119 | 234.8 | 27.9 | ok | | 18 | [4097,511] f16 −1 | 0.099 | 220.3 | 21.8 | ok | | 19 | [2,511,2049] f32 1 | 0.154 | 283.9 | 43.6 | ok | | 20 | [4,255,2049] bf16 −1 | 0.100 | 420.0 | 41.8 | ok | 最差:用例 13(单条 1M 通道的一维扫描,仅一个核,0.001)与用例 14(nan/精确标量路径,0.009)。中等 1M 用例(1/7/8/11/12/16)延迟受限,处于 0.03–0.07。 ### 1c. Transpose — 分数 65.16,平均加速比 **0.537** | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 0.021 | 507.5 | 10.9 | ok | | 2 | 1.122 | 35.9 | 40.3 | ok | | 3 | 0.876 | 80.7 | 70.6 | ok | | 4 | 0.528 | 1051.0 | 555.0 | ok | | 5 | 0.062 | 13211.9 | 814.9 | ok | | 6 | 0.099 | 124.2 | 12.3 | ok | | 7 | 0.573 | 19.0 | 10.9 | ok | | 8 | 0.706 | 30.5 | 21.5 | ok | | 9 | 0.625 | 19.7 | 12.3 | ok | | 10 | 1.008 | 646.2 | 651.3 | ok | | 11 | 0.555 | 19.6 | 10.9 | ok | | 12 | 0.672 | 33.9 | 22.8 | ok | | 13 | 0.601 | 16.6 | 10.0 | ok | | 14 | 0.852 | 24.4 | 20.8 | ok | | 15 | 0.428 | 265.9 | 113.7 | ok | | 16 | 0.067 | 1403.6 | 94.6 | ok | | 17 | 0.922 | 23.7 | 21.9 | ok | | 18 | 0.877 | 24.9 | 21.8 | ok | | 19 | 0.014 | 797.3 | 10.9 | ok | | 20 | 0.138 | 158.0 | 21.8 | ok | 多数用例处于参考的 0.5–1.1×。较慢:用例 1、19(0.02,int64/大规模全交换),用例 5(0.06,268 MB int64),用例 16(0.07),用例 6(0.10,A 维极小),用例 20(0.14)。 ## 2. CANN-bench Ascend C 18 个算子逐算子最佳加速比(仅标准 20 用例评测) 按分数从低到高排序。 avg_speedup = 相对官方参考的逐用例加速比均值。 | # | 算子 | 最佳分数 | avg_speedup(vs 参考) | vs_hw | 通过 | |---|---|---|---|---|---| | 1 | WeightQuantBatchMatmul | 33.06 | 0.091 | 0.017 | 9/20 | | 2 | Conv3DBackpropFilter | 36.21 | 0.007 | 0.001 | 14/20 | | 3 | GroupedMatmul | 43.70 | 0.101 | 0.012 | 14/20 | | 4 | DepthwiseConv2D | 48.70 | 0.053 | 0.001 | 18/20 | | 5 | ApplyRotaryPosEmb | 50.06 | 0.090 | 0.010 | 18/20 | | 6 | GQA | 51.84 | 0.048 | 0.009 | 20/20 | | 7 | MLA | 51.88 | 0.049 | 0.005 | 20/20 | | 8 | MHA | 52.20 | 0.062 | 0.014 | 20/20 | | 9 | GroupedMatmulSwigluQuant | 53.48 | 0.088 | 0.011 | 20/20 | | 10 | Gather | 54.35 | 0.212 | 0.007 | 20/20 | | 11 | Cummin | 55.12 | 0.132 | 0.008 | 20/20 | | 12 | QuantMatmul | 56.06 | 0.218 | 0.074 | 20/20 | | 13 | AddRmsNormDynamicQuant | 56.88 | 0.254 | 0.042 | 19/20 | | 14 | TopK | 57.40 | 0.211 | 0.012 | 20/20 | | 15 | Transpose | 65.16 | 0.537 | 0.039 | 20/20 | | 16 | DequantSwigluQuant | 65.84 | 0.559 | 0.082 | 20/20 | | 17 | Softmax | 67.51 | 1.428 | 0.096 | 19/20 | | 18 | ForeachAddcdivScalar | 84.13 | 1.693 | 0.534 | 20/20 | **分数 = 0.2·编译 + 0.3·功能 + 0.5·性能(×100)。** 只要 20/20 全通过,就已拿到 20(编译)+ 30(功能)= **50 分底线**;超过 50 的部分是性能项。因此低分算子分两类失效模式: - **功能受限**(未拿满 30 分底线):WeightQuant(9/20)、Conv3D 与 GroupedMatmul(14/20)、Depthwise 与 ApplyRotary(18/20)、AddRmsNorm 与 Softmax(19/20)。 - **性能受限**(全通过但 avg_speedup ≪ 1):注意力/矩阵乘簇(GQA/MLA/MHA/GroupedMatmul,约 0.05–0.10)与 Conv(0.007)。 ### Ascend C算子未来优化计划(持续更新cann-bench提交) **第一步,提升正确性。** 功能分(每算子最高 30 分)的获取成本低于性能优化,应优先补齐未通过用例:WeightQuant 当前仅通过 9/20,主要受限于 int4/int8 反量化的精度与边界值处理;Conv3D 与 GroupedMatmul 各通过 14/20;Depthwise、ApplyRotary、AddRmsNorm、Softmax 仅一至两个用例未过。与此同时需消除 no-NPU-perf 抖动,确保每个用例都执行可被 profiler 采集的 NPU 算子,避免个别用例缺失计时而导致整个算子被反作弊清零。 **第二步,为矩阵乘与注意力类算子实现一个可复用的 cube(Mmad)分块 GEMM 核**(L1→L0A/L0B→Mmad→L0C,配合双缓冲)。这类算子目前运行在标量/向量单元上,加速比仅 0.05–0.22:QuantMatmul 0.218、GroupedMatmul 与 GroupedMatmulSwigluQuant 0.09、MHA/MLA/GQA 0.05–0.06、Conv3D 0.007(采用 im2col+cube)。该核预计需数小时开发,但可同时带动上述多个算子的性能。 **第三步,进一步优化当前最高分算子 Foreach**(84.13,已超过参考实现)。其瓶颈集中于大张量用例(4/5/9/20,加速比接近 1×),可通过增大 TILE、引入三级缓冲改善数据搬运重叠,或将 Div+Muls+Add 融合为 Div+Axpy 两步来提升。由于该算子分值最高,即使 5% 的提升对总分的贡献也高于修复一个 0.05 的落后算子。 **Transpose(0.537)与 Cummin(0.132)已接近 c220 的性能上限,建议置于最后或暂缓。** 二者剩余的低速用例——transpose 的 int8/int64 与 A 维极小场景、cummin 的单核长扫描——均受硬件限制:c220 不具备 MicroAPI/RegTensor,厂商基于寄存器的 Sklansky 前缀扫描与 int8/int64 硬件转置在此均不可用;已实现并验证正确的两级 block-scan 在 910c 上无净收益。 # Triton-Ascend 优化结果 ### KernelBench L1 AutoResearch 批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:27.2h(12 op × 50 轮 max,per-op 240min wall-clock cap,--eval-timeout 600s) 状态:8 done / 4 error;batch.log 输出 done : 8 (median 1.43x, best 6.80x, worst 0.29x) ### 结果总表(精度均全部通过) | Level | Problem ID | 算子名称 | 验收类型 | PyTorch 性能(μs) | triton 性能(μs) | triton 优化后性能(μs) | 加速比(无工作流直接生成triton代码) | 加速比(AutoResearch初始生成) | 加速比(AutoResearch优化后) | 轮数 | 状态 | |---|---|---|---|---:|---:|---:|---:|---:|---:|---:|---| | 1 | 36 | RMSNorm | VECTOR | 30,043.1 | timeout | 12,310.6 | 0.03x | — | **2.44x** | 26/50 | error (240min cap) | | 1 | 42 | Max_Pooling_2D | VECTOR | 38,458.2 | 3,344,552.8 | 1,737,993.3 | — | 0.011x | **0.022x** | 33/50 | error (240min cap) | | 1 | 44 | Average_Pooling_1D | VECTOR | 20,584.3 | timeout | 12,235.3 | — | — | **1.68x** | 30/30 | done | | 1 | 45 | Average_Pooling_2D | VECTOR | 3,515,948.4 | 2,745,268.0 | 54,680.1 | — | 1.28x | **64.30x** | 40/50 | error (240min cap) | | 1 | 49 | Max_reduction_over_a_dimension | VECTOR | 21,639.9 | 16,499.2 | 6,961.1 | 0.49x | 1.31x | **3.11x** | 50/50 | done | | 1 | 51 | Argmax_over_a_dimension | VECTOR | 21,642.5 | 40,132.3 | 28,674.7 | — | 0.54x | **0.75x** | 50/50 | done | | 1 | 89 | cumsum | VECTOR | 75,221.2 | 706,479.1 | 22,177.0 | 0.22x | 0.11x | **3.39x** | 50/50 | done | | 1 | 93 | masked_cumsum | VECTOR | 90,032.7 | 716,425.3 | 18,959.6 | — | 0.13x | **4.75x** | 14/50 | error (API socket drop) | | 1 | 4 | Matrix_vector_multiplication | CUBE | 34,602.9 | 7,055.8 | 5,089.7 | 0.16x | 4.90x | **6.80x** | 50/50 | done | | 1 | 10 | 3D_tensor_matrix_multiplication | CUBE | 643.6 | 2,139.5 | 743.3 | 0.74x | 0.30x | **0.87x** | 50/50 | done | | 1 | 14 | Matmul_for_upper_triangular_matrices | CUBE | 1,800.5 | 6,464.0 | 1,525.3 | 0.25x | 0.28x | **1.18x** | 50/50 | done | | 1 | 15 | Matmul_for_lower_triangular_matrices | CUBE | 1,795.9 | 6,186.5 | 6,161.8 | 0.01x | 0.29x | **0.29x** | 50/50 | done | ### NPUKernelBench AutoResearch 较难算子批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:30.6h(11 个 op × 50 轮 max,per-op 240min wall-clock cap) #### 结果总表 | Level | Problem ID | 算子名称 | 算子类型 | 基线性能(us) | 初始triton性能(us) | 无工作流直接生成(us) | 加速比 (AutoResearch初始生成) | 加速比(AutoResearch优化后) | 精度通过率 | |---|---|---|---|---|---|---|---|---|---| | 1 | 18 | Index | vector | 89.30 | 741.19 | 700.85 | 0.12x | 0.13x | 41/41 | | 1 | 23 | RepeatInterleave | vector | 137.32 | 1969.94 | 584.05 | 0.07x | 0.24x | 75/75 | | 1 | 24 | EmbeddingDenseBackward | vector | 2227.56 | 3007.04 | 2894.63 | 0.74x | 0.77x | 30/30 | | 1 | 26 | AvgPool3d | vector | 242.78 | 1982.52 | 1267.77 | 0.12x | 0.19x | 72/72 | | 1 | 31 | IOU | vector | 656.20 | 410.17 | 363.18 | 1.60x | 1.81x | 30/30 | | 2 | 1 | RotaryMul | vector | 189.67 | 451.12 | 419.51 | 0.42x | 0.45x | 50/50 | | 2 | 5 | MoeInitRouting | vector | 484.86 | 932.58 | 927.20 | 0.52x | 0.52x | 53/53 | | 2 | 9 | TopKTopP | vector | 8905.87 | 8982.35 | 8927.97 | 0.99x | 1.00x | 50/50 | | 2 | 17 | EmbeddingWithInitialLayernormBackward | vector | 2353.81 | 2292.43 | 2282.59 | 1.03x | 1.03x | 57/57 | | 2 | 18 | FusedAddRmsnorm | vector | 485.82 | 369.37 | 201.61 | 1.32x | 2.41x | 50/50 | | 2 | 23 | HyenaFftSizePaddingRfft | vector | 941.73 | 622.61 | 517.08 | 1.51x | 1.82x | 49/49 | ## 字段说明 - **基线性能**:PyTorch F.X(...) ref 在 NPU 上跑出的延迟,单位 μs - **triton 性能**:手写 triton seed kernel 跑出的延迟(AR 优化前),单位 μs - **triton 优化后性能**:AR 50 轮 EDIT 后最佳 kernel 的延迟,单位 μs - **加速比** = 基线 / triton(>1x 表示 triton 快于 ref)的几何平均 - **加速比(性能优化后)** = 基线 / triton优化后 的几何平均 - **精度通过率** = 通过 allclose 的 case 数 / 总 case 数(per-dtype atol+rtol,fp32 2^-13/1e-5、fp16 2^-10/1e-3、bf16 2^-7/1e-2) #### 特性增强 Enhancements #### 代码清理 Cleanup ## 关联的Issue 无。 ## 测试 - 本地检查插件目录结构,确认 plugins-official/autoresearch 下包含安装脚本、应用代码、qui See merge request: cann/cannbot-skills!653 | 11 天前 | |
在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Co-authored-by: xchang1121<changxiangyu1@huawei.com> # message auto-generated for no-merge-commit merge: !653 merge master into master 在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Created-by: xchang1121 Commit-by: xchang1121 Merged-by: cann-robot Description: ## 描述 #### 新特性 New Features - 【autoresearch】新增 AutoResearch 官方插件。AutoResearch 是基于 Claude Code / Open Code,面向算子优化任务的自动化算子优化工作流项目,负责组织参考实现、候选 kernel、正确性校验、性能评测、远程ssh评测机/本地agent分离调度、批量执行和多轮优化状态管理。支持triton-ascend算子的优化。 - 【autoresearch】安装后以独立项目方式运行,保留原有 slash command、hooks、配置文件、批跑脚本和 worker 连接(使得运行agent端和评测机分离,仅通过ssh连接)方式,用户可以直接创建任务并连接本地或远端 worker 进行评测。 - 【autoresearch】内置 baseline 记录、状态机推进、失败信息提取和 CodeChecker 检查能力,便于跟踪多轮优化中的正确性、性能变化和失败原因。 ## CANN-bench Ascend C VEC算子优化结果: ### 1a. ForeachAddcdivScalar — 分数 84.13,平均加速比 **1.693**(19/20 用例超过参考) | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 1.570 | 23.5 | 36.9 | ok | | 2 | 1.136 | 78.9 | 89.6 | ok | | 3 | 1.243 | 93.1 | 115.8 | ok | | 4 | 1.001 | 890.7 | 892.0 | ok | | 5 | 1.096 | 438.9 | 481.3 | ok | | 6 | 2.480 | 7.5 | 18.7 | ok | | 7 | 2.229 | 11.4 | 25.3 | ok | | 8 | 2.546 | 8.4 | 21.4 | ok | | 9 | 1.163 | 659.9 | 767.6 | ok | | 10 | 2.219 | 10.9 | 24.3 | ok | | 11 | 2.054 | 15.5 | 31.9 | ok | | 12 | 2.120 | 10.8 | 23.0 | ok | | 13 | 1.567 | 51.6 | 80.8 | ok | | 14 | 1.527 | 28.3 | 43.2 | ok | | 15 | 1.590 | 22.6 | 36.0 | ok | | 16 | 1.389 | 51.4 | 71.4 | ok | | 17 | 2.338 | 12.1 | 28.2 | ok | | 18 | 1.374 | 43.6 | 59.9 | ok | | 19 | 2.322 | 12.0 | 28.0 | ok | | 20 | 0.895 | 118.1 | 105.7 | ok | 小张量(6/7/8/10/11/12/17/19)达到参考的 2–2.5×;大张量(4/5/9/20)卡在带宽墙(~1.0×)。仅用例 20 <1。 ### 1b. Cummin — 分数 55.10,平均加速比 **0.132**(访存受限的扫描) | 用例 | 形状(dtype,dim) | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---|---| | 1 | [1024,1024] f16 −1 | 0.048 | 227.0 | 10.9 | ok | | 2 | [2048,2048] f32 −1 | 0.188 | 464.2 | 87.4 | ok | | 3 | [4096,4096] bf16 −1 | 0.308 | 1088.6 | 335.5 | ok | | 4 | [8192,8192] i32 −1 | 0.326 | 4461.5 | 1454.0 | ok | | 5 | [16384,16384] f16 0 | 0.172 | 18178.5 | 3131.8 | ok | | 6 | [8192,8192] f32 1 | 0.306 | 4754.7 | 1454.0 | ok | | 7 | [1023,1023] bf16 −1 | 0.067 | 259.4 | 17.4 | ok | | 8 | [1009,1021] f16 0 | 0.038 | 278.9 | 10.7 | ok | | 9 | [1537,769] f32 −1 | 0.097 | 253.3 | 24.6 | ok | | 10 | [363,367,373] bf16 1 | 0.278 | 2680.0 | 745.4 | ok | | 11 | [2049,513] f16 −1 | 0.058 | 189.3 | 10.9 | ok | | 12 | [3,7,13,4001] f32 −1 | 0.035 | 654.1 | 22.8 | ok | | 13 | [1000003] bf16 −1 | 0.001 | 24235.7 | 33.3 | ok | | 14 | [11,13,17,67,67] f16 2 | 0.009 | 12046.3 | 113.7 | ok | | 15 | [3,7,11,13,1013] i32 −1 | 0.170 | 373.6 | 63.4 | ok | | 16 | [512,2049] f32 −1 | 0.057 | 383.5 | 21.9 | ok | | 17 | [255,8193] bf16 0 | 0.119 | 234.8 | 27.9 | ok | | 18 | [4097,511] f16 −1 | 0.099 | 220.3 | 21.8 | ok | | 19 | [2,511,2049] f32 1 | 0.154 | 283.9 | 43.6 | ok | | 20 | [4,255,2049] bf16 −1 | 0.100 | 420.0 | 41.8 | ok | 最差:用例 13(单条 1M 通道的一维扫描,仅一个核,0.001)与用例 14(nan/精确标量路径,0.009)。中等 1M 用例(1/7/8/11/12/16)延迟受限,处于 0.03–0.07。 ### 1c. Transpose — 分数 65.16,平均加速比 **0.537** | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 0.021 | 507.5 | 10.9 | ok | | 2 | 1.122 | 35.9 | 40.3 | ok | | 3 | 0.876 | 80.7 | 70.6 | ok | | 4 | 0.528 | 1051.0 | 555.0 | ok | | 5 | 0.062 | 13211.9 | 814.9 | ok | | 6 | 0.099 | 124.2 | 12.3 | ok | | 7 | 0.573 | 19.0 | 10.9 | ok | | 8 | 0.706 | 30.5 | 21.5 | ok | | 9 | 0.625 | 19.7 | 12.3 | ok | | 10 | 1.008 | 646.2 | 651.3 | ok | | 11 | 0.555 | 19.6 | 10.9 | ok | | 12 | 0.672 | 33.9 | 22.8 | ok | | 13 | 0.601 | 16.6 | 10.0 | ok | | 14 | 0.852 | 24.4 | 20.8 | ok | | 15 | 0.428 | 265.9 | 113.7 | ok | | 16 | 0.067 | 1403.6 | 94.6 | ok | | 17 | 0.922 | 23.7 | 21.9 | ok | | 18 | 0.877 | 24.9 | 21.8 | ok | | 19 | 0.014 | 797.3 | 10.9 | ok | | 20 | 0.138 | 158.0 | 21.8 | ok | 多数用例处于参考的 0.5–1.1×。较慢:用例 1、19(0.02,int64/大规模全交换),用例 5(0.06,268 MB int64),用例 16(0.07),用例 6(0.10,A 维极小),用例 20(0.14)。 ## 2. CANN-bench Ascend C 18 个算子逐算子最佳加速比(仅标准 20 用例评测) 按分数从低到高排序。 avg_speedup = 相对官方参考的逐用例加速比均值。 | # | 算子 | 最佳分数 | avg_speedup(vs 参考) | vs_hw | 通过 | |---|---|---|---|---|---| | 1 | WeightQuantBatchMatmul | 33.06 | 0.091 | 0.017 | 9/20 | | 2 | Conv3DBackpropFilter | 36.21 | 0.007 | 0.001 | 14/20 | | 3 | GroupedMatmul | 43.70 | 0.101 | 0.012 | 14/20 | | 4 | DepthwiseConv2D | 48.70 | 0.053 | 0.001 | 18/20 | | 5 | ApplyRotaryPosEmb | 50.06 | 0.090 | 0.010 | 18/20 | | 6 | GQA | 51.84 | 0.048 | 0.009 | 20/20 | | 7 | MLA | 51.88 | 0.049 | 0.005 | 20/20 | | 8 | MHA | 52.20 | 0.062 | 0.014 | 20/20 | | 9 | GroupedMatmulSwigluQuant | 53.48 | 0.088 | 0.011 | 20/20 | | 10 | Gather | 54.35 | 0.212 | 0.007 | 20/20 | | 11 | Cummin | 55.12 | 0.132 | 0.008 | 20/20 | | 12 | QuantMatmul | 56.06 | 0.218 | 0.074 | 20/20 | | 13 | AddRmsNormDynamicQuant | 56.88 | 0.254 | 0.042 | 19/20 | | 14 | TopK | 57.40 | 0.211 | 0.012 | 20/20 | | 15 | Transpose | 65.16 | 0.537 | 0.039 | 20/20 | | 16 | DequantSwigluQuant | 65.84 | 0.559 | 0.082 | 20/20 | | 17 | Softmax | 67.51 | 1.428 | 0.096 | 19/20 | | 18 | ForeachAddcdivScalar | 84.13 | 1.693 | 0.534 | 20/20 | **分数 = 0.2·编译 + 0.3·功能 + 0.5·性能(×100)。** 只要 20/20 全通过,就已拿到 20(编译)+ 30(功能)= **50 分底线**;超过 50 的部分是性能项。因此低分算子分两类失效模式: - **功能受限**(未拿满 30 分底线):WeightQuant(9/20)、Conv3D 与 GroupedMatmul(14/20)、Depthwise 与 ApplyRotary(18/20)、AddRmsNorm 与 Softmax(19/20)。 - **性能受限**(全通过但 avg_speedup ≪ 1):注意力/矩阵乘簇(GQA/MLA/MHA/GroupedMatmul,约 0.05–0.10)与 Conv(0.007)。 ### Ascend C算子未来优化计划(持续更新cann-bench提交) **第一步,提升正确性。** 功能分(每算子最高 30 分)的获取成本低于性能优化,应优先补齐未通过用例:WeightQuant 当前仅通过 9/20,主要受限于 int4/int8 反量化的精度与边界值处理;Conv3D 与 GroupedMatmul 各通过 14/20;Depthwise、ApplyRotary、AddRmsNorm、Softmax 仅一至两个用例未过。与此同时需消除 no-NPU-perf 抖动,确保每个用例都执行可被 profiler 采集的 NPU 算子,避免个别用例缺失计时而导致整个算子被反作弊清零。 **第二步,为矩阵乘与注意力类算子实现一个可复用的 cube(Mmad)分块 GEMM 核**(L1→L0A/L0B→Mmad→L0C,配合双缓冲)。这类算子目前运行在标量/向量单元上,加速比仅 0.05–0.22:QuantMatmul 0.218、GroupedMatmul 与 GroupedMatmulSwigluQuant 0.09、MHA/MLA/GQA 0.05–0.06、Conv3D 0.007(采用 im2col+cube)。该核预计需数小时开发,但可同时带动上述多个算子的性能。 **第三步,进一步优化当前最高分算子 Foreach**(84.13,已超过参考实现)。其瓶颈集中于大张量用例(4/5/9/20,加速比接近 1×),可通过增大 TILE、引入三级缓冲改善数据搬运重叠,或将 Div+Muls+Add 融合为 Div+Axpy 两步来提升。由于该算子分值最高,即使 5% 的提升对总分的贡献也高于修复一个 0.05 的落后算子。 **Transpose(0.537)与 Cummin(0.132)已接近 c220 的性能上限,建议置于最后或暂缓。** 二者剩余的低速用例——transpose 的 int8/int64 与 A 维极小场景、cummin 的单核长扫描——均受硬件限制:c220 不具备 MicroAPI/RegTensor,厂商基于寄存器的 Sklansky 前缀扫描与 int8/int64 硬件转置在此均不可用;已实现并验证正确的两级 block-scan 在 910c 上无净收益。 # Triton-Ascend 优化结果 ### KernelBench L1 AutoResearch 批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:27.2h(12 op × 50 轮 max,per-op 240min wall-clock cap,--eval-timeout 600s) 状态:8 done / 4 error;batch.log 输出 done : 8 (median 1.43x, best 6.80x, worst 0.29x) ### 结果总表(精度均全部通过) | Level | Problem ID | 算子名称 | 验收类型 | PyTorch 性能(μs) | triton 性能(μs) | triton 优化后性能(μs) | 加速比(无工作流直接生成triton代码) | 加速比(AutoResearch初始生成) | 加速比(AutoResearch优化后) | 轮数 | 状态 | |---|---|---|---|---:|---:|---:|---:|---:|---:|---:|---| | 1 | 36 | RMSNorm | VECTOR | 30,043.1 | timeout | 12,310.6 | 0.03x | — | **2.44x** | 26/50 | error (240min cap) | | 1 | 42 | Max_Pooling_2D | VECTOR | 38,458.2 | 3,344,552.8 | 1,737,993.3 | — | 0.011x | **0.022x** | 33/50 | error (240min cap) | | 1 | 44 | Average_Pooling_1D | VECTOR | 20,584.3 | timeout | 12,235.3 | — | — | **1.68x** | 30/30 | done | | 1 | 45 | Average_Pooling_2D | VECTOR | 3,515,948.4 | 2,745,268.0 | 54,680.1 | — | 1.28x | **64.30x** | 40/50 | error (240min cap) | | 1 | 49 | Max_reduction_over_a_dimension | VECTOR | 21,639.9 | 16,499.2 | 6,961.1 | 0.49x | 1.31x | **3.11x** | 50/50 | done | | 1 | 51 | Argmax_over_a_dimension | VECTOR | 21,642.5 | 40,132.3 | 28,674.7 | — | 0.54x | **0.75x** | 50/50 | done | | 1 | 89 | cumsum | VECTOR | 75,221.2 | 706,479.1 | 22,177.0 | 0.22x | 0.11x | **3.39x** | 50/50 | done | | 1 | 93 | masked_cumsum | VECTOR | 90,032.7 | 716,425.3 | 18,959.6 | — | 0.13x | **4.75x** | 14/50 | error (API socket drop) | | 1 | 4 | Matrix_vector_multiplication | CUBE | 34,602.9 | 7,055.8 | 5,089.7 | 0.16x | 4.90x | **6.80x** | 50/50 | done | | 1 | 10 | 3D_tensor_matrix_multiplication | CUBE | 643.6 | 2,139.5 | 743.3 | 0.74x | 0.30x | **0.87x** | 50/50 | done | | 1 | 14 | Matmul_for_upper_triangular_matrices | CUBE | 1,800.5 | 6,464.0 | 1,525.3 | 0.25x | 0.28x | **1.18x** | 50/50 | done | | 1 | 15 | Matmul_for_lower_triangular_matrices | CUBE | 1,795.9 | 6,186.5 | 6,161.8 | 0.01x | 0.29x | **0.29x** | 50/50 | done | ### NPUKernelBench AutoResearch 较难算子批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:30.6h(11 个 op × 50 轮 max,per-op 240min wall-clock cap) #### 结果总表 | Level | Problem ID | 算子名称 | 算子类型 | 基线性能(us) | 初始triton性能(us) | 无工作流直接生成(us) | 加速比 (AutoResearch初始生成) | 加速比(AutoResearch优化后) | 精度通过率 | |---|---|---|---|---|---|---|---|---|---| | 1 | 18 | Index | vector | 89.30 | 741.19 | 700.85 | 0.12x | 0.13x | 41/41 | | 1 | 23 | RepeatInterleave | vector | 137.32 | 1969.94 | 584.05 | 0.07x | 0.24x | 75/75 | | 1 | 24 | EmbeddingDenseBackward | vector | 2227.56 | 3007.04 | 2894.63 | 0.74x | 0.77x | 30/30 | | 1 | 26 | AvgPool3d | vector | 242.78 | 1982.52 | 1267.77 | 0.12x | 0.19x | 72/72 | | 1 | 31 | IOU | vector | 656.20 | 410.17 | 363.18 | 1.60x | 1.81x | 30/30 | | 2 | 1 | RotaryMul | vector | 189.67 | 451.12 | 419.51 | 0.42x | 0.45x | 50/50 | | 2 | 5 | MoeInitRouting | vector | 484.86 | 932.58 | 927.20 | 0.52x | 0.52x | 53/53 | | 2 | 9 | TopKTopP | vector | 8905.87 | 8982.35 | 8927.97 | 0.99x | 1.00x | 50/50 | | 2 | 17 | EmbeddingWithInitialLayernormBackward | vector | 2353.81 | 2292.43 | 2282.59 | 1.03x | 1.03x | 57/57 | | 2 | 18 | FusedAddRmsnorm | vector | 485.82 | 369.37 | 201.61 | 1.32x | 2.41x | 50/50 | | 2 | 23 | HyenaFftSizePaddingRfft | vector | 941.73 | 622.61 | 517.08 | 1.51x | 1.82x | 49/49 | ## 字段说明 - **基线性能**:PyTorch F.X(...) ref 在 NPU 上跑出的延迟,单位 μs - **triton 性能**:手写 triton seed kernel 跑出的延迟(AR 优化前),单位 μs - **triton 优化后性能**:AR 50 轮 EDIT 后最佳 kernel 的延迟,单位 μs - **加速比** = 基线 / triton(>1x 表示 triton 快于 ref)的几何平均 - **加速比(性能优化后)** = 基线 / triton优化后 的几何平均 - **精度通过率** = 通过 allclose 的 case 数 / 总 case 数(per-dtype atol+rtol,fp32 2^-13/1e-5、fp16 2^-10/1e-3、bf16 2^-7/1e-2) #### 特性增强 Enhancements #### 代码清理 Cleanup ## 关联的Issue 无。 ## 测试 - 本地检查插件目录结构,确认 plugins-official/autoresearch 下包含安装脚本、应用代码、qui See merge request: cann/cannbot-skills!653 | 11 天前 | |
在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Co-authored-by: xchang1121<changxiangyu1@huawei.com> # message auto-generated for no-merge-commit merge: !653 merge master into master 在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Created-by: xchang1121 Commit-by: xchang1121 Merged-by: cann-robot Description: ## 描述 #### 新特性 New Features - 【autoresearch】新增 AutoResearch 官方插件。AutoResearch 是基于 Claude Code / Open Code,面向算子优化任务的自动化算子优化工作流项目,负责组织参考实现、候选 kernel、正确性校验、性能评测、远程ssh评测机/本地agent分离调度、批量执行和多轮优化状态管理。支持triton-ascend算子的优化。 - 【autoresearch】安装后以独立项目方式运行,保留原有 slash command、hooks、配置文件、批跑脚本和 worker 连接(使得运行agent端和评测机分离,仅通过ssh连接)方式,用户可以直接创建任务并连接本地或远端 worker 进行评测。 - 【autoresearch】内置 baseline 记录、状态机推进、失败信息提取和 CodeChecker 检查能力,便于跟踪多轮优化中的正确性、性能变化和失败原因。 ## CANN-bench Ascend C VEC算子优化结果: ### 1a. ForeachAddcdivScalar — 分数 84.13,平均加速比 **1.693**(19/20 用例超过参考) | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 1.570 | 23.5 | 36.9 | ok | | 2 | 1.136 | 78.9 | 89.6 | ok | | 3 | 1.243 | 93.1 | 115.8 | ok | | 4 | 1.001 | 890.7 | 892.0 | ok | | 5 | 1.096 | 438.9 | 481.3 | ok | | 6 | 2.480 | 7.5 | 18.7 | ok | | 7 | 2.229 | 11.4 | 25.3 | ok | | 8 | 2.546 | 8.4 | 21.4 | ok | | 9 | 1.163 | 659.9 | 767.6 | ok | | 10 | 2.219 | 10.9 | 24.3 | ok | | 11 | 2.054 | 15.5 | 31.9 | ok | | 12 | 2.120 | 10.8 | 23.0 | ok | | 13 | 1.567 | 51.6 | 80.8 | ok | | 14 | 1.527 | 28.3 | 43.2 | ok | | 15 | 1.590 | 22.6 | 36.0 | ok | | 16 | 1.389 | 51.4 | 71.4 | ok | | 17 | 2.338 | 12.1 | 28.2 | ok | | 18 | 1.374 | 43.6 | 59.9 | ok | | 19 | 2.322 | 12.0 | 28.0 | ok | | 20 | 0.895 | 118.1 | 105.7 | ok | 小张量(6/7/8/10/11/12/17/19)达到参考的 2–2.5×;大张量(4/5/9/20)卡在带宽墙(~1.0×)。仅用例 20 <1。 ### 1b. Cummin — 分数 55.10,平均加速比 **0.132**(访存受限的扫描) | 用例 | 形状(dtype,dim) | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---|---| | 1 | [1024,1024] f16 −1 | 0.048 | 227.0 | 10.9 | ok | | 2 | [2048,2048] f32 −1 | 0.188 | 464.2 | 87.4 | ok | | 3 | [4096,4096] bf16 −1 | 0.308 | 1088.6 | 335.5 | ok | | 4 | [8192,8192] i32 −1 | 0.326 | 4461.5 | 1454.0 | ok | | 5 | [16384,16384] f16 0 | 0.172 | 18178.5 | 3131.8 | ok | | 6 | [8192,8192] f32 1 | 0.306 | 4754.7 | 1454.0 | ok | | 7 | [1023,1023] bf16 −1 | 0.067 | 259.4 | 17.4 | ok | | 8 | [1009,1021] f16 0 | 0.038 | 278.9 | 10.7 | ok | | 9 | [1537,769] f32 −1 | 0.097 | 253.3 | 24.6 | ok | | 10 | [363,367,373] bf16 1 | 0.278 | 2680.0 | 745.4 | ok | | 11 | [2049,513] f16 −1 | 0.058 | 189.3 | 10.9 | ok | | 12 | [3,7,13,4001] f32 −1 | 0.035 | 654.1 | 22.8 | ok | | 13 | [1000003] bf16 −1 | 0.001 | 24235.7 | 33.3 | ok | | 14 | [11,13,17,67,67] f16 2 | 0.009 | 12046.3 | 113.7 | ok | | 15 | [3,7,11,13,1013] i32 −1 | 0.170 | 373.6 | 63.4 | ok | | 16 | [512,2049] f32 −1 | 0.057 | 383.5 | 21.9 | ok | | 17 | [255,8193] bf16 0 | 0.119 | 234.8 | 27.9 | ok | | 18 | [4097,511] f16 −1 | 0.099 | 220.3 | 21.8 | ok | | 19 | [2,511,2049] f32 1 | 0.154 | 283.9 | 43.6 | ok | | 20 | [4,255,2049] bf16 −1 | 0.100 | 420.0 | 41.8 | ok | 最差:用例 13(单条 1M 通道的一维扫描,仅一个核,0.001)与用例 14(nan/精确标量路径,0.009)。中等 1M 用例(1/7/8/11/12/16)延迟受限,处于 0.03–0.07。 ### 1c. Transpose — 分数 65.16,平均加速比 **0.537** | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 0.021 | 507.5 | 10.9 | ok | | 2 | 1.122 | 35.9 | 40.3 | ok | | 3 | 0.876 | 80.7 | 70.6 | ok | | 4 | 0.528 | 1051.0 | 555.0 | ok | | 5 | 0.062 | 13211.9 | 814.9 | ok | | 6 | 0.099 | 124.2 | 12.3 | ok | | 7 | 0.573 | 19.0 | 10.9 | ok | | 8 | 0.706 | 30.5 | 21.5 | ok | | 9 | 0.625 | 19.7 | 12.3 | ok | | 10 | 1.008 | 646.2 | 651.3 | ok | | 11 | 0.555 | 19.6 | 10.9 | ok | | 12 | 0.672 | 33.9 | 22.8 | ok | | 13 | 0.601 | 16.6 | 10.0 | ok | | 14 | 0.852 | 24.4 | 20.8 | ok | | 15 | 0.428 | 265.9 | 113.7 | ok | | 16 | 0.067 | 1403.6 | 94.6 | ok | | 17 | 0.922 | 23.7 | 21.9 | ok | | 18 | 0.877 | 24.9 | 21.8 | ok | | 19 | 0.014 | 797.3 | 10.9 | ok | | 20 | 0.138 | 158.0 | 21.8 | ok | 多数用例处于参考的 0.5–1.1×。较慢:用例 1、19(0.02,int64/大规模全交换),用例 5(0.06,268 MB int64),用例 16(0.07),用例 6(0.10,A 维极小),用例 20(0.14)。 ## 2. CANN-bench Ascend C 18 个算子逐算子最佳加速比(仅标准 20 用例评测) 按分数从低到高排序。 avg_speedup = 相对官方参考的逐用例加速比均值。 | # | 算子 | 最佳分数 | avg_speedup(vs 参考) | vs_hw | 通过 | |---|---|---|---|---|---| | 1 | WeightQuantBatchMatmul | 33.06 | 0.091 | 0.017 | 9/20 | | 2 | Conv3DBackpropFilter | 36.21 | 0.007 | 0.001 | 14/20 | | 3 | GroupedMatmul | 43.70 | 0.101 | 0.012 | 14/20 | | 4 | DepthwiseConv2D | 48.70 | 0.053 | 0.001 | 18/20 | | 5 | ApplyRotaryPosEmb | 50.06 | 0.090 | 0.010 | 18/20 | | 6 | GQA | 51.84 | 0.048 | 0.009 | 20/20 | | 7 | MLA | 51.88 | 0.049 | 0.005 | 20/20 | | 8 | MHA | 52.20 | 0.062 | 0.014 | 20/20 | | 9 | GroupedMatmulSwigluQuant | 53.48 | 0.088 | 0.011 | 20/20 | | 10 | Gather | 54.35 | 0.212 | 0.007 | 20/20 | | 11 | Cummin | 55.12 | 0.132 | 0.008 | 20/20 | | 12 | QuantMatmul | 56.06 | 0.218 | 0.074 | 20/20 | | 13 | AddRmsNormDynamicQuant | 56.88 | 0.254 | 0.042 | 19/20 | | 14 | TopK | 57.40 | 0.211 | 0.012 | 20/20 | | 15 | Transpose | 65.16 | 0.537 | 0.039 | 20/20 | | 16 | DequantSwigluQuant | 65.84 | 0.559 | 0.082 | 20/20 | | 17 | Softmax | 67.51 | 1.428 | 0.096 | 19/20 | | 18 | ForeachAddcdivScalar | 84.13 | 1.693 | 0.534 | 20/20 | **分数 = 0.2·编译 + 0.3·功能 + 0.5·性能(×100)。** 只要 20/20 全通过,就已拿到 20(编译)+ 30(功能)= **50 分底线**;超过 50 的部分是性能项。因此低分算子分两类失效模式: - **功能受限**(未拿满 30 分底线):WeightQuant(9/20)、Conv3D 与 GroupedMatmul(14/20)、Depthwise 与 ApplyRotary(18/20)、AddRmsNorm 与 Softmax(19/20)。 - **性能受限**(全通过但 avg_speedup ≪ 1):注意力/矩阵乘簇(GQA/MLA/MHA/GroupedMatmul,约 0.05–0.10)与 Conv(0.007)。 ### Ascend C算子未来优化计划(持续更新cann-bench提交) **第一步,提升正确性。** 功能分(每算子最高 30 分)的获取成本低于性能优化,应优先补齐未通过用例:WeightQuant 当前仅通过 9/20,主要受限于 int4/int8 反量化的精度与边界值处理;Conv3D 与 GroupedMatmul 各通过 14/20;Depthwise、ApplyRotary、AddRmsNorm、Softmax 仅一至两个用例未过。与此同时需消除 no-NPU-perf 抖动,确保每个用例都执行可被 profiler 采集的 NPU 算子,避免个别用例缺失计时而导致整个算子被反作弊清零。 **第二步,为矩阵乘与注意力类算子实现一个可复用的 cube(Mmad)分块 GEMM 核**(L1→L0A/L0B→Mmad→L0C,配合双缓冲)。这类算子目前运行在标量/向量单元上,加速比仅 0.05–0.22:QuantMatmul 0.218、GroupedMatmul 与 GroupedMatmulSwigluQuant 0.09、MHA/MLA/GQA 0.05–0.06、Conv3D 0.007(采用 im2col+cube)。该核预计需数小时开发,但可同时带动上述多个算子的性能。 **第三步,进一步优化当前最高分算子 Foreach**(84.13,已超过参考实现)。其瓶颈集中于大张量用例(4/5/9/20,加速比接近 1×),可通过增大 TILE、引入三级缓冲改善数据搬运重叠,或将 Div+Muls+Add 融合为 Div+Axpy 两步来提升。由于该算子分值最高,即使 5% 的提升对总分的贡献也高于修复一个 0.05 的落后算子。 **Transpose(0.537)与 Cummin(0.132)已接近 c220 的性能上限,建议置于最后或暂缓。** 二者剩余的低速用例——transpose 的 int8/int64 与 A 维极小场景、cummin 的单核长扫描——均受硬件限制:c220 不具备 MicroAPI/RegTensor,厂商基于寄存器的 Sklansky 前缀扫描与 int8/int64 硬件转置在此均不可用;已实现并验证正确的两级 block-scan 在 910c 上无净收益。 # Triton-Ascend 优化结果 ### KernelBench L1 AutoResearch 批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:27.2h(12 op × 50 轮 max,per-op 240min wall-clock cap,--eval-timeout 600s) 状态:8 done / 4 error;batch.log 输出 done : 8 (median 1.43x, best 6.80x, worst 0.29x) ### 结果总表(精度均全部通过) | Level | Problem ID | 算子名称 | 验收类型 | PyTorch 性能(μs) | triton 性能(μs) | triton 优化后性能(μs) | 加速比(无工作流直接生成triton代码) | 加速比(AutoResearch初始生成) | 加速比(AutoResearch优化后) | 轮数 | 状态 | |---|---|---|---|---:|---:|---:|---:|---:|---:|---:|---| | 1 | 36 | RMSNorm | VECTOR | 30,043.1 | timeout | 12,310.6 | 0.03x | — | **2.44x** | 26/50 | error (240min cap) | | 1 | 42 | Max_Pooling_2D | VECTOR | 38,458.2 | 3,344,552.8 | 1,737,993.3 | — | 0.011x | **0.022x** | 33/50 | error (240min cap) | | 1 | 44 | Average_Pooling_1D | VECTOR | 20,584.3 | timeout | 12,235.3 | — | — | **1.68x** | 30/30 | done | | 1 | 45 | Average_Pooling_2D | VECTOR | 3,515,948.4 | 2,745,268.0 | 54,680.1 | — | 1.28x | **64.30x** | 40/50 | error (240min cap) | | 1 | 49 | Max_reduction_over_a_dimension | VECTOR | 21,639.9 | 16,499.2 | 6,961.1 | 0.49x | 1.31x | **3.11x** | 50/50 | done | | 1 | 51 | Argmax_over_a_dimension | VECTOR | 21,642.5 | 40,132.3 | 28,674.7 | — | 0.54x | **0.75x** | 50/50 | done | | 1 | 89 | cumsum | VECTOR | 75,221.2 | 706,479.1 | 22,177.0 | 0.22x | 0.11x | **3.39x** | 50/50 | done | | 1 | 93 | masked_cumsum | VECTOR | 90,032.7 | 716,425.3 | 18,959.6 | — | 0.13x | **4.75x** | 14/50 | error (API socket drop) | | 1 | 4 | Matrix_vector_multiplication | CUBE | 34,602.9 | 7,055.8 | 5,089.7 | 0.16x | 4.90x | **6.80x** | 50/50 | done | | 1 | 10 | 3D_tensor_matrix_multiplication | CUBE | 643.6 | 2,139.5 | 743.3 | 0.74x | 0.30x | **0.87x** | 50/50 | done | | 1 | 14 | Matmul_for_upper_triangular_matrices | CUBE | 1,800.5 | 6,464.0 | 1,525.3 | 0.25x | 0.28x | **1.18x** | 50/50 | done | | 1 | 15 | Matmul_for_lower_triangular_matrices | CUBE | 1,795.9 | 6,186.5 | 6,161.8 | 0.01x | 0.29x | **0.29x** | 50/50 | done | ### NPUKernelBench AutoResearch 较难算子批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:30.6h(11 个 op × 50 轮 max,per-op 240min wall-clock cap) #### 结果总表 | Level | Problem ID | 算子名称 | 算子类型 | 基线性能(us) | 初始triton性能(us) | 无工作流直接生成(us) | 加速比 (AutoResearch初始生成) | 加速比(AutoResearch优化后) | 精度通过率 | |---|---|---|---|---|---|---|---|---|---| | 1 | 18 | Index | vector | 89.30 | 741.19 | 700.85 | 0.12x | 0.13x | 41/41 | | 1 | 23 | RepeatInterleave | vector | 137.32 | 1969.94 | 584.05 | 0.07x | 0.24x | 75/75 | | 1 | 24 | EmbeddingDenseBackward | vector | 2227.56 | 3007.04 | 2894.63 | 0.74x | 0.77x | 30/30 | | 1 | 26 | AvgPool3d | vector | 242.78 | 1982.52 | 1267.77 | 0.12x | 0.19x | 72/72 | | 1 | 31 | IOU | vector | 656.20 | 410.17 | 363.18 | 1.60x | 1.81x | 30/30 | | 2 | 1 | RotaryMul | vector | 189.67 | 451.12 | 419.51 | 0.42x | 0.45x | 50/50 | | 2 | 5 | MoeInitRouting | vector | 484.86 | 932.58 | 927.20 | 0.52x | 0.52x | 53/53 | | 2 | 9 | TopKTopP | vector | 8905.87 | 8982.35 | 8927.97 | 0.99x | 1.00x | 50/50 | | 2 | 17 | EmbeddingWithInitialLayernormBackward | vector | 2353.81 | 2292.43 | 2282.59 | 1.03x | 1.03x | 57/57 | | 2 | 18 | FusedAddRmsnorm | vector | 485.82 | 369.37 | 201.61 | 1.32x | 2.41x | 50/50 | | 2 | 23 | HyenaFftSizePaddingRfft | vector | 941.73 | 622.61 | 517.08 | 1.51x | 1.82x | 49/49 | ## 字段说明 - **基线性能**:PyTorch F.X(...) ref 在 NPU 上跑出的延迟,单位 μs - **triton 性能**:手写 triton seed kernel 跑出的延迟(AR 优化前),单位 μs - **triton 优化后性能**:AR 50 轮 EDIT 后最佳 kernel 的延迟,单位 μs - **加速比** = 基线 / triton(>1x 表示 triton 快于 ref)的几何平均 - **加速比(性能优化后)** = 基线 / triton优化后 的几何平均 - **精度通过率** = 通过 allclose 的 case 数 / 总 case 数(per-dtype atol+rtol,fp32 2^-13/1e-5、fp16 2^-10/1e-3、bf16 2^-7/1e-2) #### 特性增强 Enhancements #### 代码清理 Cleanup ## 关联的Issue 无。 ## 测试 - 本地检查插件目录结构,确认 plugins-official/autoresearch 下包含安装脚本、应用代码、qui See merge request: cann/cannbot-skills!653 | 11 天前 | |
在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Co-authored-by: xchang1121<changxiangyu1@huawei.com> # message auto-generated for no-merge-commit merge: !653 merge master into master 在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Created-by: xchang1121 Commit-by: xchang1121 Merged-by: cann-robot Description: ## 描述 #### 新特性 New Features - 【autoresearch】新增 AutoResearch 官方插件。AutoResearch 是基于 Claude Code / Open Code,面向算子优化任务的自动化算子优化工作流项目,负责组织参考实现、候选 kernel、正确性校验、性能评测、远程ssh评测机/本地agent分离调度、批量执行和多轮优化状态管理。支持triton-ascend算子的优化。 - 【autoresearch】安装后以独立项目方式运行,保留原有 slash command、hooks、配置文件、批跑脚本和 worker 连接(使得运行agent端和评测机分离,仅通过ssh连接)方式,用户可以直接创建任务并连接本地或远端 worker 进行评测。 - 【autoresearch】内置 baseline 记录、状态机推进、失败信息提取和 CodeChecker 检查能力,便于跟踪多轮优化中的正确性、性能变化和失败原因。 ## CANN-bench Ascend C VEC算子优化结果: ### 1a. ForeachAddcdivScalar — 分数 84.13,平均加速比 **1.693**(19/20 用例超过参考) | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 1.570 | 23.5 | 36.9 | ok | | 2 | 1.136 | 78.9 | 89.6 | ok | | 3 | 1.243 | 93.1 | 115.8 | ok | | 4 | 1.001 | 890.7 | 892.0 | ok | | 5 | 1.096 | 438.9 | 481.3 | ok | | 6 | 2.480 | 7.5 | 18.7 | ok | | 7 | 2.229 | 11.4 | 25.3 | ok | | 8 | 2.546 | 8.4 | 21.4 | ok | | 9 | 1.163 | 659.9 | 767.6 | ok | | 10 | 2.219 | 10.9 | 24.3 | ok | | 11 | 2.054 | 15.5 | 31.9 | ok | | 12 | 2.120 | 10.8 | 23.0 | ok | | 13 | 1.567 | 51.6 | 80.8 | ok | | 14 | 1.527 | 28.3 | 43.2 | ok | | 15 | 1.590 | 22.6 | 36.0 | ok | | 16 | 1.389 | 51.4 | 71.4 | ok | | 17 | 2.338 | 12.1 | 28.2 | ok | | 18 | 1.374 | 43.6 | 59.9 | ok | | 19 | 2.322 | 12.0 | 28.0 | ok | | 20 | 0.895 | 118.1 | 105.7 | ok | 小张量(6/7/8/10/11/12/17/19)达到参考的 2–2.5×;大张量(4/5/9/20)卡在带宽墙(~1.0×)。仅用例 20 <1。 ### 1b. Cummin — 分数 55.10,平均加速比 **0.132**(访存受限的扫描) | 用例 | 形状(dtype,dim) | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---|---| | 1 | [1024,1024] f16 −1 | 0.048 | 227.0 | 10.9 | ok | | 2 | [2048,2048] f32 −1 | 0.188 | 464.2 | 87.4 | ok | | 3 | [4096,4096] bf16 −1 | 0.308 | 1088.6 | 335.5 | ok | | 4 | [8192,8192] i32 −1 | 0.326 | 4461.5 | 1454.0 | ok | | 5 | [16384,16384] f16 0 | 0.172 | 18178.5 | 3131.8 | ok | | 6 | [8192,8192] f32 1 | 0.306 | 4754.7 | 1454.0 | ok | | 7 | [1023,1023] bf16 −1 | 0.067 | 259.4 | 17.4 | ok | | 8 | [1009,1021] f16 0 | 0.038 | 278.9 | 10.7 | ok | | 9 | [1537,769] f32 −1 | 0.097 | 253.3 | 24.6 | ok | | 10 | [363,367,373] bf16 1 | 0.278 | 2680.0 | 745.4 | ok | | 11 | [2049,513] f16 −1 | 0.058 | 189.3 | 10.9 | ok | | 12 | [3,7,13,4001] f32 −1 | 0.035 | 654.1 | 22.8 | ok | | 13 | [1000003] bf16 −1 | 0.001 | 24235.7 | 33.3 | ok | | 14 | [11,13,17,67,67] f16 2 | 0.009 | 12046.3 | 113.7 | ok | | 15 | [3,7,11,13,1013] i32 −1 | 0.170 | 373.6 | 63.4 | ok | | 16 | [512,2049] f32 −1 | 0.057 | 383.5 | 21.9 | ok | | 17 | [255,8193] bf16 0 | 0.119 | 234.8 | 27.9 | ok | | 18 | [4097,511] f16 −1 | 0.099 | 220.3 | 21.8 | ok | | 19 | [2,511,2049] f32 1 | 0.154 | 283.9 | 43.6 | ok | | 20 | [4,255,2049] bf16 −1 | 0.100 | 420.0 | 41.8 | ok | 最差:用例 13(单条 1M 通道的一维扫描,仅一个核,0.001)与用例 14(nan/精确标量路径,0.009)。中等 1M 用例(1/7/8/11/12/16)延迟受限,处于 0.03–0.07。 ### 1c. Transpose — 分数 65.16,平均加速比 **0.537** | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 0.021 | 507.5 | 10.9 | ok | | 2 | 1.122 | 35.9 | 40.3 | ok | | 3 | 0.876 | 80.7 | 70.6 | ok | | 4 | 0.528 | 1051.0 | 555.0 | ok | | 5 | 0.062 | 13211.9 | 814.9 | ok | | 6 | 0.099 | 124.2 | 12.3 | ok | | 7 | 0.573 | 19.0 | 10.9 | ok | | 8 | 0.706 | 30.5 | 21.5 | ok | | 9 | 0.625 | 19.7 | 12.3 | ok | | 10 | 1.008 | 646.2 | 651.3 | ok | | 11 | 0.555 | 19.6 | 10.9 | ok | | 12 | 0.672 | 33.9 | 22.8 | ok | | 13 | 0.601 | 16.6 | 10.0 | ok | | 14 | 0.852 | 24.4 | 20.8 | ok | | 15 | 0.428 | 265.9 | 113.7 | ok | | 16 | 0.067 | 1403.6 | 94.6 | ok | | 17 | 0.922 | 23.7 | 21.9 | ok | | 18 | 0.877 | 24.9 | 21.8 | ok | | 19 | 0.014 | 797.3 | 10.9 | ok | | 20 | 0.138 | 158.0 | 21.8 | ok | 多数用例处于参考的 0.5–1.1×。较慢:用例 1、19(0.02,int64/大规模全交换),用例 5(0.06,268 MB int64),用例 16(0.07),用例 6(0.10,A 维极小),用例 20(0.14)。 ## 2. CANN-bench Ascend C 18 个算子逐算子最佳加速比(仅标准 20 用例评测) 按分数从低到高排序。 avg_speedup = 相对官方参考的逐用例加速比均值。 | # | 算子 | 最佳分数 | avg_speedup(vs 参考) | vs_hw | 通过 | |---|---|---|---|---|---| | 1 | WeightQuantBatchMatmul | 33.06 | 0.091 | 0.017 | 9/20 | | 2 | Conv3DBackpropFilter | 36.21 | 0.007 | 0.001 | 14/20 | | 3 | GroupedMatmul | 43.70 | 0.101 | 0.012 | 14/20 | | 4 | DepthwiseConv2D | 48.70 | 0.053 | 0.001 | 18/20 | | 5 | ApplyRotaryPosEmb | 50.06 | 0.090 | 0.010 | 18/20 | | 6 | GQA | 51.84 | 0.048 | 0.009 | 20/20 | | 7 | MLA | 51.88 | 0.049 | 0.005 | 20/20 | | 8 | MHA | 52.20 | 0.062 | 0.014 | 20/20 | | 9 | GroupedMatmulSwigluQuant | 53.48 | 0.088 | 0.011 | 20/20 | | 10 | Gather | 54.35 | 0.212 | 0.007 | 20/20 | | 11 | Cummin | 55.12 | 0.132 | 0.008 | 20/20 | | 12 | QuantMatmul | 56.06 | 0.218 | 0.074 | 20/20 | | 13 | AddRmsNormDynamicQuant | 56.88 | 0.254 | 0.042 | 19/20 | | 14 | TopK | 57.40 | 0.211 | 0.012 | 20/20 | | 15 | Transpose | 65.16 | 0.537 | 0.039 | 20/20 | | 16 | DequantSwigluQuant | 65.84 | 0.559 | 0.082 | 20/20 | | 17 | Softmax | 67.51 | 1.428 | 0.096 | 19/20 | | 18 | ForeachAddcdivScalar | 84.13 | 1.693 | 0.534 | 20/20 | **分数 = 0.2·编译 + 0.3·功能 + 0.5·性能(×100)。** 只要 20/20 全通过,就已拿到 20(编译)+ 30(功能)= **50 分底线**;超过 50 的部分是性能项。因此低分算子分两类失效模式: - **功能受限**(未拿满 30 分底线):WeightQuant(9/20)、Conv3D 与 GroupedMatmul(14/20)、Depthwise 与 ApplyRotary(18/20)、AddRmsNorm 与 Softmax(19/20)。 - **性能受限**(全通过但 avg_speedup ≪ 1):注意力/矩阵乘簇(GQA/MLA/MHA/GroupedMatmul,约 0.05–0.10)与 Conv(0.007)。 ### Ascend C算子未来优化计划(持续更新cann-bench提交) **第一步,提升正确性。** 功能分(每算子最高 30 分)的获取成本低于性能优化,应优先补齐未通过用例:WeightQuant 当前仅通过 9/20,主要受限于 int4/int8 反量化的精度与边界值处理;Conv3D 与 GroupedMatmul 各通过 14/20;Depthwise、ApplyRotary、AddRmsNorm、Softmax 仅一至两个用例未过。与此同时需消除 no-NPU-perf 抖动,确保每个用例都执行可被 profiler 采集的 NPU 算子,避免个别用例缺失计时而导致整个算子被反作弊清零。 **第二步,为矩阵乘与注意力类算子实现一个可复用的 cube(Mmad)分块 GEMM 核**(L1→L0A/L0B→Mmad→L0C,配合双缓冲)。这类算子目前运行在标量/向量单元上,加速比仅 0.05–0.22:QuantMatmul 0.218、GroupedMatmul 与 GroupedMatmulSwigluQuant 0.09、MHA/MLA/GQA 0.05–0.06、Conv3D 0.007(采用 im2col+cube)。该核预计需数小时开发,但可同时带动上述多个算子的性能。 **第三步,进一步优化当前最高分算子 Foreach**(84.13,已超过参考实现)。其瓶颈集中于大张量用例(4/5/9/20,加速比接近 1×),可通过增大 TILE、引入三级缓冲改善数据搬运重叠,或将 Div+Muls+Add 融合为 Div+Axpy 两步来提升。由于该算子分值最高,即使 5% 的提升对总分的贡献也高于修复一个 0.05 的落后算子。 **Transpose(0.537)与 Cummin(0.132)已接近 c220 的性能上限,建议置于最后或暂缓。** 二者剩余的低速用例——transpose 的 int8/int64 与 A 维极小场景、cummin 的单核长扫描——均受硬件限制:c220 不具备 MicroAPI/RegTensor,厂商基于寄存器的 Sklansky 前缀扫描与 int8/int64 硬件转置在此均不可用;已实现并验证正确的两级 block-scan 在 910c 上无净收益。 # Triton-Ascend 优化结果 ### KernelBench L1 AutoResearch 批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:27.2h(12 op × 50 轮 max,per-op 240min wall-clock cap,--eval-timeout 600s) 状态:8 done / 4 error;batch.log 输出 done : 8 (median 1.43x, best 6.80x, worst 0.29x) ### 结果总表(精度均全部通过) | Level | Problem ID | 算子名称 | 验收类型 | PyTorch 性能(μs) | triton 性能(μs) | triton 优化后性能(μs) | 加速比(无工作流直接生成triton代码) | 加速比(AutoResearch初始生成) | 加速比(AutoResearch优化后) | 轮数 | 状态 | |---|---|---|---|---:|---:|---:|---:|---:|---:|---:|---| | 1 | 36 | RMSNorm | VECTOR | 30,043.1 | timeout | 12,310.6 | 0.03x | — | **2.44x** | 26/50 | error (240min cap) | | 1 | 42 | Max_Pooling_2D | VECTOR | 38,458.2 | 3,344,552.8 | 1,737,993.3 | — | 0.011x | **0.022x** | 33/50 | error (240min cap) | | 1 | 44 | Average_Pooling_1D | VECTOR | 20,584.3 | timeout | 12,235.3 | — | — | **1.68x** | 30/30 | done | | 1 | 45 | Average_Pooling_2D | VECTOR | 3,515,948.4 | 2,745,268.0 | 54,680.1 | — | 1.28x | **64.30x** | 40/50 | error (240min cap) | | 1 | 49 | Max_reduction_over_a_dimension | VECTOR | 21,639.9 | 16,499.2 | 6,961.1 | 0.49x | 1.31x | **3.11x** | 50/50 | done | | 1 | 51 | Argmax_over_a_dimension | VECTOR | 21,642.5 | 40,132.3 | 28,674.7 | — | 0.54x | **0.75x** | 50/50 | done | | 1 | 89 | cumsum | VECTOR | 75,221.2 | 706,479.1 | 22,177.0 | 0.22x | 0.11x | **3.39x** | 50/50 | done | | 1 | 93 | masked_cumsum | VECTOR | 90,032.7 | 716,425.3 | 18,959.6 | — | 0.13x | **4.75x** | 14/50 | error (API socket drop) | | 1 | 4 | Matrix_vector_multiplication | CUBE | 34,602.9 | 7,055.8 | 5,089.7 | 0.16x | 4.90x | **6.80x** | 50/50 | done | | 1 | 10 | 3D_tensor_matrix_multiplication | CUBE | 643.6 | 2,139.5 | 743.3 | 0.74x | 0.30x | **0.87x** | 50/50 | done | | 1 | 14 | Matmul_for_upper_triangular_matrices | CUBE | 1,800.5 | 6,464.0 | 1,525.3 | 0.25x | 0.28x | **1.18x** | 50/50 | done | | 1 | 15 | Matmul_for_lower_triangular_matrices | CUBE | 1,795.9 | 6,186.5 | 6,161.8 | 0.01x | 0.29x | **0.29x** | 50/50 | done | ### NPUKernelBench AutoResearch 较难算子批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:30.6h(11 个 op × 50 轮 max,per-op 240min wall-clock cap) #### 结果总表 | Level | Problem ID | 算子名称 | 算子类型 | 基线性能(us) | 初始triton性能(us) | 无工作流直接生成(us) | 加速比 (AutoResearch初始生成) | 加速比(AutoResearch优化后) | 精度通过率 | |---|---|---|---|---|---|---|---|---|---| | 1 | 18 | Index | vector | 89.30 | 741.19 | 700.85 | 0.12x | 0.13x | 41/41 | | 1 | 23 | RepeatInterleave | vector | 137.32 | 1969.94 | 584.05 | 0.07x | 0.24x | 75/75 | | 1 | 24 | EmbeddingDenseBackward | vector | 2227.56 | 3007.04 | 2894.63 | 0.74x | 0.77x | 30/30 | | 1 | 26 | AvgPool3d | vector | 242.78 | 1982.52 | 1267.77 | 0.12x | 0.19x | 72/72 | | 1 | 31 | IOU | vector | 656.20 | 410.17 | 363.18 | 1.60x | 1.81x | 30/30 | | 2 | 1 | RotaryMul | vector | 189.67 | 451.12 | 419.51 | 0.42x | 0.45x | 50/50 | | 2 | 5 | MoeInitRouting | vector | 484.86 | 932.58 | 927.20 | 0.52x | 0.52x | 53/53 | | 2 | 9 | TopKTopP | vector | 8905.87 | 8982.35 | 8927.97 | 0.99x | 1.00x | 50/50 | | 2 | 17 | EmbeddingWithInitialLayernormBackward | vector | 2353.81 | 2292.43 | 2282.59 | 1.03x | 1.03x | 57/57 | | 2 | 18 | FusedAddRmsnorm | vector | 485.82 | 369.37 | 201.61 | 1.32x | 2.41x | 50/50 | | 2 | 23 | HyenaFftSizePaddingRfft | vector | 941.73 | 622.61 | 517.08 | 1.51x | 1.82x | 49/49 | ## 字段说明 - **基线性能**:PyTorch F.X(...) ref 在 NPU 上跑出的延迟,单位 μs - **triton 性能**:手写 triton seed kernel 跑出的延迟(AR 优化前),单位 μs - **triton 优化后性能**:AR 50 轮 EDIT 后最佳 kernel 的延迟,单位 μs - **加速比** = 基线 / triton(>1x 表示 triton 快于 ref)的几何平均 - **加速比(性能优化后)** = 基线 / triton优化后 的几何平均 - **精度通过率** = 通过 allclose 的 case 数 / 总 case 数(per-dtype atol+rtol,fp32 2^-13/1e-5、fp16 2^-10/1e-3、bf16 2^-7/1e-2) #### 特性增强 Enhancements #### 代码清理 Cleanup ## 关联的Issue 无。 ## 测试 - 本地检查插件目录结构,确认 plugins-official/autoresearch 下包含安装脚本、应用代码、qui See merge request: cann/cannbot-skills!653 | 11 天前 | |
在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Co-authored-by: xchang1121<changxiangyu1@huawei.com> # message auto-generated for no-merge-commit merge: !653 merge master into master 在plugins-community增加triton ascend、CATLASS、ascend c的AutoResearch算子优化工作流 Created-by: xchang1121 Commit-by: xchang1121 Merged-by: cann-robot Description: ## 描述 #### 新特性 New Features - 【autoresearch】新增 AutoResearch 官方插件。AutoResearch 是基于 Claude Code / Open Code,面向算子优化任务的自动化算子优化工作流项目,负责组织参考实现、候选 kernel、正确性校验、性能评测、远程ssh评测机/本地agent分离调度、批量执行和多轮优化状态管理。支持triton-ascend算子的优化。 - 【autoresearch】安装后以独立项目方式运行,保留原有 slash command、hooks、配置文件、批跑脚本和 worker 连接(使得运行agent端和评测机分离,仅通过ssh连接)方式,用户可以直接创建任务并连接本地或远端 worker 进行评测。 - 【autoresearch】内置 baseline 记录、状态机推进、失败信息提取和 CodeChecker 检查能力,便于跟踪多轮优化中的正确性、性能变化和失败原因。 ## CANN-bench Ascend C VEC算子优化结果: ### 1a. ForeachAddcdivScalar — 分数 84.13,平均加速比 **1.693**(19/20 用例超过参考) | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 1.570 | 23.5 | 36.9 | ok | | 2 | 1.136 | 78.9 | 89.6 | ok | | 3 | 1.243 | 93.1 | 115.8 | ok | | 4 | 1.001 | 890.7 | 892.0 | ok | | 5 | 1.096 | 438.9 | 481.3 | ok | | 6 | 2.480 | 7.5 | 18.7 | ok | | 7 | 2.229 | 11.4 | 25.3 | ok | | 8 | 2.546 | 8.4 | 21.4 | ok | | 9 | 1.163 | 659.9 | 767.6 | ok | | 10 | 2.219 | 10.9 | 24.3 | ok | | 11 | 2.054 | 15.5 | 31.9 | ok | | 12 | 2.120 | 10.8 | 23.0 | ok | | 13 | 1.567 | 51.6 | 80.8 | ok | | 14 | 1.527 | 28.3 | 43.2 | ok | | 15 | 1.590 | 22.6 | 36.0 | ok | | 16 | 1.389 | 51.4 | 71.4 | ok | | 17 | 2.338 | 12.1 | 28.2 | ok | | 18 | 1.374 | 43.6 | 59.9 | ok | | 19 | 2.322 | 12.0 | 28.0 | ok | | 20 | 0.895 | 118.1 | 105.7 | ok | 小张量(6/7/8/10/11/12/17/19)达到参考的 2–2.5×;大张量(4/5/9/20)卡在带宽墙(~1.0×)。仅用例 20 <1。 ### 1b. Cummin — 分数 55.10,平均加速比 **0.132**(访存受限的扫描) | 用例 | 形状(dtype,dim) | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---|---| | 1 | [1024,1024] f16 −1 | 0.048 | 227.0 | 10.9 | ok | | 2 | [2048,2048] f32 −1 | 0.188 | 464.2 | 87.4 | ok | | 3 | [4096,4096] bf16 −1 | 0.308 | 1088.6 | 335.5 | ok | | 4 | [8192,8192] i32 −1 | 0.326 | 4461.5 | 1454.0 | ok | | 5 | [16384,16384] f16 0 | 0.172 | 18178.5 | 3131.8 | ok | | 6 | [8192,8192] f32 1 | 0.306 | 4754.7 | 1454.0 | ok | | 7 | [1023,1023] bf16 −1 | 0.067 | 259.4 | 17.4 | ok | | 8 | [1009,1021] f16 0 | 0.038 | 278.9 | 10.7 | ok | | 9 | [1537,769] f32 −1 | 0.097 | 253.3 | 24.6 | ok | | 10 | [363,367,373] bf16 1 | 0.278 | 2680.0 | 745.4 | ok | | 11 | [2049,513] f16 −1 | 0.058 | 189.3 | 10.9 | ok | | 12 | [3,7,13,4001] f32 −1 | 0.035 | 654.1 | 22.8 | ok | | 13 | [1000003] bf16 −1 | 0.001 | 24235.7 | 33.3 | ok | | 14 | [11,13,17,67,67] f16 2 | 0.009 | 12046.3 | 113.7 | ok | | 15 | [3,7,11,13,1013] i32 −1 | 0.170 | 373.6 | 63.4 | ok | | 16 | [512,2049] f32 −1 | 0.057 | 383.5 | 21.9 | ok | | 17 | [255,8193] bf16 0 | 0.119 | 234.8 | 27.9 | ok | | 18 | [4097,511] f16 −1 | 0.099 | 220.3 | 21.8 | ok | | 19 | [2,511,2049] f32 1 | 0.154 | 283.9 | 43.6 | ok | | 20 | [4,255,2049] bf16 −1 | 0.100 | 420.0 | 41.8 | ok | 最差:用例 13(单条 1M 通道的一维扫描,仅一个核,0.001)与用例 14(nan/精确标量路径,0.009)。中等 1M 用例(1/7/8/11/12/16)延迟受限,处于 0.03–0.07。 ### 1c. Transpose — 分数 65.16,平均加速比 **0.537** | 用例 | 加速比 vs 参考 | 我方 µs | 基线 µs | 通过 | |---|---|---|---|---| | 1 | 0.021 | 507.5 | 10.9 | ok | | 2 | 1.122 | 35.9 | 40.3 | ok | | 3 | 0.876 | 80.7 | 70.6 | ok | | 4 | 0.528 | 1051.0 | 555.0 | ok | | 5 | 0.062 | 13211.9 | 814.9 | ok | | 6 | 0.099 | 124.2 | 12.3 | ok | | 7 | 0.573 | 19.0 | 10.9 | ok | | 8 | 0.706 | 30.5 | 21.5 | ok | | 9 | 0.625 | 19.7 | 12.3 | ok | | 10 | 1.008 | 646.2 | 651.3 | ok | | 11 | 0.555 | 19.6 | 10.9 | ok | | 12 | 0.672 | 33.9 | 22.8 | ok | | 13 | 0.601 | 16.6 | 10.0 | ok | | 14 | 0.852 | 24.4 | 20.8 | ok | | 15 | 0.428 | 265.9 | 113.7 | ok | | 16 | 0.067 | 1403.6 | 94.6 | ok | | 17 | 0.922 | 23.7 | 21.9 | ok | | 18 | 0.877 | 24.9 | 21.8 | ok | | 19 | 0.014 | 797.3 | 10.9 | ok | | 20 | 0.138 | 158.0 | 21.8 | ok | 多数用例处于参考的 0.5–1.1×。较慢:用例 1、19(0.02,int64/大规模全交换),用例 5(0.06,268 MB int64),用例 16(0.07),用例 6(0.10,A 维极小),用例 20(0.14)。 ## 2. CANN-bench Ascend C 18 个算子逐算子最佳加速比(仅标准 20 用例评测) 按分数从低到高排序。 avg_speedup = 相对官方参考的逐用例加速比均值。 | # | 算子 | 最佳分数 | avg_speedup(vs 参考) | vs_hw | 通过 | |---|---|---|---|---|---| | 1 | WeightQuantBatchMatmul | 33.06 | 0.091 | 0.017 | 9/20 | | 2 | Conv3DBackpropFilter | 36.21 | 0.007 | 0.001 | 14/20 | | 3 | GroupedMatmul | 43.70 | 0.101 | 0.012 | 14/20 | | 4 | DepthwiseConv2D | 48.70 | 0.053 | 0.001 | 18/20 | | 5 | ApplyRotaryPosEmb | 50.06 | 0.090 | 0.010 | 18/20 | | 6 | GQA | 51.84 | 0.048 | 0.009 | 20/20 | | 7 | MLA | 51.88 | 0.049 | 0.005 | 20/20 | | 8 | MHA | 52.20 | 0.062 | 0.014 | 20/20 | | 9 | GroupedMatmulSwigluQuant | 53.48 | 0.088 | 0.011 | 20/20 | | 10 | Gather | 54.35 | 0.212 | 0.007 | 20/20 | | 11 | Cummin | 55.12 | 0.132 | 0.008 | 20/20 | | 12 | QuantMatmul | 56.06 | 0.218 | 0.074 | 20/20 | | 13 | AddRmsNormDynamicQuant | 56.88 | 0.254 | 0.042 | 19/20 | | 14 | TopK | 57.40 | 0.211 | 0.012 | 20/20 | | 15 | Transpose | 65.16 | 0.537 | 0.039 | 20/20 | | 16 | DequantSwigluQuant | 65.84 | 0.559 | 0.082 | 20/20 | | 17 | Softmax | 67.51 | 1.428 | 0.096 | 19/20 | | 18 | ForeachAddcdivScalar | 84.13 | 1.693 | 0.534 | 20/20 | **分数 = 0.2·编译 + 0.3·功能 + 0.5·性能(×100)。** 只要 20/20 全通过,就已拿到 20(编译)+ 30(功能)= **50 分底线**;超过 50 的部分是性能项。因此低分算子分两类失效模式: - **功能受限**(未拿满 30 分底线):WeightQuant(9/20)、Conv3D 与 GroupedMatmul(14/20)、Depthwise 与 ApplyRotary(18/20)、AddRmsNorm 与 Softmax(19/20)。 - **性能受限**(全通过但 avg_speedup ≪ 1):注意力/矩阵乘簇(GQA/MLA/MHA/GroupedMatmul,约 0.05–0.10)与 Conv(0.007)。 ### Ascend C算子未来优化计划(持续更新cann-bench提交) **第一步,提升正确性。** 功能分(每算子最高 30 分)的获取成本低于性能优化,应优先补齐未通过用例:WeightQuant 当前仅通过 9/20,主要受限于 int4/int8 反量化的精度与边界值处理;Conv3D 与 GroupedMatmul 各通过 14/20;Depthwise、ApplyRotary、AddRmsNorm、Softmax 仅一至两个用例未过。与此同时需消除 no-NPU-perf 抖动,确保每个用例都执行可被 profiler 采集的 NPU 算子,避免个别用例缺失计时而导致整个算子被反作弊清零。 **第二步,为矩阵乘与注意力类算子实现一个可复用的 cube(Mmad)分块 GEMM 核**(L1→L0A/L0B→Mmad→L0C,配合双缓冲)。这类算子目前运行在标量/向量单元上,加速比仅 0.05–0.22:QuantMatmul 0.218、GroupedMatmul 与 GroupedMatmulSwigluQuant 0.09、MHA/MLA/GQA 0.05–0.06、Conv3D 0.007(采用 im2col+cube)。该核预计需数小时开发,但可同时带动上述多个算子的性能。 **第三步,进一步优化当前最高分算子 Foreach**(84.13,已超过参考实现)。其瓶颈集中于大张量用例(4/5/9/20,加速比接近 1×),可通过增大 TILE、引入三级缓冲改善数据搬运重叠,或将 Div+Muls+Add 融合为 Div+Axpy 两步来提升。由于该算子分值最高,即使 5% 的提升对总分的贡献也高于修复一个 0.05 的落后算子。 **Transpose(0.537)与 Cummin(0.132)已接近 c220 的性能上限,建议置于最后或暂缓。** 二者剩余的低速用例——transpose 的 int8/int64 与 A 维极小场景、cummin 的单核长扫描——均受硬件限制:c220 不具备 MicroAPI/RegTensor,厂商基于寄存器的 Sklansky 前缀扫描与 int8/int64 硬件转置在此均不可用;已实现并验证正确的两级 block-scan 在 910c 上无净收益。 # Triton-Ascend 优化结果 ### KernelBench L1 AutoResearch 批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:27.2h(12 op × 50 轮 max,per-op 240min wall-clock cap,--eval-timeout 600s) 状态:8 done / 4 error;batch.log 输出 done : 8 (median 1.43x, best 6.80x, worst 0.29x) ### 结果总表(精度均全部通过) | Level | Problem ID | 算子名称 | 验收类型 | PyTorch 性能(μs) | triton 性能(μs) | triton 优化后性能(μs) | 加速比(无工作流直接生成triton代码) | 加速比(AutoResearch初始生成) | 加速比(AutoResearch优化后) | 轮数 | 状态 | |---|---|---|---|---:|---:|---:|---:|---:|---:|---:|---| | 1 | 36 | RMSNorm | VECTOR | 30,043.1 | timeout | 12,310.6 | 0.03x | — | **2.44x** | 26/50 | error (240min cap) | | 1 | 42 | Max_Pooling_2D | VECTOR | 38,458.2 | 3,344,552.8 | 1,737,993.3 | — | 0.011x | **0.022x** | 33/50 | error (240min cap) | | 1 | 44 | Average_Pooling_1D | VECTOR | 20,584.3 | timeout | 12,235.3 | — | — | **1.68x** | 30/30 | done | | 1 | 45 | Average_Pooling_2D | VECTOR | 3,515,948.4 | 2,745,268.0 | 54,680.1 | — | 1.28x | **64.30x** | 40/50 | error (240min cap) | | 1 | 49 | Max_reduction_over_a_dimension | VECTOR | 21,639.9 | 16,499.2 | 6,961.1 | 0.49x | 1.31x | **3.11x** | 50/50 | done | | 1 | 51 | Argmax_over_a_dimension | VECTOR | 21,642.5 | 40,132.3 | 28,674.7 | — | 0.54x | **0.75x** | 50/50 | done | | 1 | 89 | cumsum | VECTOR | 75,221.2 | 706,479.1 | 22,177.0 | 0.22x | 0.11x | **3.39x** | 50/50 | done | | 1 | 93 | masked_cumsum | VECTOR | 90,032.7 | 716,425.3 | 18,959.6 | — | 0.13x | **4.75x** | 14/50 | error (API socket drop) | | 1 | 4 | Matrix_vector_multiplication | CUBE | 34,602.9 | 7,055.8 | 5,089.7 | 0.16x | 4.90x | **6.80x** | 50/50 | done | | 1 | 10 | 3D_tensor_matrix_multiplication | CUBE | 643.6 | 2,139.5 | 743.3 | 0.74x | 0.30x | **0.87x** | 50/50 | done | | 1 | 14 | Matmul_for_upper_triangular_matrices | CUBE | 1,800.5 | 6,464.0 | 1,525.3 | 0.25x | 0.28x | **1.18x** | 50/50 | done | | 1 | 15 | Matmul_for_lower_triangular_matrices | CUBE | 1,795.9 | 6,186.5 | 6,161.8 | 0.01x | 0.29x | **0.29x** | 50/50 | done | ### NPUKernelBench AutoResearch 较难算子批跑结果 跑批环境:Ascend 910B3 + torch 2.7.1 + torch_npu 2.7.1 + triton-ascend 3.2.0 批跑总耗时:30.6h(11 个 op × 50 轮 max,per-op 240min wall-clock cap) #### 结果总表 | Level | Problem ID | 算子名称 | 算子类型 | 基线性能(us) | 初始triton性能(us) | 无工作流直接生成(us) | 加速比 (AutoResearch初始生成) | 加速比(AutoResearch优化后) | 精度通过率 | |---|---|---|---|---|---|---|---|---|---| | 1 | 18 | Index | vector | 89.30 | 741.19 | 700.85 | 0.12x | 0.13x | 41/41 | | 1 | 23 | RepeatInterleave | vector | 137.32 | 1969.94 | 584.05 | 0.07x | 0.24x | 75/75 | | 1 | 24 | EmbeddingDenseBackward | vector | 2227.56 | 3007.04 | 2894.63 | 0.74x | 0.77x | 30/30 | | 1 | 26 | AvgPool3d | vector | 242.78 | 1982.52 | 1267.77 | 0.12x | 0.19x | 72/72 | | 1 | 31 | IOU | vector | 656.20 | 410.17 | 363.18 | 1.60x | 1.81x | 30/30 | | 2 | 1 | RotaryMul | vector | 189.67 | 451.12 | 419.51 | 0.42x | 0.45x | 50/50 | | 2 | 5 | MoeInitRouting | vector | 484.86 | 932.58 | 927.20 | 0.52x | 0.52x | 53/53 | | 2 | 9 | TopKTopP | vector | 8905.87 | 8982.35 | 8927.97 | 0.99x | 1.00x | 50/50 | | 2 | 17 | EmbeddingWithInitialLayernormBackward | vector | 2353.81 | 2292.43 | 2282.59 | 1.03x | 1.03x | 57/57 | | 2 | 18 | FusedAddRmsnorm | vector | 485.82 | 369.37 | 201.61 | 1.32x | 2.41x | 50/50 | | 2 | 23 | HyenaFftSizePaddingRfft | vector | 941.73 | 622.61 | 517.08 | 1.51x | 1.82x | 49/49 | ## 字段说明 - **基线性能**:PyTorch F.X(...) ref 在 NPU 上跑出的延迟,单位 μs - **triton 性能**:手写 triton seed kernel 跑出的延迟(AR 优化前),单位 μs - **triton 优化后性能**:AR 50 轮 EDIT 后最佳 kernel 的延迟,单位 μs - **加速比** = 基线 / triton(>1x 表示 triton 快于 ref)的几何平均 - **加速比(性能优化后)** = 基线 / triton优化后 的几何平均 - **精度通过率** = 通过 allclose 的 case 数 / 总 case 数(per-dtype atol+rtol,fp32 2^-13/1e-5、fp16 2^-10/1e-3、bf16 2^-7/1e-2) #### 特性增强 Enhancements #### 代码清理 Cleanup ## 关联的Issue 无。 ## 测试 - 本地检查插件目录结构,确认 plugins-official/autoresearch 下包含安装脚本、应用代码、qui See merge request: cann/cannbot-skills!653 | 11 天前 |
Op AutoResearch
一个独立的、由代码 Agent 驱动的算子内核迭代优化项目。它把可度量的内核验证与性能评测组织为:
BASELINE -> PLAN -> EDIT -> EVAL -> KEEP / DISCARD / FAIL
-> REPLAN / DIAGNOSE / FINISH
本仓库自带完整工作区、KernelVerifier、Ascend worker、设备租约池、代码检查器、Claude Code/OpenCode 接入和批量任务工具。当前支持 triton_ascend、ascendc 和 ascendc_catlass。
安装
python -m pip install -e .
# 需要启动 HTTP worker 时:
python -m pip install -e ".[worker]"
Ascend 运行时需另行安装,包括 PyTorch/MindSpore、torch_npu、CANN,以及任务所需的 Triton Ascend 或 CATLASS;这些大型运行时不由本项目的通用依赖自动安装。
快速开始
把 reference 与 seed kernel 放入 workspace/,在仓库根目录启动 Claude Code 或 OpenCode,然后执行:
/autoresearch --ref workspace/<op>_ref.py --kernel workspace/<op>_kernel.py \
--op-name <op> --devices <device-id>
监控任务:
python scripts/dashboard.py <task_dir> --watch
详细用法见 AUTORESEARCH.md,Agent 运行约束见 AGENTS.md。
Worker
本地启动、查询和停止:
op-autoresearch worker --start --backend ascend --arch ascend910b3 --devices 0
op-autoresearch worker --status
op-autoresearch worker --stop
远端 worker 在 config.yaml 的 remote_worker.hosts 中配置;repo_path 指向远端本仓库根目录:
op-autoresearch worker --remote-host eval-host --start --backend ascend --devices 0
op-autoresearch worker --remote-host eval-host --status
op-autoresearch worker --remote-host eval-host --stop
目录
scripts/ 状态机、评测桥、批处理与工作流
src/op_autoresearch/ verifier、worker、设备池及共享运行时
.claude/ Claude Code 命令、hooks 与诊断 Agent
.opencode/ OpenCode 命令、插件与外层循环
ar_examples/ 三种受支持 DSL 的最小示例
tests/ 工作区契约测试与移植的组件单测
复制来源的精确提交记录在 SOURCE_REVISION,开源组件元数据记录在
README.OpenSource。AKG 衍生运行时代码保留 Apache-2.0 许可和 NOTICE;
CANN 示例代码适用 CANN-2.0,完整文本分别见 LICENSE-APACHE 和 LICENSE。