华为Ascend昇腾CANN详细教程(二)

一、参考资料

昇腾Ascend 随记 —— 昇腾 AI 的基本架构

二、相关介绍

1. CANN版本号变更说明

版本号变更公告
华为Ascend昇腾CANN详细教程(二)_第1张图片

2. 昇腾软件相关介绍

下载软件

2.1 昇腾软件介绍

软件类型 软件介绍
固件 固件包含昇腾AI处理器自带的OS 、电源器件和功耗管理器件控制软件,分别用于后续加载到AI处理器的模型计算、芯片启动控制和功耗控制。
驱动 部署在昇腾服务器,功能类似英伟达驱动,管理查询昇腾AI处理器,同时为上层CANN软件提供芯片控制、资源分配等接口。
CANN 部署在昇腾服务器,功能类似英伟达CUDA,包含Runtime、算子库、图引擎、媒体数据处理等组件,通过AscendCL(Ascend Computing Language)对外提供Device管理、Context管理、Stream管理、内存管理、模型加载与执行、算子加载与执行、媒体数据处理等API,帮助开发者实现在昇腾CANN平台上进行深度学习推理计算、图像预处理、单算子加速计算。
软件类型 软件介绍
昇腾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接口运行训练业务。

2.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”。

2.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”。

2.4 软件安装

首次安装

如果是首次安装请按照“驱动 > 固件”的顺序,分别安装驱动和固件包。

覆盖安装

覆盖安装请按照“固件 > 驱动”的顺序,分别安装固件和驱动包,**{vision}**表示软件版本号。

3. CANN逻辑架构

华为Ascend昇腾CANN详细教程(二)_第2张图片

  • TF Adapter

    加速Tensorflow图在昇腾AI处理器上执行的Tensorflow插件。

  • 图优化和编译

    对不同前端提供统一的IR(Intermediate Representation)接口对接,支持TensorFlow/Caffe/MindSpore表达的计算图的解析/优化/编译,提供对后端计算引擎最优化部署能力,充分发挥设备性能。

    • GE (Graph Engine):作为图编译和运行的控制中心,提供图运行环境管理、图执行引擎管理、算子库管理、子图优化管理、图操作管理和图执行控制。
    • FE (Fusion Engine):管理算子的融合规则、依据融合规则对IR Graph进行匹配和算子融合操作、对系统支持的算子进行管理和维护算子列表、支持自定义算子。
    • AICPUE (AICPU Engine):针对计算特征更亲和于CPU的部分算子,负责算子的信息管理和子图编译,包括算子注册、算子内存需求计算、子图优化和task生成,以支持这类算子在AI CPU运算单元的执行。
    • HCCL (Huawei Collective Communication Library):负责HCCL算子信息管理。HCCL实现参与并行计算的所有worker的梯度聚合(allreduce)功能,为Ascend多机多卡训练提供数据并行方案。
  • 算子编译和算子库

    提供Ascend算子开发和编译能力,使能昇腾AI处理器能力。

    • TBE:通过DSL(domain-specific language)描述算子的算法实现和优化调度来自动编译生成算子,同时还作为自定义算子的开发工具供生态开发者使用。
    • 算子库:Ascend神经网络加速库,内置丰富算子,支撑神经网络训练和推理加速。
  • 执行引擎

    负责神经网络各种类型算子的调度和执行。

    • Runtime:为神经网络的任务分配提供了资源管理通道。昇腾AI处理器Runtime运行在应用程序的进程空间中,为应用程序提供了存储(Memory)管理、设备(Device)管理、执行流(Stream)管理、事件(Event)管理、核(Kernel)函数执行等功能。
    • TSTask Scheduler,负责计算图Task序列的管理和调度、执行。
  • 计算设备

    最终执行各种算子的硬件设备。

    • AICore:负责NN类算子的执行。
    • AICPU:负责执行Ascend设备上运行的CPU类算子。
  • 通信链路

    主要实现单机多卡、多机多卡之间的通信,完成训练业务梯度聚合(allreduce),包括PCIe、HCCS和RoCE高速链路。

    • HCCS(Huawei Cache Coherence System):华为缓存一致性系统,HCCS链路可以实现多个昇腾AI处理器之间的高速互联,并且支持多处理器之间的缓存一致性功能。
    • RoCE (RDMA over Converged Ethernet) :基于融合以太网的RDMA,在跨服务器节点的昇腾AI处理器间,实现处理器内存RDMA功能。
    • PCIe:昇腾AI处理器与CPU之间的高速互连。

4. Dump数据

当训练网络精度未达预期的运算结果称为“Data Dump数据”

5. 自定义算子开发接口

大力出奇迹,揭秘昇腾CANN的AI超能力

当你的AI模型中有CANN尚未支持的算子,或者想要修改已有算子以提升计算性能时,可以利用CANN开放的自定义算子开发接口,随心所欲地开发你想要的算子。

面向不同水平的AI开发者,CANN提供**高效(TBE-DSL)和专业(TBE-TIK)**两种算子开发模式,可灵活满足不同层次水平的开发者。

其中,TBE-DSL的入门难度较低,它可以自动实现数据的切分和调度,开发者只需关注算子本身的计算逻辑,无需了解硬件细节,即可开发出高性能算子。

TBE-TIK相对难一些,不像TBE-DSL只是在高层抽象编程,而是提供指令级编程和调优能力,开发者需要手工完成类指令级调用,这样能充分挖掘硬件能力,实现更加高效和复杂的算子。

6. 高性能算子库

基于深度学习框架构建的模型,其实是由一个个计算单元组成,我们称这些计算单元为算子(Operator,简称Op),它对应着特定的计算逻辑。算子在硬件上的加速计算构成了加速神经网络的基础和核心。

  • NN(Neural Network)算子库:CANN覆盖了包括TensorFlow、Pytorch、MindSpore、ONNX框架在内的,常用深度学习算法的计算类型,在CANN所有的算子中占有最大比重,用户只需要关注算法细节的实现,大部分情况下不需要自己开发和调试算子。
  • BLAS(Basic Linear Algebra Subprograms)算子库:BLAS为基础线性代数程序集,是进行向量和矩阵等基本线性代数操作的数值库,CANN支持通用的矩阵乘和基础的Max、Min、Sum、乘加等运算。
  • DVPP(Digital Video Pre-Processor)算子库:提供高性能的视频编解码、图片编解码、图像裁剪缩放等预处理能力。
  • AIPP(AI Pre-Processing)算子库:主要实现改变图像尺寸、色域转换(转换图像格式)、减均值/乘系数(图像归一化),并与模型推理过程融合,以满足推理输入要求。
  • HCCL(Huawei Collective Communication Library)算子库:主要提供单机多卡以及多机多卡间的Broadcast,allreduce,reducescatter,allgather等集合通信功能,在分布式训练中提供高效的数据传输能力。

7. CANN高性能图编译器

自动算子融合

基于算子、子图、SCOPE等多维度进行自动融合,有效减少计算节点,大幅减少计算时间。
华为Ascend昇腾CANN详细教程(二)_第3张图片

Buffer融合

针对神经网络计算大数据吞吐,memory bound问题,通过减少数据搬运次数、提升昇腾AI处理器内缓存利用率,提升计算效率。
华为Ascend昇腾CANN详细教程(二)_第4张图片

融合前,算子1在昇腾AI处理器上计算完后,将数据从昇腾AI处理器内的缓存buffer搬运到外部存储,算子2从外部存储获取数据作为输入,搬入缓存buffer进行计算。融合后,算子1计算完成后,数据保留在缓存buffer,算子2从缓存buffer直接获取数据进行算子2的计算,有效减少数据搬运次数,提升了计算性能。

异构调度能力

当计算图中含有多类型的计算任务时,CANN充分利用昇腾AI处理器丰富的异构计算资源,在满足图中依赖关系的前提下,将计算任务分配给不同的计算资源,实现并行计算,提升各计算单元的资源利用率,最终提升计算任务的整体效率。
华为Ascend昇腾CANN详细教程(二)_第5张图片

全图下沉

昇腾AI处理器,集成了丰富的计算设备资源,比如AICore/AICPU/DVPP/AIPP等,正是得益于昇腾AI处理器上丰富的土壤,使得CANN不仅可以将计算部分下沉到昇腾AI处理器加速,还可以将控制流、DVPP、通信部分一并下沉执行。尤其在训练场景,这种把逻辑复杂计算图的全部闭环在AI处理器内执行的能力,能有效减少和Host CPU的交互时间,提升计算性能。

8. 在MindStuio中配置CANN

CANN管理

二、AscendCL开发流程

一文带你认识AscendCL

1. ACL初始化流程

海思SD3403开发板学习(五)
华为Ascend昇腾CANN详细教程(二)_第6张图片

2. ACL去初始化流程

华为Ascend昇腾CANN详细教程(二)_第7张图片

三、FAQ

Q:CANN版本问题

华为Ascend昇腾CANN详细教程(二)_第8张图片

你可能感兴趣的:(深度学习,CANN,统一计算架构)