1. MindStudio环境搭建
MindStudio是一套基于IntelliJ框架的开发工具链平台,提供了应用开发,调试,Profiling工具,模型转换,模型可视化等功能,以及对开发者来说至关重要的精度对比,自定义算子等重要功能,同时还提供了网络移植,优化和分析功能,方便用户开发应用程序。
按照平台安装教程安装MindStudio即可完成本部分的环境搭建。
2.模型简介
本次实验我们的目标是在MindStudio上使用ResNet进行图像分类任务。ResNet曾在ILSVRC2015比赛中获得冠军,在图像分类上具有很大的潜力。ResNet的主要思想是在网络中增加了直连通道,使得原始输入信息能够直接传入到后面的层中,ResNet的结构如下图所示。
ResNet会将残差块串联,形成多层网络。一般常见的ResNet根据层数的大小有ResNet-18, ResNet-34, ResNet-50, ResNet-101等。
3. 创建推理工程
打开MindStudio,点击New Project,进入新建工程界面。选择Ascend App。填入项目名resNext101_32x8d。首次新建训练工程时,需要配置CANN的版本。点击Change。
点击 + 配置远程连接,然后根据选项填入自己服务器的IP地址、端口号、用户名和密码等。
配置Remote CANN location。该参数需要填入ascend-toolkit在服务器上的路径地址。在这里,我们的toolkit路径如下
/usr/local/Ascend/ascend-toolkit/5.1.RC1。点击finishing进行配置。
点击Next,选择Pytorch Project。
点击Finish,完成工程创建,进入工程主界面。
4. 将环境部署到远端
Mind Studio可以支持实时的将本地文件夹内容同步到服务器,可以达到像自己电脑上执行模型推理一样的效果,此过程需要两个步骤。点击File->Settings->Tools,即可看到两个设置的入口。
- 配置ssh
首先点击SSH Configuration,再点击 + 配置远程连接,然后根据选项填入自己的服务器ip地址,端口号,用户名和密码。
- 部署本地文件夹
相当于将远端服务器的路径与本地文件夹形成一个对应关系。Deployment配置能够更精准地连接远程服务,他需要选择一个SSH连接来定位远程主机,然后设置本地与远程项目目录的对应关系。首先选择连接哪SSH服务,然后测试连接是否可用。
下一步,设置项目目录映射关系,点击Mappings,然后选择本地的项目目录和远程的项目目录(最好提前创建文件夹),接下来跑代码的时候MindStudio会保证这两个目录文件的同步。
配置好Mappings之后,建议配置Excluded Paths, 因为MindStudio默认行为会把Mappings目录的文件保持完全相同,这意味着只存在于远端服务器的数据集文件会被删除(如果本地没有数据集)。再次,我配置了几个需要排除的文件夹目录。
5. 配置Python环境
点击File -> Project Structures -> SDKs可以看到如图所示的界面。点击+号,可以新增python SDK和JDK。
点击Add Python SDK后,将弹出下图所示界面,点击左侧的SSH Interpreter,如下图所示,首先选择使用哪一个Deployment,这是刚刚我们配置过的。然后选择python解释器的路径。图中的路径是MindStudio自动检测出来的,但一般需要我们找自己的Python环境安装目录。
然后点击Project,选择刚才添加到MindStudio中的Python解释器,将其作为本项目所使用的解释器。
6. 数据预处理
首先执行数据预处理脚本image_torch_preprocess.py, 将原生的图片数据转换为bin格式的输入文件。
第一个参数为原始数据集(.jpeg)所在路径,第二个参数为输出的二进制文件(.bin)所在的路径。每个图片对应生成一个二进制文件。在预处理获得bin文件之后,再执行get_info.py提取输入信息。
7. 模型转换
模型转换主要分为两步,第一步是将原有的pth模型转换为通用的onnx模型,第二步是将onnx模型转换为npu适用的om模型。
首先调用python脚本将pth模型转换为onnx模型。
再使用ATC工具将onnx模型导出为om模型。MindStudio提供了atc工具的窗口化应用,他会根据用户选择自动生成atc指令。Model Converter的入口如图所示。
选择onnx路径,模型输出名称,目标设备,输入格式和batchsize等信息。
本实验需要跑到不同的batchsize,这里只需要修改shape参数即可对应生成不同batch size的om模型。MindStudio自动生成如下atc指令,用户可以在此做最后的校验,点击Finish即可开始进行模型转换。
转换成功得到结果如下:
8. 离线推理
使用benchmark工具进行离线推理,可以创建如图所示的应用:点击 + 号,再点击Ascend App,
按照自己的模型相关信息进行填写即可。
在不同机器上执行效率对比如下表格
| Model | Batch Size | 310p | 310 (FPS/Card) | T4 (FPS/Card) | 310p/310 | 310p/T4 |
| ResNeXt101 | 1 | 594.884 | 594.696 | 254.252 | 1.000 | 2.340 |
| ResNeXt101 | 4 | 566.742 | 674.64 | 486.656 | 0.840 | 1.160 |
| ResNeXt101 | 8 | 937.698 | 669.232 | 531.996 | 1.401 | 1.763 |
| ResNeXt101 | 16 | 1086.34 | 670.3 | 570.867 | 1.621 | 1.903 |
| ResNeXt101 | 32 | 1191.32 | 429.944 | 543.293 | 2.771 | 2.193 |
| ResNeXt101 | 64 | 781.172 | 427.304 | 539.924 | 1.828 | 1.447 |
| 最优batch | 32/8/16 | 1191.32 | 669.232 | 570.867 | 1.766 | 2.087 |
9. 精度对比
推理结束之后,可以调用imagenet_acc_eval.py脚本和原有标签数据进行对比,得到top5的结果。
最后的精度表现如下:
top1准确率为79.3%,top5准确率为94.52%。



