昇腾Mindstudio官方样例源码解读分享---Resnet50推理

作为初学者,最近刚接触Ascend200DK,按照官方的指导一步步搭建起了开发+运行环境,指导可以参考下面这个链接https://gitee.com/lovingascend/quick_start/blob/master/Atlas200DK_separate_MD/environment.md

运行的第一个样例就是Mindstudio自带的Resnet50网络,对昇腾AI处理器的强大性能尤为印象深刻。个人习惯会去研究一下源码,这里分享下心得体会,能力有限,水平一般,如果哪里写的不对的,还请指正。

对于Mindstudio开发套件,个人理解作用是提供一个简单方便的界面,让代码开发和调试更加顺畅,
Mindstudio安装在开发环境Ubuntu18.04系统,而我们最终编译出来的二进制文件要跑在运行环境的CentOS上面,如果没有Mindstudio的话,我们要不就是直接在运行环境上编译,要不就得在开发环境上搭建交叉编译环境,而使用Mindstudio在编译的时候,直接就可以选定目标版本和ARM or X86架构,节省了不少时间。然后推理的依赖文件、输出结果,Mindstudio工具可以进行方便的内部传输,不用手工再用scp或者sftp之类的操作互传。另外还有profiling工具进行性能调优等功能强大的组件,暂时没用到,后面再深入体会。

Resnet50样例代码的结构如下:
昇腾Mindstudio官方样例源码解读分享---Resnet50推理_第1张图片

1、预处理

script/transferPic.py 这里是图像的预处理,将jpg图片转成bin

om模型在推理时,需要输入的是二进制的bin文件,所以这里要提前进行转换,查看这个python的源码:
昇腾Mindstudio官方样例源码解读分享---Resnet50推理_第2张图片
这里使用了Pillow库将图片resize之后,图像排列由rgb转为bgr,然后减均值,最后保存成bin文件。

2、src/main.cpp

主函数,程序入口:
昇腾Mindstudio官方样例源码解读分享---Resnet50推理_第3张图片
实例化类SampleProcess,这个类里面实现了acl的初始化和模型的推理,还有后处理即罗列top1~top5类别的置信度。

3、src/sampleprocess.cpp

Result SampleProcess::InitResource()
昇腾Mindstudio官方样例源码解读分享---Resnet50推理_第4张图片
此处代码实现acl的初始化、setDevice、创建Context和stream、设置runMode。

关于runMode,可以理解为我们最终的二进制文件需要在运行环境上执行时,是直接在Device侧运行,还是在Host侧运行,相应的一些acl接口应该存在差异,所以这里要区分一下。

Result SampleProcess::Process()
昇腾Mindstudio官方样例源码解读分享---Resnet50推理_第5张图片
这里就是加载om模型和传入输入图片bin文件,然后进行推理,后处理得到top1~top5分类置信度。
昇腾Mindstudio官方样例源码解读分享---Resnet50推理_第6张图片
processModel.Execute(),这里就是模型执行推理的地方,如果想知道单纯的芯片推理性能,可以在这个语句前后打点,然后计算耗时是多少ms得到。

4、src/model_process.cpp

昇腾Mindstudio官方样例源码解读分享---Resnet50推理_第7张图片
这个cpp里面包含的都是模型的加载、卸载、输入和输出的初始化操作,包括内存分配与释放。
昇腾Mindstudio官方样例源码解读分享---Resnet50推理_第8张图片
这里通过aclrtMalloc接口申请内存的时候,注意红框的地方,都是大页内存优先,应该是性能更优。

5、src/utils.cpp

这个cpp里面放的是读取bin文件的函数和获取device侧buffer,感觉好像没用到,不太清楚干啥用的。

6、结语

acl接口的文档可以参考下面这个链接:

https://support.huaweicloud.com/adevg-A200dk_3000/atlasdevelpment_01_0014.html

个人感觉ACL这一套接口很强大,可以很方便的调用硬件底层能力,这个文档里面还有很多应用开发样例可以参考,非常nice。

更多使用昇腾AI芯片推理&训练案例

Ascend官方Modelzoo:
https://gitee.com/ascend/modelzoo

你可能感兴趣的:(Ascend,昇腾AI芯片,caffe,tensorflow,神经网络,机器学习)