昇腾Ascend处理器相关介绍

一、参考资料

modelzoo wiki

解密昇腾AI处理器–Ascend310简介

AI芯片:华为Ascend(昇腾)910结构分析

解密昇腾AI处理器–DaVinci架构(计算单元)

二、相关介绍

昇腾AI处理器本质上是一个片上系统(System on Chip,SoC),该芯片大致可以划为:芯片系统控制CPU(Control CPU),AI计算引擎(包括AI Core和AI CPU),多层级的片上系统缓存(Cache)或缓冲区(Buffer),数字视觉预处理模块(Digital Vision Pre-Processing,DVPP)等。

目前主流SoC芯片的主存一般由DDR(Double Data Rate)或HBM(High Bandwidth Memory)构成,用来存放大量的数据。HBM相对于DDR存储带宽较高,是行业的发展方向。

2.1 达芬奇架构

总体架构

达芬奇架构包含了scalar,tensor和cuba运算,灵活性 scalar>tensor>cuba,效率 scalar<tensor<cuba。

有的运算scalar就可以了,应该就是AICPU,跟普通cpu运行指令一样

有的运算tensor可以完成,效率高于scalar,比如向量的加减乘除,一个指令一个向量都执行了。

有的运算需要cuba来完成,效率又高于tensor,比如矩阵乘,卷积,几条任务线同时运行,有限几个指令周期可以完成矩阵乘的操作。

华为达芬奇核心分为三种,最完整的是“Max”,其次是Lite,再次是Tiny,Max可在一个周期内完成8192次MAC运算,Tiny仅512次。
在这里插入图片描述

整体来看,两个bufferL0A和L0B作为输入,其中一个暂存activition,另一个暂存权重。
红色的Cube模块,类似谷歌TPU脉动阵列结构,是一个乘累加阵列,计算结果输出存放在另外一个buffer L0C。
Vector Unit,类似一个DSP,从buffer L0C中取得乘累加计算结果,然后进行pooling/padding,BN,激活,加法等处理。如果还没得到最终结果,就暂时返回存储在buffer L0C,如果得到了最终结果,就传递给Unified Buffer。
Scalar Unit用来控制调度,类似一个MCU,可以是ARM的,也可以是RISC-V。

2.2 MAC运算

mac利用率指的就是CUBE的利用率。

一次MAC = 一次乘法+一个加法

以256T的FP16为例,算力计算方法如下:

256T = 32(大核,每个8T算力)X 2(一次MAC=一次乘法+一个加法)X 4K(4096 MAC) X 1(单核,小核) X 1G(频率1GHz)
或者
256T = 32(大核,每个8T算力)X 4K(4096 MAC) X 2(双核,小核) X 1G(频率1GHz)

2.3 昇腾芯片架构

在这里插入图片描述

  • 芯片系统控制CPU(Control CPU);
  • AI计算引擎(包括AI Core和AI CPU);
  • 多层级的片上系统缓存(Cache)或缓冲区(Buffer);
  • 数字视觉预处理模块(Digital Vision Pre-Processing,DVPP)等;
  • AI Core:集成了2个AI Core。昇腾AI芯片的计算核心,主要负责执行矩阵、向量、标量计算密集的算子任务,采用达芬奇架构。
  • ARM CPU核心: 集成了8个A55。其中一部分部署为AI CPU,负责执行不适合跑在AI Core上的算子(承担非矩阵类复杂计算);一部分部署为专用于控制芯片整体运行的控制CPU。两类任务占用的CPU核数可由软件根据系统实际运行情况动态分配。此外,还部署了一个专用CPU作为任务调度器(Task Scheduler,TS),以实现计算任务在AI Core上的高效分配和调度;该CPU专门服务于AI Core和AI CPU,不承担任何其他的事务和工作。
  • DVPP:数字视觉预处理子系统,完成图像视频的编解码。用于将从网络或终端设备获得的视觉数据,进行预处理以实现格式和精度转换等要求,之后提供给AI计算引擎。
  • Cache & Buffer:SOC片内有层次化的memory结构,AI core内部有两级memory buffer,SOC片上还有8MB L2 buffer,专用于AI Core、AI CPU,提供高带宽、低延迟的memory访问。芯片还集成了LPDDR4x控制器,为芯片提供更大容量的DDR内存。
  • 对外接口:支持PCIE3.0、RGMII、USB3.0等高速接口、以及GPIO、UART、I2C、SPI等低速接口。
    在这里插入图片描述

2.4 矩阵计算单元

问题引入

在这里插入图片描述

for (m=0; m<M, m++)
    for (n=0; n<N, n++)
        for (k=0; k<K, k++)
			C[m][n] += A[m][k]*B[k][n]

该程序需要用到3个循环进行一次完整的矩阵相乘计算,如果在一个单发射的CPU上执行至少需要 M ∗ K ∗ N M*K*NMKN 个时钟周期才能完成,当矩阵非常庞大时执行过程极为耗时。

矩阵计算

由于常见的深度神经网络算法中大量的使用了矩阵计算,达芬奇架构 中特意对矩阵计算进行了深度的优化并定制了相应的矩阵计算单元来支持高吞吐量的矩阵处理。通过精巧设计的定制电路和极致的后端优化手段,矩阵计算单元可以用一条指令完成两个 16 ∗ 16 16*161616 矩阵的相乘运算(标记为1 6 3 16^3163,也是Cube这一名称的来历),等同于在极短时间内进行了 1 6 3 = 4096 16^3=4096163=4096 个乘加运算。矩阵计算单元在完成 A ∗ B = C A*B=CAB=C 的矩阵运算时,会事先将矩阵A 按行存放 在输入缓冲区中,同时将矩阵B 按列存放 在输入缓冲区中,通过矩阵计算单元计算后得到的结果矩阵C 按行存放 在输出缓冲区中。
在这里插入图片描述

如上图所示,在矩阵相乘运算中,矩阵C的第一元素由矩阵A的第一行的16个元素和矩阵B的第一列的16个元素由矩阵计算单元子电路进行 16次乘法15次加法 运算得出。矩阵计算单元中存在256个矩阵计算子电路组成,可以由一条指令并行完成矩阵C的256个元素计算。矩阵计算单元中存在256个矩阵计算子电路组成,可以由一条指令并行完成矩阵C的256个元素计算。

2.5 向量计算单元

AI Core中的向量计算单元主要负责完成和向量相关的运算,能够实现向量和标量,或双向量之间的计算。
在这里插入图片描述

==向量计算单元可以作为矩阵计算单元和输出缓冲区之间的数据通路和桥梁。==矩阵运算完成后的结果在向输出缓冲区传递的过程中,向量计算单元可以顺便完成在深度神经网络尤其是卷积神经网络计算中常用的ReLU激活函数、池化等功能并实现数据格式的转换。经过向量计算单元处理后的数据可以被写回到输出缓冲区或者矩阵计算单元中,以等待下一次运算。

2.6 标量计算单元

标量计算单元相当于一个微型CPU控制整个AI Core的运行。标量计算单元可以对程序中的循环进行控制,可以实现分支判断,其结果可以通过在事件同步模块中插入同步符的方式来控制AI Core中其它功能性单元的执行流水。

在标量计算单元周围配备了多个通用寄存器(General Purpose Register,GPR)和专用寄存器(Special Purpose Register,SPR)。

2.7 npu-smi指令

单张板卡用双实线分割

如下图所示,当前服务器有3块板卡,每个板卡有4个昇腾Ascend310芯片,总共有昇腾Ascend310芯片。Ascend310芯片的规格是:AICore 8GB运行内存,970 Hugepages-Usage(page)。
在这里插入图片描述

属性解释说明
npu-sminpu-smi版本
NPU板卡ID
Chip每张板卡内的芯片ID
Devicedevice_id,设备ID,即昇腾芯片ID(整体)
Health昇腾芯片健康程度
Bus-IDBus总线ID
Power(W)芯片功率
AICore(%)AI Core利用率,AI Core是昇腾芯片的算力核心,类比NVIDIA GPU的GPU利用率
Temp©芯片温度
Memory-Usage(MB)AI Core的运行内存
Hugepages-Usage(page)AI Core显存,类比NVIDIA GPU的显存
HBM-UsageAI Core显存,类比NVIDIA GPU的显存

2.8 HBM

HBM,即High Bandwidth Memory 是一款新型的CPU/GPU 内存芯片(即 “RAM”),实质上是很多个DDR芯片堆叠在一起后和GPU封装在一起,实现大容量,高位宽的DDR组合阵列。相比于我们所熟悉的传统的GDDR5或GDDR6,HBM是性能极强的“显存”,堪称显存中的旗舰配置,可以极大发挥Ascend 910的强大算力。

HBM通过打造高位宽低频率的显存,使得在提供比较大的显存位宽的基础上不需要那么高的频率,同样的4GB容量下HBM能提供的显存位宽为4096bit,比GDDR5的512bit高出8倍,这也是为什么HBM即便只有1GHz的等效频率也能最终实现大于GDDR5的显存带宽!而且这一个优势还会随着HBM显存后期频率方面的进一步提升而进一步加大。

HBM的优势

  1. 更高速,更高带宽

  2. 更高位宽

  3. 更低功耗

  4. 更小外形(HBM 比 GDDR5 节省了 94% 的表面积!

三、Ascend适配PyTorch框架

第三方框架适配

Ascend/pytorch

3.1 Ascend适配PyTorch API支持清单

PyTorch API支持清单_1.5.0.md

3.2 自定义PyTorch版本的AscendHub镜像

自定义镜像简介_AI开发平台ModelArts_使用自定义镜像

四、CANN版本变更说明

版本号变更公告
在这里插入图片描述

五、CANN相关软件说明

下载软件

5.1 昇腾软件介绍

软件类型软件介绍
昇腾NPU固件固件包含昇腾AI处理器自带的OS 、电源器件和功耗管理器件控制软件,分别用于后续加载到AI处理器的模型计算、芯片启动控制和功耗控制。
昇腾NPU驱动部署在昇腾服务器,功能类似英伟达驱动,管理查询昇腾AI处理器,同时为上层CANN软件提供芯片控制、资源分配等接口。
CANN部署在昇腾服务器,功能类似英伟达CUDA,包含Runtime、算子库、图引擎、媒体数据处理等组件,通过AscendCL(Ascend Computing Language,昇腾计算语言)对外提供Device管理、Context管理、Stream管理、内存管理、模型加载与执行、算子加载与执行、媒体数据处理等API,帮助开发者实现在昇腾软硬件平台上开发和运行AI业务。CANN软件按照功能主要分为Toolkit(开发套件)、NNAE(深度学习引擎)、NNRT(离线推理引擎)、TFPlugin(Tensorflow框架插件)几种软件包,各软件包支持功能范围如下:
+ Toolkit:支持训练和推理业务、模型转换、算子/应用/模型开发和编译。
+ NNAE:支持训练和推理业务、模型转换。
+ NNRT:仅支持推理业务。
+ TFPlugin:用于运行训练业务时和Tensorflow框架进行对接,帮助Tensorflow框架调用底层CANN接口运行训练业务。

5.2 软件下载(社区版)

商业版与社区版区别

社区版可以直接下载,但不能用于商业用途,如果用户需要用于商业用途,请下载商用版软件,但是需要申请相关权限。

软件类型软件包名称和下载链接
昇腾NPU驱动单击软件包链接,选择 “AI加速卡 > Atlas 300T 训练卡(型号:9000)”,选择对应CANN和驱动固件版本,下载软件包“A300t-9000-npu-driver_{version}_linux-x86_64.run”。
昇腾NPU固件单击软件包链接,选择 “AI加速卡 > Atlas 300T 训练卡(型号:9000)”,选择对应CANN和驱动固件版本,下载软件包“A300t-9000-npu-firmware_{version}.run”。
Toolkit(开发套件包)单击软件包链接,下载软件包“Ascend-cann-toolkit_{version}_linux-x86_64.run”。
NNAE(深度学习引擎)单击软件包链接,下载软件包“Ascend-cann-nnae_{version}_linux-x86_64.run”。
TFPlugin(深度学习框架插件)单击软件包链接,下载软件包“Ascend-cann-tfplugin_{version}_linux-x86_64.run”。
实用工具包(内含容器引擎插件,容器部署场景下需下载)单击软件包链接,下载软件包“Ascend-mindx-toolbox_{version}_linux-x86_64.run”。

5.3 软件下载(商用版)

软件类型软件包名称和下载链接
昇腾NPU驱动单击软件包链接,下载软件包“A300t-9000-npu-driver_{version}_linux-x86_64.run”。
昇腾NPU固件单击软件包链接,下载软件包“A300t-9000-npu-firmware_{version}.run”。
Toolkit(开发套件包)单击软件包链接,下载软件包“Ascend-cann-toolkit_{version}_linux-x86_64.run”。
NNAE(深度学习引擎)单击软件包链接,下载软件包“Ascend-cann-nnae_{version}_linux-x86_64.run”。
TFPlugin(深度学习框架插件)单击软件包链接,下载软件包“Ascend-cann-tfplugin_{version}_linux-x86_64.run”。
实用工具包(内含容器引擎插件,容器部署场景下需下载)单击软件包链接,下载软件包“Ascend-mindx-toolbox_{version}_linux-x86_64.run”。

六、FAQ

Q:板卡掉芯片的问题

在这里插入图片描述
当前服务器有5张板卡,正常情况下每张板卡有4个昇腾Ascend310芯片,但是存在板卡芯片丢失的问题。

芯片丢失的可能原因

  1. 服务器功率不够,供电不足,导致芯片加载失败;
  2. 服务器过热,导致芯片加载失败;
  3. 板卡本身的问题,确实存在掉芯片的问题;

版权声明:本文为m0_37605642原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。