AscendOptimizer:华为昇腾NPU算子优化的“经验型”智能体
在AI硬件加速领域,华为昇腾(Ascend)NPU正成为国产算力的重要代表。然而,与成熟的英伟达CUDA生态相比,昇腾生态仍面临一个关键挑战:公开可参考的算子优化实现较少,开发者往往需要从零开始摸索,效率低下。近日,一项名为AscendOptimizer的研究提出了一种创新的解决方案——通过一个“经验型”智能体(Episodic Agent),将硬件执行反馈转化为可学习的优化知识,从而系统性地提升昇腾C(AscendC)算子的性能。
昇腾算子优化的双重瓶颈
研究指出,昇腾C算子优化面临双重知识瓶颈:
- 生态参考缺失:CUDA拥有大量开源优化代码和社区经验,而昇腾生态的公开参考实现相对匮乏,开发者缺乏学习范本。
- 优化结构复杂:昇腾算子的高性能实现依赖于两个紧密耦合的部分:
- 主机端平铺程序(Host-side Tiling Program):负责数据移动的编排。
- 内核程序(Kernel Program):负责指令调度和流水线处理。
这两部分需要协同优化,任何一方的不足都会拖累整体性能,增加了手动调优的难度。
AscendOptimizer 如何工作?
AscendOptimizer 的核心思想是将执行转化为经验,通过一个闭环的智能体系统,自动探索和积累优化知识。其工作流程分为两个主要阶段:
1. 主机端调优:基于性能剖析的进化搜索
在主机端,AscendOptimizer 采用 “剖析在环”(Profiling-in-the-loop)的进化搜索策略。它直接根据硬件反馈(如实际执行延迟),探索有效的平铺和数据移动配置。这种方法避免了依赖人工经验或静态规则,能够直接从硬件行为中发现高性能配置。
2. 内核端优化:从“坏”到“好”的轨迹挖掘
在内核端,AscendOptimizer 引入了一种巧妙的 “回退优化”(Rewinding Optimized Kernels) 技术。具体而言,它系统性地对已优化的内核进行“去优化”,生成一系列从性能较差到性能优异的代码变更轨迹。这些轨迹中蕴含了可迁移的优化模式(Optimization Motifs),例如特定的循环展开策略或内存访问模式。
这些模式被提炼并存储到一个**可检索的经验库(Experience Bank)**中。当优化新算子时,智能体可以从中检索相关模式,指导代码重写,从而加速优化过程。
3. 闭环迭代:持续提升
AscendOptimizer 以交替循环的方式运行主机端调优和内核端重写。每一轮迭代都利用上一轮的经验,不断扩展可行的优化空间,并将延迟逐步降低。这种闭环设计使得系统能够持续学习,适应不同的算子特性和硬件状态。
实际效果如何?
研究团队在一个包含 127 个真实昇腾C算子 的基准测试上评估了 AscendOptimizer。结果显示:
- 整体性能提升:相比开源基线,AscendOptimizer 实现了 1.19 倍的几何平均加速比。
- 胜率可观:49.61% 的算子 性能超过了现有的参考实现。
- 基准对比优势:其表现也优于其他强大的智能体和搜索基线方法。
这些数据表明,AscendOptimizer 不仅能有效弥补生态知识缺口,还能在实际场景中带来显著的性能增益。
对AI硬件生态的意义
AscendOptimizer 的出现,为国产AI芯片的软件生态建设提供了一条新思路:
- 降低开发门槛:通过自动化经验积累,减轻了开发者对底层硬件细节的依赖,让更多工程师能高效参与昇腾应用开发。
- 加速生态成熟:系统生成的优化模式和经验库,本身可以成为生态的共享资产,逐步填补公开参考的空白。
- 推动软硬协同:它体现了“从硬件反馈中学习”的软硬协同设计理念,未来或可应用于其他定制AI加速器的优化场景。
随着AI算力需求持续增长,类似 AscendOptimizer 的智能优化工具,有望成为打破生态壁垒、释放硬件潜力的关键推手。
