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