【2023 · CANN训练营第一季】昇腾AI入门课(PyTorch)笔记分享

一、基础知识

1.1、人工智能发展趋势和挑战

        目前人工智能在特定的领域已经超越了人类的能力。比如图像分类、语言识别、语义理解方面。但是目前还是面临很多挑战。主要是算法开发难度高、应用的开发也困难,最后是开发后的实际的业务部署也十分复杂。

1.2、昇腾AI全栈架构

昇腾计算产业是基于昇腾系列处理器和基础软件构建的全栈Al计算基础设施、行业应用及服务,包括昇腾系列处理器、Atlas系列硬件、CANN (Compute Architecture for Neural Networks,异构计算架构)、Al计算框架、应用使能、全流程开发工具链、管理运维工具、行业应用及服务等全产业链。

1.3、Atlas系列硬件

        Atlas系列硬件基于昇腾系列Al处理器〈(其中Ascend 310用于推理场景,Ascend 910用于训练场景),通过模块、标卡、小站、服务器、集群等丰富的产品形态,打造面向“端、边、云”的全场景AI基础设施方案。

1.4、NPU介绍

        昇腾Al处理器的计算核心主要由Al Core构成,其基本结构如下图所示,包括了三种基础计算资源:矩阵计算单元、向量计算单元和标量计算单元。

 1.5、CANN AI异构计算架构

 1.6、PyTorch适配昇腾AI处理器方案

        PyTorch框架实现的对接适配昇腾Al处理器的方案为在线对接方案。当前选择在线对接适配方案的主要原因有以下几点:

1、最大限度的继承PyTorch框架动态图的特性。

2、最大限度的继承GPU在PyTorch上的使用方式,可以使用户在将模型移植到昇腾Al处理设备进行训练时,在开发方式和代码重用方面做到最小的改动。

3、最大限度的继承PyTorch原生的体系结构,保留框架本身出色的特性,比如自动微分、动态分发、Debug、Profiling.Storage共享机制以及设备侧的动态内存管理等。扩展性好。在打通流程的通路之上,对于新增的网络类型或结构,只需涉及相关计算类算子的开发和实现。框架类算子,反向图建立和实现机制等结构可保持复用。

4、与GPU的使用方式和风格保持一致。用户在使用在线对接方案时,只需在Python侧和device相关操作中,指定device为昇腾Al处理器,即可完成用昇腾Al处理器在PyTorch对网络的开发、训练以及调试,用户无需进一步关注昇腾Al处理器具体的底层细节。

1.7、PyTorch模型迁移

        将基于PyTorch的训练脚本迁移到昇腾Al处理器上进行训练,目前有以下3种方式:自动迁移〈推荐)、工具迁移、手工迁移,且迁移前要保证该脚本能在GPU、CPU上运行。

1、自动迁移:训练时,在训练脚本中导入脚本转换库,导入后执行训练。训练脚本在运行的同时,会自动将脚本中的CUDA接口替换为昇腾Al处理器支持的NPU接口。整体过程为:边训练边转换。

2.工具迁移︰训练前,通过脚本迁移工具,自动将训练脚本中的CUDA接口替换为昇腾Al处理器支持的NPU接口,并生成迁移报告(脚本转换日志、不支持算子的列表、脚本修改记录)。训练时,运行转换后的脚本。整体过程为:先转换脚本,再进行训练。

3.手工迁移:算法工程师通过对模型的分析、GPU与NPU代码的对比进而对训练脚本进行修改,以支持在昇腾Al处理器上执行训练。迁移要点如下:定义NPU为训练设备,或将适配GPU的接口切换至适配NPU的接口。·多卡迁移需修改芯片间通信方式为hccl。

自动迁移——只需一行代码

仅PyTorch1.8.1版本及以上使用,自动迁移方式较简单,且修改内容最少,只需在训练脚本中添加引入库代码。

使用方法

import torchimport torch_npu……

#在训练脚本中添加引入库代码

from torch_npu.contrib import transfer_to_npu

1.8、工具迁移

 

二、AscendCL概念

2.1、AscendCL功能

 

2.2、Host&Device

        Host:指与Device相连接的x86服务器、ARM服务器,会利用Device提供的NN(Neural-Network)计算能力,完成业务.Device:指安装了芯片的硬件设备,利用PCle接口与Host侧连接,为Host提供NN计算能力。若存在多个Device,多个Device之间的内存资源不能共享。

典型场景如在服务器上插Atlas300l设备:

        将Atals 300l推理卡插入推理服务器(或个人PC)的主机中,此时程序的运行均在CPU侧进行控制,当需要进行专用计算(模型推理等)时,将CPU侧内存数据传输到NPU侧内存中,NPU侧完成专用计算后将数据回传至CPU侧。

        CPU+内存所在这一侧,或者说,进程启动的这一侧,收集数据的这一侧,我们称之为“Host”侧;NPU+Device所在这一侧,或者说,进行专用计算的这一侧,使用数据的这一侧,我们称之为“Device”侧;

2.3、运行资源管理

2.4、同步和异步

        在AscendCL中当提及“同步&异步”的时候,都是站在调用者、执行者的角度来看的。同步:当前线程发起一个方法调用,然后阻塞在调用点等待被调用方法执行完毕返回,再继续向下走。

异步:调用者向执行者下发一个任务之后,不等待任务执行完,而是立即返回往下走,暂且不管这个任务是否执行完毕。

三、编译运行推理样例及代码开发流程

3.1、开发流程

        使用AscendCL接口开发应用的整体流程分为以下几个部分:准备环境:提前部署昇腾Al软件栈,以便后续编译、运行时使用;

创建代码目录:创建目录,存放代码文件、编译脚本、测试图片数据、模型文件等;

构建模型:模型推理场景下,必须要有适配昇腾AI处理器的离线模型(*.om文件);

开发应用:根据实际场景,开发用于图像/视频数据处理、推理、单算子调用等功能的应用;

编译及运行应用:编译代码生成可执行文件,运行可执行文件验证应用的功能;

 

3.2、开发应用

将AscendCL的应用高度抽象后,可以得到以下流程:

        初步学习过程中,AscendCL初始化去初始化、运行管理资源的申请和释放这四步的调用一般是固定的,在开发应用的过程中可以固定使用。

AscendCL初始化:使用AscendCL接口开发应用时,必须先初始化

AscendCL,否则可能会导致后续系统内部资源初始化出错,进而导致其它业务异常,调用acllnit接口实现初始化AscendCL.

运行管理资源申请:应用程序中必须包含运行管理资源申请的代码逻辑,

需要按顺序依次申请如下运行管理资源:Device、Context、Stream,确保可以使用这些资源执行运算、管理任务。

运行管理资源释放:所有数据处理都结束后,需要依次释放运行管理资源:

Stream、Context、Device。

AscendCL去初始化:有初始化就有去初始化,在确定完成了AscendCL的

所有调用(包括运行管理资源释放完成)之后,或者进程退出之前。需调用AscendCL接口实现AscendCL去初始化,调用aclFinalize接口实现AscendCL去初始化。

开发关键功能这一步骤主要分为以下三点:

图像图形预处理

模型推理计算

单算子加速计算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值