8 月 1 日,HyperAI 主办的 Meet AI Compiler 技术沙龙第 9 期如期举行。来自智源研究院、TileRT 团队、腾讯、华为、智元创新等企业与研究机构的分享嘉宾,围绕 AI 编译器 在语言表达、算子计算、推理执行与场景落地等方向的协同演进展开深度研讨,聚焦技术痛点、实践方案和行业趋势。
华为 AscendNPU IR 架构师海丽娟以「AscendNPU IR:编译底座开源开放,支持多语言接入昇腾」为主题,系统介绍了昇腾毕昇编译器组件 AscendNPU IR 的整体架构与设计理念,并结合昇腾 950 的新特性、技术迭代优势与社区建设,拆解了这套开源底座如何支持多种前端语言接入。

在分享现场,海丽娟还详细解读了编译器面向新硬件的架构演进,为开发者展示了从上层语言到底层硬件的完整编译链路。

为什么 Triton 编程高效易用?
Triton 同时兼顾高效与易用,优势从何而来?它采用类 Python 语法,提供 Block Level Tile 级编程,屏蔽了核内硬件内存、指令与流水等底层细节,从而降低算子开发门槛。Tile 编程模型让开发者专注于数据切分和 Tensor OP 抽象:核间调度仍由用户控制,而核内访存合并、Shared-Memory 管理则交给编译器自动完成。
更关键的是,Triton 方言和 Triton 官方 GPU 编译器都基于 MLIR 构建多级 IR 抽象,可针对不同硬件做深度优化。

AscendNPU IR 持续进行架构优化
AscendNPU IR 是基于 MLIR 构建的昇腾硬件 Tile 级抽象,向下对接 LLVM IR,最终编译到昇腾硬件二进制;向上可接入 Triton 等三方语言与编译器。其技术特征包括:面向昇腾硬件自下而上的抽象,抽象核内内存、数据搬运等资源;提供 Tile 级 OP,跨架构统一支持 A2/A3 与昇腾 950 的 SIMD、SIMT 硬件;基于 MLIR 生态的开放性和可扩展性,便于更多上层语言接入。

从 A2/A3 到今年最新上市的昇腾 950,AscendNPU IR 的编译架构保持两层设计:上层硬件无关层 HFusion,下层硬件相关层 HIVM。HFusion 基于社区 Linalg 和扩展 OP,完成数据类型与 OP 规范化预处理、Auto Schedule 等融合优化。

HIVM 负责昇腾硬件高层抽象,依次完成核映射编译、片上内存映射和处理单元映射。核映射编译会将高层 Tile 表达拆分到 Cube 核与 Vector 核,自动补齐核间数据通信、同步与 Workspace 内存管理,并进行 CV 流水并行优化。片上内存映射则把逻辑 Tensor 推导到对应物理内存,完成 Cube 的分型矩阵格式推导与地址分配。处理单元映射通过流水同步、向量化和张量化,使能高性能硬件指令。
与前代相比,昇腾 950 的 HIVM 从 Membased SIMD 扩展到 Regbased SIMD 和 SIMT;CV 融合编译也从 Global Memory 交互升级为紧耦合数据通路。整体上层稳定,Tile 编译则有较大升级。
Vector Regbased SIMD 架构演进
MemBased SIMD 阶段,Vector 计算基于片上 Unified Buffer 完成,指令直接操作片上内存。昇腾 950 新增寄存器层级,数据在高速寄存器中计算,编译工作随之发生三点变化:面向 Regbased 的向量化,将 Tensor 操作映射到固定位宽的寄存器指令,Load-Compute-Store 形成循环;寄存器粒度融合,通过 Cost Model 与搜索算法把多个 Triton OP 融合到一个 loop,减少数据进出片上内存;AVE 方言抽象,扩展昇腾亲和的 Vector 方言,屏蔽底层掩码差异,并合并随路操作指令。

Vector SIMT 与 SIMT+SIMD 融合编译
昇腾 950 新增 SIMT 单元后,Vector 核可支持纯 SIMD、纯 SIMT,以及 SIMT+SIMD 混合执行三种模式。离散访存适合 SIMT,稠密计算则可继续走 SIMD。编译流程会先做融合分析,识别适合 SIMT 的代码段,再分别进行 SIMD 与 SIMT 编译,最后合并为整体 Vector 计算,并对硬件特性进行建模。

CV 松紧耦合编译优化
A2/A3 上 Cube 和 Vector 只能通过 Global Memory 片外显存交换数据;而昇腾 950 的 Cube 结果可直接从 L0C 拷贝到 Vector 片上内存,反向亦然。这条紧耦合快速数据通路对 Attention 类算子性能帮助很大。CV 优化的关键技术包括 CV 流水并行,自动隐藏时延并充分利用 Cube/Vector 核资源;以及 AutoSubTiling,利用昇腾 950 的 1:2 配比将 Vector 操作对半切块,让两个 Vector 核并行计算。

最新版本编译器功能泛化工作
最新 AscendNPU IR 版本在以下五个方向做了功能泛化。
1. CV 数据交互功能泛化
Triton 算子中 Cube 与 Vector 计算可能分布在控制流不同分支,无法靠简单 Pattern Match 插入数据搬运。新版本增强了 InsertCVLoadStore Pass,通过全局跨控制流推导补齐 CV 数据交互:先插入确定性锚点(矩阵乘输入在 L1、输出在 L0C,向量 OP 输入输出在 UB),再基于锚点插入强制类型转换,跨控制流传播内存层级。若推导中出现层级冲突,就插入 Load-Store 或拷贝语句打通数据。A2/A3 通过 Global Memory Load-Store 交互,而昇腾 950 直接走片上拷贝。

2. MultiBuffer 增强
MultiBuffer 是流水并行的重要前提。此前实现只支持 for 循环,复用循环变量轮转 Buffer Slot,无法覆盖 while 与嵌套控制流。新方案引入独立 Buffer 计数器,随控制流分支轮转,准确跟踪 Slot。同时将 alloc 提升至 Cube/Vector 公共循环层,保证两侧对 multibuffer 变换的一致性。

3. AutoBlockify 默认开启
写 CUDA 或 Triton 算子通常会切出大量逻辑 block,但在昇腾上多次调度开销较高。AutoBlockify 将逻辑核归并到软件循环内调度,并允许在循环中应用 MultiBuffer、流水并行等优化。默认开启后,编译期会自动检查 Kernel 是否无核间同步,并修改 GridNum,将核间调度转换为核内循环。

4. CV Pipeline 多模式探索
以 FlashAttention 为代表的算子包含多段 Cube/Vector 任务,串行执行会导致计算互相等待。CVPipelining Pass 会分析 Cube 与 Vector 代码段依赖,找到边界点,划分 Scope,再按调度算法生成多 buffer 完成流水并行。支持 Unroll、Skew 和动态等模式,不同负载可选择最优策略。

5. CV 1:2 场景增强
昇腾 950 采用 1 个 Cube 核配 2 个 Vector 核的结构,CV 1:2 切分需要将 Tensor 尽量等分给两个 Vector 核。流程包括全局维度分析、插入切分标记、逐 OP 向根节点冒泡,最终完成切分;若遇到不可切场景则回退到 1:1。此外,针对 FP8 等 reduce 轴压力大的场景,支持 reduce 轴切分,通过 Global Memory 交换中间结果并二次归约;动态 shape 场景也增强了切分能力。

Triton-Ascend、AscendNPU IR 已开源共建
AscendNPU IR 已开源到昇腾社区,社区活动日历中有 AscendNPU IR 社区 SIG 双周例会,开发者可关注研讨议题和会议纪要。
昇腾社区还开放了开源实习项目和社区任务,任务难度分层,覆盖文档优化、单元测试补齐、Triton 算子迁移、新架构算子设计等不同类型,开发者可根据经验选择参与。

在 AscendNPU IR 与 Triton-Ascend 的 开源仓 主页,可以找到社区任务快速链接和认领流程;每位开发者同时只能领取一个任务,开发过程全程互动开放。

如果没有昇腾开发环境,社区提供免费的算力平台 HiDevLab( https://hidevlab.huawei.com/home );注册申请成功后默认有 100 小时免费时长,可用于任务开发与验证。

感谢大家关注!
云栈社区后续也会持续跟进 AI 编译器与昇腾生态的技术进展,欢迎开发者一起交流。