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

举报
tang121212 发表于 2023/05/14 13:20:05 2023/05/14
【摘要】 1.AscendCL接口支持的编程语言有C&C++、Python。2.PyTorch框架在线对接昇腾AI处理器的适配方案的特性和优点:最大程度的继承PyTorch框架动态图的特性最大限度的继承原生PyTorch上的使用方法,用户迁移过程中在代码开发和代码重用时做到最小的改动最大限度的继承PyTorch原生的体系结构扩展性好。在打通流程的通路之上,对于新增的网络模型或结构,只需涉及相关计算类算...

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)




【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。