Asced c 算子开发入门 (硬件平台昇腾910A)

本文介绍了在华为云上搭建Ascedc环境,包括Cann7.0的安装过程,以及PyTorchMNIST模型在NPU上的三种迁移训练方法(自动、工具和手工)。重点讲解了Addcmul算子的开发和迁移问题,包括生成JSONIR文件和平台适配的注意事项。
摘要由CSDN通过智能技术生成

参照2023年cann训练营第二季 Asced c 算子开发
在这里插入图片描述一、在华为云搭建环境
进入到华为云控制台,左上角切换至北京4,租用服务器
在这里插入图片描述进入镜像,安装环境。
在这里插入图片描述在这里插入图片描述

进行Asced c开发需要cann 7.0环境,去昇腾官网下载Ascend-cann-toolkit_7.0.0.alpha002_linux-aarch64.run,下载链接如下:

https://www.hiascend.com/developer/download/community/result?module=cann&cann=7.0.0.alpha002

安装方法参照

https://blog.csdn.net/weixin_42140974/article/details/135093518?spm=1001.2014.3001.5502

安装完成。
在这里插入图片描述

二、pytorch MNIST Asced npu(910)训练
迁移训练有三种方法
1.自动迁移
自动迁移 导入脚本转换库 ,整体过程为:边训练边转换

import torch
import torch_npu
.....
import transfer_to_npu

2.工具迁移
工具迁移是使用 ascend-toolkit/latest/tools/ms_fmk_transplt 路径下的 pytorch_gpu2npu.sh脚本进行迁移 整体过程为:先转换脚本,再进行训练。

#单卡
./pytorch_gpu2npu.sh -i /home/train/ -o /home/out -v 1.11.0 [-s] [-m]
#分布式
./pytorch_gpu2npu.sh -i /home/train/ -o /home/out -v 1.11.0 [-s] [-m] distributed -m /home/train/train.py [-t model]

3.手工迁移
手动更改代码,完成设备的迁移。
迁移要点如下:
(1)定义NPU为训练设备,或将适配GPU的接口切换至适配NPU的接口。
(2)多卡迁移需修改芯片间通信方式为hccl。

官方推荐使用自动迁移进行训练
在这里插入图片描述在这里插入图片描述
速度不是很快,是因为没有进行优化,只是完成了初步的迁移,不过听说马上昇腾npu和pytorch可以完美的适配了。

三、算子开发Addcmul
1.测试Add算子开发例程

在这里插入图片描述算子例程测试成功。
2.重新搭建一个算子开发工程:
使用Mindstudio生成json IR文件:
在这里插入图片描述生成文件内容如下:

[
	{
		"framework":"ONNX",
		"op":"Addcmul",
		"input_desc":[
			{
				"name":"x",
				"format":"ND",
				"type":"float",
				"param_type":"required"
			},
			{
				"name":"y",
				"format":"ND",
				"type":"float",
				"param_type":"required"
			},
			{
				"name":"z",
				"format":"ND",
				"type":"float",
				"param_type":"required"
			}
		],
		"output_desc":[
			{
				"name":"out",
				"format":"ND",
				"type":"float",
				"param_type":"required"
			}
		],
		"attr":[
			{
				"name":"value",
				"type":"float",
				"default_value":1.0,
				"param_type":"required"
			}
		]
	}
]

3.使用msopgen 工具生成算子开发文件

/home/ma-user/work/Ascend/ascend-toolkit/latest/python/site-packages/bin/msopgen gen -i ./IR_json.json -c ai_core-Ascend910 -lan cpp -out /home/ma-user/work/op_add/AddCustom

在这里插入图片描述
4.根据Asced c 视频课 将add工程中的代码 复制到本工程并做修改,文章最后提供完整的工程链接
更改过后运行

bash run.sh ascend910 cpu

发现报错如下:
在这里插入图片描述
代码只执行前128个数据运算,发现如果执行bash run.sh ascend310p cpu 或者ascend910B1是可以通过测试的,因为官方的算子课需要的平台是310p平台,每个平台的硬件设计不同,所以代码的编写也不同,在cann算子老师 大姚老师帮助下将

//constexpr int32_t TILE_NUM = 8;                                     
//constexpr int32_t BUFFER_NUM = 2;                              

constexpr int32_t TILE_NUM = 16;                              
constexpr int32_t BUFFER_NUM = 1;  

做如上修改,代码通过测试。
在这里插入图片描述
npu 测试命令

bash run.sh ascend910 npu_onboard

在这里插入图片描述
完结。

链接: https://pan.baidu.com/s/15E9gPEKHum0FyvQAqnp0Cg?pwd=5qy1 提取码: 5qy1 复制这段内容后打开百度网盘手机App,操作更方便哦
  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bopker_Wo911416721

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值