内容提要
华为AscendNPU IR编译器架构师海丽娟在技术沙龙中介绍了其开源底座,该底座基于MLIR构建,提供Tile级抽象,支持多语言接入昇腾硬件,适配A2/A3至昇腾950架构,优化CV流水并行、寄存器融合、SIMT支持及多核切分,提升算子开发效率。项目已开源,社区提供任务和免费算力。
延伸解读
开源底座降低多语言接入昇腾门槛
AscendNPU IR 基于 MLIR 构建,提供 Tile 级抽象,使 Triton 等第三方语言和编译器能够接入昇腾硬件。这种开放架构让开发者无需深入了解底层硬件细节,即可使用熟悉的语言编写算子,从而降低开发门槛,提升效率。
昇腾950新特性聚焦性能优化
针对昇腾950,AscendNPU IR 引入了 Regbased SIMD 和 SIMT 支持,优化了寄存器融合和 CV 流水并行。这些改进旨在提升 Attention 等算子的性能,通过紧耦合数据交互和自动多核切分,充分利用硬件算力。
社区共建与免费算力支持
AscendNPU IR 和 Triton-Ascend 已开源,社区提供 SIG 例会、开源实习和社区任务,并免费提供 HiDevLab 算力平台(100小时时长)。开发者可参与生态共建,获取实践机会和奖励。
Q&A
AscendNPU IR是什么?它基于什么构建?
AscendNPU IR是华为毕昇编译器的组件,是基于MLIR构建的昇腾硬件Tile级抽象,服务于底层编译优化,向下对接LLVM IR,最终编译到昇腾硬件二进制。
Triton编程语言为什么高效易用?
Triton使用类Python语法,提供Block Level Tile级编程,屏蔽底层硬件细节,降低算子开发门槛。它基于MLIR构建多级IR抽象,支持针对不同硬件的深度优化。
AscendNPU IR的架构分为哪两层?各自的作用是什么?
AscendNPU IR分为硬件无关层HFusion和硬件相关层HIVM。HFusion负责上层多维度融合优化,包括数据类型和OP规范化预处理及Auto Schedule;HIVM负责昇腾硬件的高层抽象,包括核映射、片上内存映射和处理单元映射。
昇腾950相比A2/A3在架构上有哪些主要变化?
昇腾950在硬件相关层HIVM从MemBased SIMD扩展到支持Regbased SIMD和SIMT,CV融合编译从通过Global Memory交互改为紧耦合方式,实现更高效的数据交互。
昇腾950的Vector Regbased SIMD架构对编译优化有哪些影响?
影响包括:面向Regbased的向量化,数据基于寄存器计算;寄存器粒度融合,减少Load-Store;AVE方言抽象,屏蔽硬件掩码差异,使能随路优化。
昇腾950新增的SIMT单元有什么作用?编译流程如何处理SIMT和SIMD?
SIMT单元支持离散访存场景加速,使Vector核有三种计算模式:纯SIMD、纯SIMT、混合交替。编译流程先做融合分析,识别适合SIMT的部分,分别编译后再合并,并进行建模分析。
CV紧耦合数据交换对Attention算子优化有什么帮助?
昇腾950上Cube和Vector核通过片上内存直接交换数据,避免了Global Memory的往返,大幅提升Attention类算子的性能。
AscendNPU IR最新版本在CV数据交互方面做了哪些增强?
新版本增强了InsertCVLoadStore Pass,通过全局跨复杂控制流的推导补齐CV数据交互,插入确定性锚点,进行强制类型转换操作,解决不同内存层级冲突,并针对不同代际采用不同打通方式。
MultiBuffer在复杂控制流下如何实现?
引入独立Buffer计数器,跟随复杂控制流进行分支轮转,准确跟踪Slot变化;同时alloc操作需在Cube和Vector公共循环层可见,保证变换一致性。
AutoBlockify是什么?它有什么作用?
AutoBlockify是多核变换技术,将不同逻辑核归并到一个for循环,交给软件循环调度,可应用MultiBuffer和流水并行优化,提升开箱性能。