1 昇腾AI全栈架构
昇腾计算产业是基于昇腾系列处理器和基础软件构睫的全栈Al计算基础设施.行业应用及服务,包括昇腾系列处理器、Atlas系列硬件、CANN (Compute Architecture for Neural Networks,异构计算架构》、Al计算框架、应用使能、全流程开发工具链.管理运排工具、行业应用及服务等全产业链。 
2 Altas系列硬件
Atlas系列硬件基于昇腾系列AI处理器,(其中Ascend 310用于推理场景,Ascend 910用于训练场景),通过模块标卡、小站、服务器.集群等丰富的产品形态。打造面向“端、边、云”的全场景A基础设施方窝。 
3 NPU
昇腾Al处理器的计算核心主要由Al Core构成,其基本结构如下图所示,包括了三种基础计算资源:矩阵计算单元.向量计算单元和标最计筒单元 
- Cube,负责执行矩阵运算,每次可以执行完成一个fpl6的1616与1616的矩阵乘。相关操作包括matmul, conv2d, linca等。
- Veetor。负责执行向量运算,算力低于Cube ,但灵活度高。Vectot覆盖各种基本的计算类型和许多定制的计算类型,主要包括fp16,fp32,int32,int8等。
- Scalar。负责各类型的标量运算和程序的流程控制。功能上可以看做一个小CPU.
4 PyTorch适配昇腾AI处理器方案
PyTorch框架实现的对接适配昇腾Al处理器的方案为在线对接方案。当前选择在线对接适配方案的主要原因有以下几点:
- 最大限度的继承PyTorch框架动态图的特性
- 最大限度的继承GPU在PyTorch上的使用方式,可以使用户在将模型移植到昇腾AI处理器设备进行训练时,在开发方式和代码重用方面做到最小的改动。
- 最大限度的继承PyTorch原生的体系结构,保留框架本身出色的特性,比如自动微分、动态分发、Debug、Profiling.Storage共享机制以及设备侧的动态内存管理等。
- 扩展性好。在打通流程的通路之上,对于新增的网络类型或结构,只需涉及相关计算类算子的开发和实现。框架类算子。反向图建立和实现机制等结构可保持复用。
- 与GPU的使用方式和风格保持一致。用户在使用在线对接方案时,只需在Python侧和device相关操作中,指定device为昇腾AI处理器,即可完成用昇腾Al处理器在PyTorch对网络的开发、训练以及调试。用户无需进一步关注昇腾Al处理器具体的底层细节。

5 PyTorch模型迁移介绍
将基于PyTorch的训练脚本迁移到昇腾Al处理器上进行训练,目前有以下3种方式:自动迁移(推荐)、工具迁移、手工迁移,且迁移前要保证该脚本能在GPU、CPU上运行。
5.1 自动迁移
训练时,在训练脚本中导入脚本转换库,导入后执行训练。训练脚本在运行的同时,会自动将脚本中的CUDA接口替换为昇腾Al处理器支持的NPU接口。整体过程为:边训练边转换。 
5.2工具迁移
训练前,通过脚本迁移工具,自动将训练脚本中的CUDA接口替换为昇腾AI处理器支持的NPU接口,并生成迁移报告(脚本转换日志、不支持算子的列表、脚本修改记录)。训练时,运行转换后的脚本。整体过程为:先转换脚本,再进行训练。
5.2.1 功能介绍
·脚本转换工具根据适配规则,对用户脚本给出修改意见并提供转换功能,提高了脚本迁移速度,降低了开发者的工作量,·原脚本需要在GPU环境下且基于Python 3.7及以上能够跑通,脚本转换后的执行逻辑与转换前保持一致。 ·此脚本转换工具当前支持PyTorch1.5.0和1.8.1版本的训练脚本转换。
5.2.2 执行转换
- 进入脚本转换工具所在路径 cd Ascend-cann-toolkit安装目录/ascend-toolkit/latest/tools/ms_fmk_transplt/
- 执行脚本转换 /pytorch_gpu2npu.sh -i原始脚本路径-o脚本迁移结果输出路径-v原始脚本框架版本.完成脚本转换
- 完成脚本转换

5.3 手工迁移
算法工程师通过对模型的分析、GPU与NPU代码的对比进而对训练脚本进行修改,以支持在昇腾Al处理器上执行训练。迁移要点如下: 定义NPU为训练设备,或将适配GPU的接口切换至适配NPU的接口。多卡迁移需修改芯片间通信方式为hccl。
5.3.1 手工迁移——Step1迁移前的准备
- 关于分布式 由于NPU上的一些限制,PyTorch需要使用DistributedDataParallel(DDP),若原始代码使用的DataParalle(DP)则需要修改为DDP,DP相应的一些实现例如torch.cuda.common,则可以替换为torch.distributed相关操作。###
- 关于混合精度 由于NPU天然的混合精度属性,我们需要使用apex对原始代码进行修改

5.3.2 手工迁移-Step2单卡模型迁移
单卡迁移的主要修改点:定义NPU为训练设备,并将适配GPU的接口切换至适配NPU的接口。
5.3.3 手工迁移——Step3多卡模型迁移
多卡代码迁移的主要修改点:除单卡迁移包含的3个修改要点外,在分布式场景下,还需要切换通信方式
1 昇腾AI全栈架构
昇腾计算产业是基于昇腾系列处理器和基础软件构睫的全栈Al计算基础设施.行业应用及服务,包括昇腾系列处理器、Atlas系列硬件、CANN (Compute Architecture for Neural Networks,异构计算架构》、Al计算框架、应用使能、全流程开发工具链.管理运排工具、行业应用及服务等全产业链。
2 Altas系列硬件
Atlas系列硬件基于昇腾系列AI处理器,(其中Ascend 310用于推理场景,Ascend 910用于训练场景),通过模块标卡、小站、服务器.集群等丰富的产品形态。打造面向“端、边、云”的全场景A基础设施方窝。
3 NPU
昇腾Al处理器的计算核心主要由Al Core构成,其基本结构如下图所示,包括了三种基础计算资源:矩阵计算单元.向量计算单元和标最计筒单元
4 PyTorch适配昇腾AI处理器方案
PyTorch框架实现的对接适配昇腾Al处理器的方案为在线对接方案。当前选择在线对接适配方案的主要原因有以下几点:
5 PyTorch模型迁移介绍
将基于PyTorch的训练脚本迁移到昇腾Al处理器上进行训练,目前有以下3种方式:自动迁移(推荐)、工具迁移、手工迁移,且迁移前要保证该脚本能在GPU、CPU上运行。
5.1 自动迁移
训练时,在训练脚本中导入脚本转换库,导入后执行训练。训练脚本在运行的同时,会自动将脚本中的CUDA接口替换为昇腾Al处理器支持的NPU接口。整体过程为:边训练边转换。
5.2工具迁移
训练前,通过脚本迁移工具,自动将训练脚本中的CUDA接口替换为昇腾AI处理器支持的NPU接口,并生成迁移报告(脚本转换日志、不支持算子的列表、脚本修改记录)。训练时,运行转换后的脚本。整体过程为:先转换脚本,再进行训练。
5.2.1 功能介绍
·脚本转换工具根据适配规则,对用户脚本给出修改意见并提供转换功能,提高了脚本迁移速度,降低了开发者的工作量,·原脚本需要在GPU环境下且基于Python 3.7及以上能够跑通,脚本转换后的执行逻辑与转换前保持一致。 ·此脚本转换工具当前支持PyTorch1.5.0和1.8.1版本的训练脚本转换。
5.2.2 执行转换
5.3 手工迁移
算法工程师通过对模型的分析、GPU与NPU代码的对比进而对训练脚本进行修改,以支持在昇腾Al处理器上执行训练。迁移要点如下: 定义NPU为训练设备,或将适配GPU的接口切换至适配NPU的接口。多卡迁移需修改芯片间通信方式为hccl。
5.3.1 手工迁移——Step1迁移前的准备
5.3.2 手工迁移-Step2单卡模型迁移
单卡迁移的主要修改点:定义NPU为训练设备,并将适配GPU的接口切换至适配NPU的接口。
5.3.3 手工迁移——Step3多卡模型迁移
多卡代码迁移的主要修改点:除单卡迁移包含的3个修改要点外,在分布式场景下,还需要切换通信方式