从0开始的昇腾课堂算子学习笔记
收藏回复举报
从0开始的昇腾课堂算子学习笔记
新人帖
发表于2024-07-03 11:56:06
0 查看

昇腾AI处理器自研达芬奇架构+高集成SoC设计,实现极致能效与面效比

达芬奇架构,为AI计算而生:计算模式基本不变,进行16*16*16的矩阵乘计算,针对AI计算特点,包括大Cube计算单元,矩阵乘计算效率高,达到极致面效比

CPU+NPU+网卡+编解码  高集成度SoC,极致性能

匹配AI应用场景,多维均衡考虑应对“算”的任务, 追求 性能、功耗、成本 的“三维匀称”

昇腾CANN:向下使能处理器并行加速,向下使能高效开发

CANN:支持GPU生态向NPU高效迁移,任务下沉到NPU内,减少CPU+NPU外部互操作,提升效率,提高系统密度,降低功耗

软硬协同优化技术 使能NPU高性能计算

二进制算子库提升动态shape能力,夯实成熟场景,突破新场景

昇腾图优化引擎 极致图编译技术 充分释放澎拜算力

高度并行与深度融合,减少数据搬运,提高内存使用率

自动流水可将原本的串行指令优化为并行执行,实现计算效率提升

算子深度融合,保持精度前提下,通过“工序合并”减少计算节点、数据交互等,有效减少中间数据搬入搬出的时间及内存空间

自动调优引擎AOE持续升级 实现性能效率双效提升

零门槛低成本  

端到端使能从算子到模型的开发部署,快速构建基于昇腾平台的AI应用

使用户能更好更快的将架构、模型正常运行,从能用走向好用

Ascend C算子编程语言,使能算子极简开发

面向开发者,提供开箱即用的工具

AI Core是昇腾AI处理器的计算核心,采用华为自研的达芬奇架构,通常也被叫做DaVinci Core

AI Core架构如下:

cke_276258.png

AI Core中包含计算单元、存储单元、与控制单元。计算单元包括了三种基础计算资源:Vector,Scalar以及Cube。其中Cube负责执行矩阵运算,Cube每次执行可以完成一个fp16的16*16与16*16的矩阵乘,例如C=A*B,如果是int8输入,则一次完成16*32与32*16的矩阵乘。其中A来源于L0A,B来源于L0B,L0C存储矩阵乘的结果和中间结果。

AI Core内部并行计算架构抽象

AI Core采用顺序取指令、并行执行指令的调度方式,如下图所示:

cke_830463.png

异步指令流

Scalar计算单元读取指令序列,并把向量计算、矩阵计算、数据搬运指令发射给对应单元的指令队列,向量计算单元、矩阵计算单元、数据搬运单元异步的并行执行接收到的指令

同步信号流

指令间可能会存在依赖关系,为了保证不同指令队列间的指令按照正确的逻辑关系执行,Scalar计算单元也会给对应单元下发同步指令

计算数据流

DMA搬入单元把数据搬运到Local,Memory,Vector、Cube计算单元完成数据计算,并把计算结果写回Local Memory,DMA搬出单元把处理好的数据搬运回Global Memory


Ascend C算子

算子基本概念

算子名称

算子的名称,用于标志网络中的某个算子,同一网络中算子的名称需要保持唯一。如下图所示Conv1、Pool1、Conv2都是此网络中的算子名称,其中Conv1与Conv2算子的类型为Convolution,表示分别做一次卷积运算。

算子类型

网络中每一个算子根据算子类型进行算子实现的匹配,相同类型的算子的实现逻辑相同。在一个网络中同一类型的算子可能存在多个,例如下 图中的Conv1算子与Conv2算子的类型都为Convolution。

数据容器(Tensor)

Tensor是算子计算数据的容器,TensorDesc(Tensor描述符)是对Tensor中数据的描述。

TensorDesc数据结构包含以下属性:

名称(name):用于对Tensor进行索引,不同Tensor的name需要保持唯一。

形状(shape):Tensor的形状,比如(10,)或者(1024, 1024)或者(2, 3, 4)等,无默认值,形式为(i1, i2,…in),其中i1到in均为正整数。

数据类型(dtype):指定Tensor对象的数据类型。取值范围为float16, float32, int8, int16, int32, uint8, uint16, bfloat16, bool等。注意不同计算操作支持的数据类型不同,

数据排布格式(format):数据的物理排布格式,定义了解读数据的维度。

Ascend C 是CANN针对算子开发场景推出的编程语言,原生支持CC++标准规范,最大化匹配用户开发习惯;通过多层接口抽象、自动并行计算、孪生调试等关键技术,极大提高算子开发效率,助力AI开发者低成本完成算子开发和模型调优部署。

开发流程:算子分析——完成算子核函数开发——使用ICPU_RUN_KF CPU调测宏完成算子核函数CPU侧运行验证——使用<<<>>>内核调用符完成算子核函数NPU侧运行验证

未完待续...

我要发帖子