【2023 · CANN训练营第一季】新手笔记2

文章详细介绍了PyTorch模型如何对接昇腾AI处理器,包括AscendCL接口支持的编程语言、PyTorch框架的适配方案,以及apex模块在混合精度训练中的作用。同时,提出了模型迁移时的关键修改点,如将CUDA替换为NPU,以及在多卡场景下的性能优化策略。此外,还提到了错误排查方法和AscendCL在应用开发中的使用。
摘要由CSDN通过智能技术生成

1.AscendCL接口支持的编程语言有C&C++、Python。

2.PyTorch框架在线对接昇腾AI处理器的适配方案的特性和优点:

最大程度的继承PyTorch框架动态图的特性

最大限度的继承原生PyTorch上的使用方法,用户迁移过程中在代码开发和代码重用时做到最小的改动

最大限度的继承PyTorch原生的体系结构

扩展性好。在打通流程的通路之上,对于新增的网络模型或结构,只需涉及相关计算类算子的开发与实现

3.apex的功能和特点:

[功能]opt_level: O1 [描述]精度模式,Conv, Matmul等使用float16计算,其他如Softmax、BN使用float32

[功能]opt_level: O2 [描述]性能模式,除了BN使用float32外,其他绝大部分使用float16

[功能]静态Loss Scale [描述]静态设置参数确保混合精度训练收敛

[功能]动态Loss Scale [描述]动态计算Loss Scale值并判断是否溢出

4. 当迁移出现报错时,查看底层日志是一种常见的DEBUG手段,可以通过设置环境变量ASCEND_GLOBAL_LOG_LEVEL的方式收集不同等级的日志。关于该变量取值与对应日志级别的关系:

0对应DEBUG级别

1对应INFO级别

2对应WARNING级别

3对应ERROR级别

5.使用手工方法进行PyTorch模型迁移时,由于NPU上的一些限制,PyTorch需要使用DistributedDataParallel(DDP),若原始代码使用的是DataParallel(DP)则需要修改为DDP。

6.关于模型迁移中单卡模型迁移代码的主要修改点举例:

[原生代码]CALCULATE_DEVICE = "cuda:0"

[NPU代码]CALCULATE_DEVICE = "npu:0"

[原生代码]model = model.cuda()

[NPU代码]model = model.npu()

[原生代码]torch.cuda.set_device(CALCULATE_DEVICE)

[NPU代码]torch.npu.set_device(CALCULATE_DEVICE)

7.手工迁移多卡场景下不同的启动方式会对训练性能造成影响,以下选项中性能最高的启动方式是:

for i in $(seq 0 8)

do

taskset -c 0-24 python3.7 xxx

done

8.使用脚本转换工具进行PyTorch模型迁移,脚本转换工具根据适配规则,对用户脚本给出修改建议并提升转换功能,大幅度提高了脚本迁移速度,降低开发者的工作量

9.安装PyTorch-Ascend(1.8)的前提条件有

需确保CMake >= 3.12.0, gcc >= 7.3.0

已完成CANN开发或运行环境的安装,确保相应OS依赖(如python, numpy等)已安装完成

用户直接在安装环境中进行编译

10.关于apex的功能:

[功能]opt_level: O1 [描述]精度模式,Conv, Matmul等使用float16计算,其他如Softmax、BN使用float32

[功能]opt_level: O2 [描述]性能模式,除了BN使用float32外,其他绝大部分使用float16

[功能]静态Loss Scale [描述]静态设置参数确保混合精度训练收敛

11.达芬奇架构中的计算单元:

Cube计算单元负责矩阵运算,每次执行可以完成一个fp16的16*16与16*16的矩阵乘

Vector计算单元负责执行向量运算,覆盖各种基本的计算类型

Scalar计算单元负责各类型的标量数据运算和程序的流程控制

12.PyTorch-Ascend(1.8)的安装步骤为:

安装依赖 pyyaml和wheel -> 安装官方torch包 -> 编译生成PyTorch插件的二进制安装包 -> 安装插件torch_npu包

13.PyTorch模型迁移有:

手工迁移、使用transfer_to_npu自动迁移、脚本转换工具迁移

14.AscendCL应用开发流程:

使用AscendCL接口开发应用时,必须先调用aclInit接口进行AscendCL初始化,否则可能会导致后续系统内部资源初始化出错,进而导致其它业务异常

模型推理场景下,必须要有适配昇腾AI处理器的om离线模型,可提前使用ATC工具将第三方框架的模型转换为om模型

模型推理场景下,加载模型,执行模型推理,推理结束后,需及时卸载模型

有初始化就有去初始化,在确定完成了AscendCL的所有调用之后,或者进程退出之前,需调用aclFinalize接口实现AscendCL去初始化

15.当模型迁移发生报错时,可以通过DEBUG手段进行错误排查:

由于PyTorch是异步执行框架,直接print可能无法准确定位到错误的地方,需使用流通步接口辅助打点

打点时可以使用print(torch.npu.synchronize(), "打点")

可以通过hook对model中的每个module对应注册上hook,看看运行到什么地方断了

可以通过详细的NPU底层报错日志来帮助定位问题

16.AscendCL知识点:

用户可以调用AscendCL提供的接口进行图片分类、目标识别等应用的开发

用户可以通过第三方框架调用AscendCL,以便使用昇腾AI处理器的计算能力

用户可以使用AscendCL封装实现第三方lib库,以便提供昇腾AI处理器的运行管理、资源管理等能力

用户可以使用AscendCL进行图开发并部署到昇腾AI处理器运行

17.模型迁移中单卡模型迁移代码的主要修改点有:

接口从cuda切换至npu

torch.cuda更改为torch.npu

18.apex是混合精度模块,由于NPU的天然混合精度属性,迁移后需要使能apex混合精度

model = model.cuda( )

optimizer = torch.optim.SGD(modle.parameters( ), lr=0.1)

model, optimizer = amp.initialize(model, optimizer, opt_level="O2", loss_scale=128.0)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值