二叉树排序 分布式 反射 delphi debugging methods 前端vue框架 jq第一个子元素 jquery去空格 jquery绑定change事件 js获取月份 c语言求和 bitlocker加密好慢 python编程练习题 docker查看所有容器 当前时间减一天 lora开发 oracle创建唯一索引 安装python python中sort函数 python教程 python安装环境变量 python如何调用函数 python编程语言 python传递参数 java怎么编译 java中的集合 java包名 java中的泛型 java绝对值 linux文档 linux镜像安装 php网络编程 php连接mssql c语言表白代码 python队列 emit 手机模拟器下载 vfloppy 8元秒电脑
当前位置: 首页 > 学习教程  > 编程语言

<自学AI> 晟腾Mindstudio官方样例源码解读分享---Resnet50推理

2020/12/5 10:33:01 文章标签:

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

作为初学者,最近刚接触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样例代码的结构如下:
输入图片说明

1、预处理

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

om模型在推理时,需要输入的是二进制的bin文件,所以这里要提前进行转换,查看这个python的源码:
输入图片说明
这里使用了Pillow库将图片resize之后,图像排列由rgb转为bgr,然后减均值,最后保存成bin文件。

2、src/main.cpp

主函数,程序入口:
输入图片说明
实例化类SampleProcess,这个类里面实现了acl的初始化和模型的推理,还有后处理即罗列top1~top5类别的置信度。

3、src/sampleprocess.cpp

Result SampleProcess::InitResource()
输入图片说明
此处代码实现acl的初始化、setDevice、创建Context和stream、设置runMode。

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

Result SampleProcess::Process()
输入图片说明
这里就是加载om模型和传入输入图片bin文件,然后进行推理,后处理得到top1~top5分类置信度。
输入图片说明
processModel.Execute(),这里就是模型执行推理的地方,如果想知道单纯的芯片推理性能,可以在这个语句前后打点,然后计算耗时是多少ms得到。

4、src/model_process.cpp

输入图片说明
这个cpp里面包含的都是模型的加载、卸载、输入和输出的初始化操作,包括内存分配与释放。
输入图片说明
这里通过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芯片推理&训练案例

https://gitee.com/ascend/modelzoo


本文链接: http://www.dtmao.cc/news_show_450251.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?