写点什么

从零教你使用 MindStudio 进行 Pytorch 离线推理全流程

  • 2022 年 9 月 02 日
    广东
  • 本文字数:3130 字

    阅读完需:约 10 分钟

从零教你使用MindStudio进行Pytorch离线推理全流程

本文分享自华为云社区《使用MindStudio进行Pytorch离线推理全流程》,作者:yd_281378454。

1 MindStudio 环境搭建


本次实验在 MindStudio 上进行,请先按照教程 配置环境,安装 MindStudio。


MindStudio 的是一套基于华为自研昇腾 AI 处理器开发的 AI 全栈开发工具平台,该 IDE 上功能很多,涵盖面广,可以进行包括网络模型训练、移植、应用开发、推理运行及自定义算子开发等多种任务。MindStudio 除了具有工程管理、编译、调试、运行等一般普通功能外,还能进行性能分析,算子比对,可以有效提高工作人员的开发效率。除此之外,MindStudio 具有远端环境,运行任务在远端实现,对于近端的个人设备的要求不高,用户交互体验很好,可以让我们随时随地进行使用。

2 VPN 安装和配置


安装好 MindStudio 后,需要配置远程环境。请按照教程 进行 VPN 客户端的安装与配置。安装好 VPN 后,可以先在终端用 ssh 指令测试连接。(这一步是验证网络连接是否可用,也可以跳过)


3 创建推理工程


打开 MindStudio,点击 New Project,进入新建工程界面。选择 Ascend APP。填入项目名 spnasnet_100。首次新建训练工程时,需要配置 CANN 的版本。点击 Change。



点击 + 配置远程连接,然后根据选项填入自己服务器的 ip 地址、端口号、用户名和密码等。




配置 Remote CANN location。该参数需要填入 ascend-toolkit 在服务器上的路径地址。在这里,我们 toolkit 的路径如下:/usr/local/Ascend/ascend-toolkit/5.1.RC1。点击 finishing 进行配置。初次配置时时间稍长,请耐心等待。



点击 Next,选择 Pytorch Project。



点击 Finish,完成工程创建,进入工程主界面。

4 配置 SSH 和 Deployment


在 MindStudio 的远程服务中,定义了 SSH 配置和 Deployment 两个概念。前者 SSH 配置类似 MobaxTerm 中的 Session 的概念,用户可以保存多个远程服务器的连接配置。后者 Deployment 管理远程开发时的本地文件与远程文件的同步。配置好 Deployment 后,我们就可以像使用本地 python 环境一样去使用远程的 python 环境了。点击 File -> Settings -> Tools,即可看到两个设置的入口,下面分别介绍如何配置他们。


4.1 配置 SSH


首先点击 SSH Configurations,再点击 + 配置远程连接,然后根据选项填入自己服务器的 ip 地址、端口号、用户名和密码等。测试成功点击 Apply 即可保存配置,以后就可以一键连接啦!


4.2 配置 Deployment


Deployment 配置能够更精准地连接远程服务,它需要选择一个 SSH 连接定位远程主机,然后设置本地与远程项目目录的对应关系。如下图所示创建一个新的 Deployment。



如图 310 是我创建的 Deployment 名字,首先选择连接哪一个 SSH 服务,然后测试连接是否可用。



下一步,设置项目目录映射关系,点击 Mappings,然后选择本地的项目目录和远程的项目目录(最好是提前创建好文件夹),接下来跑代码的时候 MindStudio 会保证这两个目录文件的同步。



配置好 Mappings 后,建议配置 Excluded Paths,因为 MindStudio 的默认同步行为会把 Mappings 对应目录的文件保持完全相同,这意味着只存在于远程的数据集文件夹会被删除(如果本地没有数据集)。在此我配置了几个需要排除的文件夹目录。


5 配置远程 python 解释器


现在,SSH 和 Deployment 的映射关系已经配置好了,但是 MindStudio 还不知道 python 解释器的位置。因此,下面将介绍如何配置 python 解释器。


点击 File -> Project Structure->SDKs 可以看到如图所示的界面。点击+号,可以新增 python SDK 和 JDK。这里只演示 Python 的添加方法。



点击 Add Python SDK 后,将弹出下图所示的界面,点击左侧的 SSH Interpreter,如下图所示,首先选择使用哪一个 Deployment,这是刚刚我们配置过的。然后选择 python 解释器的路径。图中的路径是 MindStudio 自动检测出来的,但一般需要自己找自己的 Python 环境安装目录。如果是 conda 环境,可以使用 which python 找到 python 的安装路径。




然后点击 Project,选择刚才添加到 MindStudio 中的 python 解释器,将其作为本项目使用的解释器。


6 数据集准备

6.1 数据预处理


上传好数据集以后,执行 preprocess_spnasnet_100_pytorch.py 脚本,生成数据集预处理后的 bin 文件。



第一个参数为原始数据验证集(.jpeg)所在路径,第二个参数为输出的二进制文件(.bin)所在路径。每个图像对应生成一个二进制文件。


MindStudio 会首先上传本地文件到远程服务器,将本地的文件同步到远程这个过程可能很慢,同步完成后开始运行 Python 代码,MindStudio 会实时地在控制台打印输出:


6.2 生成数据集 info 文件


执行 get_info.py 脚本,生成数据集信息文件。



第一个参数为模型输入的类型,第二个参数为生成的 bin 文件路径,第三个为输出的 info 文件,第四、第五个为宽高信息。执行结果:


7 模型转换


本模型基于开源框架 PyTorch 训练的 spnasnet_100 进行模型转换。先使用 PyTorch 将模型权重文件.pth 转换为.onnx 文件,再使用 ATC 工具将.onnx 文件转为离线推理模型文件.om 文件。


首先获取权重文件。单击Link 在 PyTorch 开源框架获中取经过训练的 spnasnet_100 权重文件 model_best.pth.tar,源码中已提供下载权重文件。

7.1 导出 onnx 文件


使用 pthtar2onnx.py 脚本将.pth 文件转换为.onnx 文件



7.2 导出 om 文件


从 onnx 转为 om 需要用 atc 工具,MindStudio 提供了 atc 工具的窗口化应用,它会根据用户选择自动生成 atc 指令。Model Converter 的入口如图所示:



选择 onnx 模型路径,模型输出名称,目标设备,输入格式和 batchsize 等信息。



MindStudio 自动生成如下 atc 指令,用户可以在此做最后的校验,点击 Finish 即可开始进行模型转换。



模型转换成功:


8 模型推理


使用 benchmark 工具进行推理。这个和前面的 python 脚本不同,它在 MindStudio 中属于 ACL 应用,可以如图所示创建应用:


点击 + 号,再点击 Ascend App:



然后进行如下配置:



参数详情请参见《CANN推理benchmark工具用户指南》 。推理后的输出默认在当前目录 result 下。

执行结果:



运行出错:error while loading shared libraries: libascendcl.so: cannot open shared object file: No such file or directory.


这个错误是因为没有配置好环境变量。因为我们在终端运行它时,一般要先执行一下:source /usr/local/Ascend/ascend-toolkit/set_env.sh,这一步操作在 MindStudio 中可以通过如图所示的方法配置环境变量解决:



变量内容就是/usr/local/Ascend/ascend-toolkit/set_env.sh 的内容,读者可以直接复制使用。


LD_LIBRARY_PATH=/usr/local/Ascend/ascend-toolkit/latest/lib64:/usr/local/Ascend/ascend-toolkit/latest/lib64/plugin/opskernel:/usr/local/Ascend/ascend-toolkit/latest/lib64/plugin/nnengine:$LD_LIBRARY_PATH;PYTHONPATH=/usr/local/Ascend/ascend-toolkit/latest/python/site-packages:/usr/local/Ascend/ascend-toolkit/latest/opp/op_impl/built-in/ai_core/tbe:$PYTHONPATH;PATH=/usr/local/Ascend/ascend-toolkit/latest/bin:/usr/local/Ascend/ascend-toolkit/latest/compiler/ccec_compiler/bin:$PATH;ASCEND_AICPU_PATH=/usr/local/Ascend/ascend-toolkit/latest;ASCEND_OPP_PATH=/usr/local/Ascend/ascend-toolkit/latest/opp;TOOLCHAIN_HOME=/usr/local/Ascend/ascend-toolkit/latest/toolkit;ASCEND_HOME_PATH=/usr/local/Ascend/ascend-toolkit/latest


设置变量后,再次启动运行,可以在控制台看到,在执行 benchmark 前,会首先 export 环境变量。



修改后代码运行成功:



可以获得 batch16 310 单卡吞吐率为 1379.94×4 = 5519.76 fps


9 精度验证


调用 vision_metric_ImageNet.py 脚本与数据集标签 val_label.txt 比对,可以获得 Accuracy Top5 数据,结果保存在 result.json 中。



第一个参数为生成推理结果所在路径,第二个参数为标签数据,第三个参数为生成结果文件路径,第四个参数为生成结果文件名称。


获得精度数据如下:310 Top1 accuracy 为 74.2%,Top5 accuracy 为 91.94%。




点击关注,第一时间了解华为云新鲜技术~


发布于: 刚刚阅读数: 4
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
从零教你使用MindStudio进行Pytorch离线推理全流程_Python_华为云开发者联盟_InfoQ写作社区