一、参考资料
二、相关介绍
1. 达芬奇架构
1.1 简介
达芬奇架构本质上是为了适应某个 特定领域 中的常见应用和算法,通常称为 特定域架构 (Domin Specific Architecture,DSA) ,昇腾 AI 处理器的计算核心主要由 AI Core 构成,负责执行向量和张量相关的计算密集型算子。它包括了三种基础计算资源:矩阵计算单元 (CubeUnit)、向量计算单元 (Vector Unit) 和 标量计算单元 (Scalar Unit),负责执行张量、矢量、标量计算。在实际的计算过程中各司其职,形成了三条独立的执行流水线,在系统软件的统一调度下互相配合达到优化的计算效率,并且每一种计算单元都提供了不同精度和不同类型的计算方式。
达芬奇架构包含: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。
AI Core基本结构
1.2 计算单元
AI Core 中的执行单元主要包括:Cube、Vector 和 Scalar,完成 AI Core 中不同类型的数据计算。关于这个模块可以查看博客:《【系统架构】一文看懂昇腾达芬奇架构计算单元》。
1.3 存储单元
其中 buffer 主要是用来做 向量计算 或者 标量计算 的临时数据保存,后两种的寄存器主要是用来标量计算,AI core 的每种存储单元只能使用特定指令来访问。
1.4 控制单元
控制单元主要有指令缓冲模块、标量处理指令队列、指令发射模块、矩阵运算队列、向量运算队列、储存转换队列等。
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)
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等低速接口。
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上执行至少需要 个时钟周期才能完成,当矩阵非常庞大时执行过程极为耗时。
矩阵计算
由于常见的深度神经网络算法中大量的使用了矩阵计算,达芬奇架构 中特意对矩阵计算进行了深度的优化并定制了相应的矩阵计算单元来支持高吞吐量的矩阵处理。通过精巧设计的定制电路和极致的后端优化手段,矩阵计算单元可以用一条指令完成两个 矩阵的相乘运算(标记为,也是Cube这一名称的来历),等同于在极短时间内进行了 个乘加运算。矩阵计算单元在完成 的矩阵运算时,会事先将矩阵A 按行存放 在输入缓冲区中,同时将矩阵B 按列存放 在输入缓冲区中,通过矩阵计算单元计算后得到的结果矩阵C 按行存放 在输出缓冲区中。
如上图所示,在矩阵相乘运算中,矩阵C的第一元素由矩阵A的第一行的16个元素和矩阵B的第一列的16个元素由矩阵计算单元子电路进行 16次乘法 和 15次加法 运算得出。矩阵计算单元中存在256个矩阵计算子电路组成,可以由一条指令并行完成矩阵C的256个元素计算。矩阵计算单元中存在256个矩阵计算子电路组成,可以由一条指令并行完成矩阵C的256个元素计算。
5. 向量计算单元
AI Core中的向量计算单元主要负责完成和向量相关的运算,能够实现向量和标量,或双向量之间的计算。
==向量计算单元可以作为矩阵计算单元和输出缓冲区之间的数据通路和桥梁。==矩阵运算完成后的结果在向输出缓冲区传递的过程中,向量计算单元可以顺便完成在深度神经网络尤其是卷积神经网络计算中常用的ReLU激活函数、池化等功能并实现数据格式的转换。经过向量计算单元处理后的数据可以被写回到输出缓冲区或者矩阵计算单元中,以等待下一次运算。
6. 标量计算单元
标量计算单元相当于一个微型CPU,控制整个AI Core的运行。标量计算单元可以对程序中的循环进行控制,可以实现分支判断,其结果可以通过在事件同步模块中插入同步符的方式来控制AI Core中其它功能性单元的执行流水。
在标量计算单元周围配备了多个通用寄存器(General Purpose Register,GPR)和专用寄存器(Special Purpose Register,SPR)。
7. npu-smi指令
单张板卡用双实线分割。
如下图所示,当前服务器有3块板卡,每个板卡有4个昇腾Ascend310芯片,总共有昇腾Ascend310芯片。Ascend310芯片的规格是:AICore 8GB运行内存,970 Hugepages-Usage(page)。
属性 | 解释说明 |
---|---|
npu-smi | npu-smi版本 |
NPU | 板卡ID |
Chip | 每张板卡内的芯片ID |
Device | device_id,设备ID,即昇腾芯片ID(整体) |
Health | 昇腾芯片健康程度 |
Bus-ID | Bus总线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-Usage | AI Core显存,类比NVIDIA GPU的显存 |
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的优势
-
更高速,更高带宽
-
更高位宽
-
更低功耗
-
更小外形(HBM 比 GDDR5 节省了 94% 的表面积!
9. EP-RC模式
10. 昇腾AI处理器
昇腾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存储带宽较高,是行业的发展方向。
10.1 昇腾310 AI处理器
技术规格
参数 | 规格 |
---|---|
架构 | 达芬奇 |
性能 | 22 TOPS@INT8 11 TFLOPS@FP16 |
最大功耗 | 8W |
昇腾310是一款高效、灵活、可编程的AI处理器。基于典型配置,八位整数精度(INT8)下的性能达到22TOPS,16位浮点数(FP16)下的性能达到11 TFLOPS,而其功耗仅为8W。昇腾310芯片采用华为自研的达芬奇架构,集成了丰富的计算单元,在各个领域得到广泛应用。随着全AI业务流程的加速,昇腾310芯片能够使智能系统的性能大幅提升,部署成本大幅降低。
昇腾310在功耗和计算能力等方面突破了传统设计的约束。随着能效比的大幅提升,昇腾310将人工智能从数据中心延伸到边缘设备,为平安城市、自动驾驶、云服务和IT智能、智能制造、机器人等应用场景提供了全新的解决方案,使能智慧未来。
10.2 昇腾910 AI处理器
技术规格
参数 | 规格 |
---|---|
架构 | 达芬奇 |
性能 | 320 TFLOPS@FP16 640 TOPS@INT8 |
最大功耗 | 310W |
昇腾910是一款具有超高算力的AI处理器,其最大功耗为310W,华为自研的达芬奇架构大大提升了其能效比。八位整数精度(INT8)下的性能达到640TOPS,16位浮点数(FP16)下的性能达到320 TFLOPS。
作为一款高集成度的片上系统(SoC),除了基于达芬奇架构的AI核外,昇腾910还集成了多个CPU、DVPP和任务调度器(Task Scheduler),因而具有自我管理能力,可以充分发挥其高算力的优势。
昇腾910集成了HCCS、PCIe 4.0和RoCE v2接口,为构建横向扩展(Scale Out)和纵向扩展(Scale Up)系统提供了灵活高效的方法。HCCS是华为自研的高速互联接口,片内RoCE可用于节点间直接互联。最新的PCIe 4.0的吞吐量比上一代提升一倍。
三、Ascend-DMI工具
简介 – CANN 5.0.1 Ascend-DMI工具用户指南
“Ascend-DMI”工具主要为Atlas产品的标卡、板卡及模组类产品提供带宽测试、算力测试、功耗测试等功能。
1. 设置环境变量
-
安装toolbox包时配置
source /usr/local/Ascend/toolbox/set_env.sh
-
安装nnrt软件包时配置
source /usr/local/Ascend/nnrt/set_env.sh export ASCEND_OPP_PATH=/usr/local/Ascend/nnrt/latest/opp/
-
安装nnae软件包时配置
source /usr/local/Ascend/nnae/set_env.sh
用户也可以通过修改~/.bashrc文件方式设置永久环境变量,操作如下:
- 以运行用户在任意目录下执行vi ~/.bashrc命令,打开**.bashrc**文件,在文件最后一行后面添加上述内容。
- 执行**:wq!**命令保存文件并退出。
- 执行source ~/.bashrc命令使其立即生效。
2. 查看芯片信息
ascend-dmi -i --dt
ascend-dmi -i -b
3. 可执行文件路径
“ascend-dmi”随toolbox使用root用户安装,所在目录参考为“/usr/local/Ascend/toolbox/latest/Ascend-DMI/bin”。
Ascend-DMI”工具的检测命令可在任意目录执行。
4. 日志路径
root用户日志路径为“/var/log/ascend-dmi”。
非root用户日志路径为“${HOME}/var/log/ascend-dmi”。
四、Ascend-Docker-Runtime
部署推理容器 – CANN V100R020C20 容器基础镜像制作指南
Ascend-Docker-Runtime(容器引擎插件)可以将昇腾芯片的设备和驱动挂载到容器中。
1. 默认挂载内容
基础配置文件“base.list”:/etc/ascend-docker-runtime.d/base.list
,原则上不允许用户修改 base.list
文件。
[root@10 ascend-docker-runtime.d]# cat /etc/ascend-docker-runtime.d/base.list
/usr/local/Ascend/driver/lib64
/usr/local/Ascend/driver/tools
/usr/local/Ascend/driver/include
/usr/local/dcmi
/usr/local/bin/npu-smi
路径 | 说明 |
---|---|
/usr/local/Ascend/driver/lib64 | 目录,驱动提供的用户态库 |
/usr/local/Ascend/driver/include | 目录,驱动提供的头文件(dsmi_common_interface.h) |
/usr/local/dcmi | 目录,DCMI头文件和库 |
/usr/local/bin/npu-smi | 文件,NPU-SMI工具 |
2. 自定义配置
创建配置文件 – CANN V100R020C20 容器基础镜像制作指南
问题引入
当用户因业务需要,挂载内容较多时,可使用 ASCEND_RUNTIME_MOUNTS
环境变量读取配置文件中的挂载内容。创建配置文件请参见创建配置文件,hostlog请根据实际配置文件名修改。
以配置文件“hostlog.list”为例:/etc/ascend-docker-runtime.d/hostlog.list
。
/usr/slog/slog
/var/log/npu/slog
docker run --rm -it -e ASCEND_VISIBLE_DEVICES=xxx -e ASCEND_RUNTIME_MOUNTS=base,hostlog image-name /bin/bash
-
不使用Ascend-Docker-Runtime
docker run --rm \ --device=/dev/davinci0 \ --device=/dev/davinci1 \ --device=/dev/davinci2 \ --device=/dev/davinci3 \ --device=/dev/davinci_manager \ --device=/dev/hisi_hdc \ --device=/dev/devmm_svm \ -v /usr/local/dcmi:/usr/local/dcmi \ -v /usr/local/Ascend/nnae:/usr/local/Ascend/nnae \ -v /usr/local/Ascend/nnrt:/usr/local/Ascend/nnrt \ -v /usr/local/Ascend/version.info:/usr/local/Ascend/version.info \ -v /usr/local/Ascend/toolbox:/usr/local/Ascend/toolbox \ -v /etc/ascend_install.info:/etc/ascend_install.info \ -v /usr/local/Ascend/driver:/usr/local/Ascend/driver \ -v /usr/local/Ascend/firmware:/usr/local/Ascend/firmware \ -v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \ -v /etc/Ascend/ascend_cann_install.info:/etc/Ascend/ascend_cann_install.info \ -it ubuntu:18.04 /bin/bash
-
使用Ascend-Docker-Runtime
docker run --rm -e ASCEND_VISIBLE_DEVICES=0-3 \ -v /usr/local/Ascend/nnae:/usr/local/Ascend/nnae \ -v /usr/local/Ascend/nnrt:/usr/local/Ascend/nnrt \ -v /usr/local/Ascend/version.info:/usr/local/Ascend/version.info \ -v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \ -v /usr/local/Ascend/toolbox:/usr/local/Ascend/toolbox \ -v /etc/ascend_install.info:/etc/ascend_install.info \ -v /usr/local/Ascend/firmware:/usr/local/Ascend/firmware \ -v /etc/Ascend/ascend_cann_install.info:/etc/Ascend/ascend_cann_install.info \ -it ubuntu:18.04 /bin/bash
docker run -it --rm -e ASCEND_VISIBLE_DEVICES=3 \ -p 6013:22 \ -v /usr/local/Ascend/nnrt:/usr/local/Ascend/nnrt \ -v /usr/local/Ascend/version.info:/usr/local/Ascend/version.info \ -v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \ -v /usr/local/Ascend/toolbox:/usr/local/Ascend/toolbox \ -v /etc/ascend_install.info:/etc/ascend_install.info \ -v /usr/local/Ascend/firmware:/usr/local/Ascend/firmware \ -v /etc/Ascend/ascend_cann_install.info:/etc/Ascend/ascend_cann_install.info \ ascendhub.huawei.com/public-ascendhub/ascend-infer-arm:21.0.1 \ /bin/bash
五、FAQ
Q:板卡掉芯片的问题
当前服务器有5张板卡,正常情况下每张板卡有4个昇腾Ascend310芯片,但是存在板卡芯片丢失的问题。
芯片丢失的可能原因
- 服务器功率不够,供电不足,导致芯片加载失败;
- 服务器过热,导致芯片加载失败;
- 板卡本身的问题,确实存在掉芯片的问题;
文章出处登录后可见!