本次参加CANN训练营,本来我报名的是进阶班课程,再看一遍新手班,学习一下目前CANN的最新进展也是不错的,巩固一下。
视频课程大家可以从这里看到
(1)【CANN训练营第三季】- 昇腾AI入门课(上)_哔哩哔哩_bilibili
(2)【CANN训练营第三季】- 昇腾AI入门课(下)_哔哩哔哩_bilibili
训练营课件可以从这里看到
CANN训练营第三季_昇腾AI入门课-昇腾社区 (hiascend.com)
以下是本次课程的学习笔记。学习笔记中图像为视频课程截图,如果想浏览课程大体内容可以继续观看,但是截图清晰度不好,如果有深入学习需求强烈大家建议看原始视频或者直接看训练营课件。本次课授课老师是从昇腾生态逐步深入,昇腾AI全栈从硬件到软件,最后引入Pytorch从GPU到NPU的适配,逐步深入,适合新手小白快速切入华为生态。
昇腾AI全栈可以分成四个大部分:
1. 应用使能层面,此层面通常包含用于部署模型的软硬件,例如API、SDK、部署平台,模型库等等。
2. AI框架层面,此层面包含用于构建模型的训练框架,例如华为的MindSpore、TensorFlow、Pytorch等。
3. 异构计算架构,偏底层、偏通用的计算框架,用于针对上层AI框架的调用进行加速,力求向上支持多种AI框架,并在硬件上进行加速。
4. 计算硬件,本层是AI计算的底座,有了强力的芯片及硬件设备,上层的加速才有实施的基础。
华为公司面向计算机视觉、自然语言处理、推荐系统、类机器人等领域量身打造了基于“达芬奇(DaVinci)架构”的昇腾(Ascend)AI处理器,开启了智能之旅。为提升用户开发效率和释放昇腾AI处理器澎湃算力,同步推出针对AI场景的异构计算架构CANN(Compute Architecture for Neural Networks),CANN通过提供多层次的编程接口,以全场景、低门槛、高性能的优势,支持用户快速构建基于Ascend平台的AI应用和业务。
昇腾AI异构计算架构(Compute Architecture for Neural Networks,CANN)被抽象成五层架构,如下图所示。
1. 昇腾计算语言接口
昇腾计算语言(Ascend Computing Language,AscendCL)接口是昇腾计算开放编程框架,是对低层昇腾计算服务接口的封装。它提供Device(设备)管理、Context(上下文)管理、Stream(流)管理、内存管理、模型加载与执行、算子加载与执行、媒体数据处理、Graph(图)管理等API库,供用户开发人工智能应用调用。
2. 昇腾计算服务层
本层主要提供昇腾计算库,例如神经网络(Neural Network,NN)库、线性代数计算库(Basic Linear Algebra Subprograms,BLAS)等;昇腾计算调优引擎库,例如算子调优、子图调优、梯度调优、模型压缩以及AI框架适配器。
3. 昇腾计算编译引擎
本层主要提供图编译器(Graph Compiler)和TBE(Tensor Boost Engine)算子开发支持。前者将用户输入中间表达(Intermediate Representation,IR)的计算图编译成NPU运行的模型。后者提供用户开发自定义算子所需的工具。
4. 昇腾计算执行引擎
本层负责模型和算子的执行,提供如运行时(Runtime)库(执行内存分配、模型管理、数据收发等)、图执行器(Graph Executor)、数字视觉预处理(Digital Vision Pre-Processing,DVPP)、人工智能预处理(Artificial Intelligence Pre-Processing,AIPP)、华为集合通信库(Huawei Collective Communication Library,HCCL)等功能单元。
5. 昇腾计算基础层
本层主要为其上各层提供基础服务,如共享虚拟内存(Shared Virtual Memory,SVM)、设备虚拟化(Virtual Machine,VM)、主机-设备通信(Host Device Communication,HDC)等。
AscendCL(Ascend Computing Language,昇腾计算语言)是昇腾计算开放编程框架,是对底层昇腾计算服务接口的封装,它提供运行时资源(例如设备、内存等)管理、模型加载与执行、算子加载与执行、图片数据编解码/裁剪/缩放处理等API库,实现在昇腾CANN平台上进行深度学习推理计算、图形图像预处理、单算子加速计算等能力。简单来说,就是统一的API框架,实现对所有资源的调用。
AscendCL的优势如下:
1. 高度抽象:算子编译、加载、执行的API归一,相比每个算子一个API,AscendCL大幅减少API数量,降低复杂度。
2. 向后兼容:AscendCL具备向后兼容,确保软件升级后,基于旧版本编译的程序依然可以在新版本上运行。
3. 零感知芯片:一套AscendCL接口可以实现应用代码统一,多款昇腾处理器无差异。
AscendCL的主要应用场景如下:
1. 开发应用:用户可以直接调用AscendCL提供的接口开发图片分类应用、目标识别应用等。
2. 供第三方框架调用:用户可以通过第三方框架调用AscendCL接口,以便使用昇腾AI处理器的计算能力。
3. 供第三方开发lib库:用户还可以使用AscendCL封装实现第三方lib库,以便提供昇腾AI处理器的运行管理、资源管理等能力。
前面讲解了华为AI全栈解决方案、昇腾AI异步计算架构CANN以及应用开发框架ACL,对昇腾得软件栈有了初步了解。
在华为的NPU上,我们首选MindSpore进行训练,但是如果早期的深度学习训练框架是Pytorch或者TensorFlow的话,华为软件生态提供第三方框架在华为NPU上的支持。后续以Pytorch为例说明如何在华为的NPU上使用Pytorch训练框架。
Pytorch训练框架迁移到华为得NPU上计算计算可以参考文档第三方框架适配-昇腾社区 (hiascend.com)以及源码pytorch: Ascend PyTorch adapter (gitee.com)
对接Pytorch训练框架,昇腾AI处理器的加速实现方式是以各种算子为粒度进行调用(OP-based),即通过AscendCL调用一个或几个D亲和算子组合的形式,代替原有GPU的实现方式。
当前选择在线对接适配方案的主要原因有以下几点:
AI Core上Cube计算单元仅支持半精度,Vector可以支持单精度
将基于PyTorch的训练脚本迁移到昇腾AI处理器上进行训练,目前有以下3种方式:自动迁移(推荐)、工具迁移、手工迁移,且迁移前要保证该脚本能在GPU、CPU上运行。
在使用Ascend-Pytorch时一定要注意版本得适配
继续向下就涉及到模型迁移的具体案例了,下次文章我们继续。
强烈建议大家,如果有时间学习昇腾的文档非常详细,训练营即使结束了也可以报名学习上面的资料,作为入门华为生态是非常全面的科普性的资料。