推理实践丨如何使用mindstudio进行pytorch模型离线推理

华为云开发者联盟 华为云开发者联盟     2022-11-29     679

关键词:

摘要:本教程所示例的任务是Ascend Pytorch离线推理,即对给定的已经训练好的模型参数和推理脚本,在Ascend 310/710和Tesla设备上进行推理应用。

本文分享自华为云社区《​​使用MindStudio进行Pytorch模型离线推理​​》,作者: 袁一博。

本教程所示例的任务是Ascend Pytorch离线推理,即对给定的已经训练好的模型参数和推理脚本,在Ascend 310/710和Tesla设备上进行推理应用。具体来说,本教程推理的模型是RegNetY-1.6GF,即论文《​Designing Network Design Spaces​》提出的一个模型。RegNetY-1.6GF是使用网络结构搜索(NAS)技术对搜索空间进行搜索得到的模型。该模型解决的任务是图像分类任务,训练和测试数据集是ImageNet1k数据集。本案例将在ImageNet1k的测试集上实现推理流程。在执行该任务之前,给定的模型和脚本文件如下:

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_MindStudio

关于该任务具体流程和要求可参考官方推理指导文档:​​Ascend-PyTorch离线推理指导/PyTorch离线推理-离线推理指导.md​​。

本教程更侧重于使用MindStudio完成该项任务,而不是该任务的详细步骤,因此会详细介绍MindStudio的环境配置、脚本运行以及可能遇到的难题,所以对其他使用MindStudio进行推理应用程序开发的同学也会有一定的参考价值。

MindStudio环境搭建

昇腾深度学习生态包括算子开发,MindSpore模型训练,模型推理,MindX和ACL应用开发等组件。从算子开发到应用开发,组件功能覆盖范围较广,涉及的编程语言也不只一种,而市场上并没有一个通用的开发环境软件,因此MindStudio应运而生。MindStudio提供了一站式AI开发环境,支持Python,Java和C语言的开发,并提供了众多性能调优工具,应用开发中提供了插件化扩展机制,打造了高效、便捷的全流程开发工具链。有了MindStudio基本上可以做到完全脱离命令行界面。

安装MindStudio + Ascend-cann-toolkit

本案例中使用的环境为:本地Ubuntu18.04安装的MindStudio5.0.RC1 + Ascend-cann-toolkit5.0.2 + 远程昇腾AI运行环境。

MindStudio和Ascend-cann-toolkit可参考官方安装指南:

​https://www.hiascend.com/document/detail/zh/mindstudio/50RC1/instg​​ ,安装过程中请注意依赖版本和pip源,没有太多坑。也可参考华为云社区提供的安装教程:​​https://support.huaweicloud.com/usermanual-mindstudioc73/atlasmindstudio_02_0008.html​

或参考第三方教程:​​https://zhuanlan.zhihu.com/p/388116455​​。

配置SSH和Deployment

在MindStudio的远程服务中,定义了SSH 配置和Deployment两个概念。前者SSH 配置类似MobaxTerm中的Session的概念,用户可以保存多个远程服务器的连接配置。后者Deployment管理远程开发时的本地文件与远程文件的同步。配置好Deployment后,我们就可以像使用本地python环境一样去使用远程的python环境了。

点击File -> Settings -> Tools,即可看到两个设置的入口,下面分别介绍如何配置他们。

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_Ascend_02

首先配置SSH。1.点击SSH Configurations;2.点击+,新增一个SSH连接;3输入主机IP地址和端口号;4输入登陆用户名;5输入密码;6点击测试连接。

测试成功点击Apply即可保存配置,以后就可以一键连接啦!如图红色方框中是我的三个远程SSH连接。

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_离线推理_03

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

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_Ascend_04

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

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_MindStudio_05

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

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_离线推理_06

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

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_环境变量_07

注:这是MindStudio比较坑的地方,我第一次运行脚本后在远程生成了test.onnx文件,这个文件并没有download到本地,而我再次运行脚本的时候,MindStudio的同步机制会把test.onnx删除掉,因为我本地没有这个文件....对于这个缺陷,建议把Deployment目录与数据及生成的中间文件隔离开。

配置远程python解释器

现在,SSH和Deployment的映射关系已经配置好了,但是MindStudio还不知道调用哪个程序执行代码,具体来说就是还不知道python解释器的位置。因此,下面将介绍如何配置python解释器。

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

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_离线推理_08

点击Add Python SDK后,将弹出下图所示的界面,注意,这里不只是添加远程python环境,本地的虚拟环境和conda环境也是在这里配置添加的。

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

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_环境变量_09

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_MindStudio_10

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_Ascend_11

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

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_离线推理_12

图中显示的是所有我添加的python解释器,这里有两个名字一模一样的解释器无法区分,对于这种情况,可以点击SDKs在SDK管理界面自定义每个python解释器的名字。

这个时候python解释器就配置好了,在Run Configurations界面选择配置好的解释器即可。

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_环境变量_13


执行推理过程

推理过程可分为以下步骤:

1.数据预处理。

2.模型转换:先将pth模型转化为onnx模型,再将onnx模型转化为om模型。

3.执行推理:使用benchmark进行推理。

4.精度验证:将推理结果和标签比对,计算准确率。

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_MindStudio_14


数据预处理

上传好数据集后,运行编写好的imagenet_torch_preprocess.py脚本进行数据预处理。

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_环境变量_15

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

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_Ascend_16

生成数据集info文件,执行get_info.py,同上配置好脚本参数和远程解释器即可。

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_python_17


模型转换

在本案例中,模型转化包括两个步骤:
1、由.pth转为.onnx

2、由.onnx转为.om

pth转onnx是使用pytorch实现的。执行编写好的python脚本即可。远程运行python脚本之前MindStudio会进行同步操作,将本地的文件同步到远程,这个过程可能很慢。

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_Ascend_18

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

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_离线推理_19

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

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_MindStudio_20

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

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_python_21

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_MindStudio_22

模型推理

使用benchmark工具进行推理。

这个和前面的python脚本不同,它在MindStudio中属于ACL应用,可以如图所示创建应用:

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_Ascend_23

然后进行如下配置:

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_离线推理_24

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_Ascend_25

运行出错: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中可以通过如图所示的方法配置环境变量解决:

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_环境变量_26

变量内容就是/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环境变量。

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_MindStudio_27

修改后代码运行成功:

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_Ascend_28

精度验证

执行 vision_metric_ImageNet.py脚本。

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_python_29

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_环境变量_30

FAQ

配置好Run Configuration启动执行后,很长时间终端无响应

在启动一个远程程序之前,MindStudio会首先将本地目录到远程目录进行同步,如果本地目录内容与远程差异较大,比如pth模型文件和数据集,同步到远程这个过程将会很慢。

可以在File Tranfer界面观察MindStudio正在进行哪些同步行为。

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_MindStudio_31

如果这里出现Delete操作,说明存在一些远程存在但本地没有的文件或文件夹,这时候MindStudio将会把远程的文件删除以达到同步。这种情况比较危险,应尽量避免,可以通过设置同步时的排除路径解决,如下图所示,我设置了prep_dataset和ILAVRC2012_img_val文件夹为排除路径,这样即使我本地目录没有这两个文件夹,同步过程中也不会被MindStudio删除了。

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_MindStudio_32

远程执行控制台报错:error while loading shared libraries: libascendcl.so: cannot open shared object file: No such file or directory

这个错误是因为没有配置好环境变量。我们在执行非Python程序的时候,需要先设置环境变量,在命令行通常是执行设置好的环境变量脚本进行设置,但在远程控制的情况下,默认是直接执行对应的程序,不会预先执行某个shell脚本,因此缺少了环境变量的配置这一步骤。

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_环境变量_33

解决方案: Run Configuration虽然不能指定运行某个shell脚本,但可以带上环境变量,如图所示,只需把shell脚本里的环境变量写到Environment Variables中即可实现相同的作用。

推理实践丨如何使用MindStudio进行Pytorch模型离线推理_python_34

MindStudio导入应用工程后,提示“No Python interpreter configured for the module”

这篇教程有详细的解决方案:​https://bbs.huaweicloud.com/forum/thread-187863-1-1.html


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

从零教你使用mindstudio进行pytorch离线推理全流程

摘要:MindStudio的是一套基于华为自研昇腾AI处理器开发的AI全栈开发工具平台,该IDE上功能很多,涵盖面广,可以进行包括网络模型训练、移植、应用开发、推理运行及自定义算子开发等多种任务。本文分享自华为云社区《​​... 查看详情

从零教你使用mindstudio进行pytorch离线推理全流程

摘要:MindStudio的是一套基于华为自研昇腾AI处理器开发的AI全栈开发工具平台,该IDE上功能很多,涵盖面广,可以进行包括网络模型训练、移植、应用开发、推理运行及自定义算子开发等多种任务。本文分享自华... 查看详情

开发实践丨昇腾cann的推理应用开发体验

...次Ascend在线实验的记录,主要内容是通过网络模型加载、推理、结果输出的部署全流程展示,从而快速熟悉并掌握ACL(AscendComputingLanguage)基本开发流程。本文分享自华为云社区《​​基于昇腾CANN的推理应用开发快速体验(Python... 查看详情

开发实践丨昇腾cann的推理应用开发体验(代码片段)

...cend在线实验的记录,主要内容是通过网络模型加载、推理、结果输出的部署全流程展示,从而快速熟悉并掌握ACL(AscendComputingLanguage)基本开发流程。本文分享自华为云社区《基于昇腾CANN的推理应用开发快速体验... 查看详情

基于u-net网络的图像分割的mindstudio实践

摘要:本实践是基于Windows版MindStudio5.0.RC3,远程连接ECS服务器使用,ECS是基于官方分享的CANN6.0.RC1_MindX_Vision3.0.RC3镜像创建的。本文分享自华为云社区《​​【MindStudio训练营第一季】基于U-Net网络的图像分割的MindStudio实践​​》... 查看详情

模型推理openvino推理实践(代码片段)

 本教程详细记录了在ubuntu上使用openvino进行推理的方法。文章目录1、安装openvino和open_model_zoo2、典型模型下载3、模型优化4、模型推理1、安装openvino和open_model_zoo 可以参考我这篇《【模型推理】ubuntu配置和使用openvino》进行open... 查看详情

基于u-net网络的图像分割的mindstudio实践(代码片段)

摘要:本实践是基于Windows版MindStudio5.0.RC3,远程连接ECS服务器使用,ECS是基于官方分享的CANN6.0.RC1_MindX_Vision3.0.RC3镜像创建的。本文分享自华为云社区《【MindStudio训练营第一季】基于U-Net网络的图像分割的MindStudio实践... 查看详情

实践解析丨如何通过webassembly在web进行实时视频人像分割

...Agora在Web实时视频人像分割技术的应用落地,分享了实践经验。以下为演讲分享整理。RTC行业在近几年的发展日新月异,在线教育、视频会议等场景繁荣蓬勃。场景的发展也给技术提出了更高的要求。于是 查看详情

PyTorch:如何批量进行推理(并行推理)

】PyTorch:如何批量进行推理(并行推理)【英文标题】:PyTorch:Howtodoinferenceinbatches(inferenceinparallel)【发布时间】:2020-08-2618:31:02【问题描述】:如何在PyTorch中进行批量推理?如何并行进行推理以加快这部分代码的速度。我已经... 查看详情

如何使用 Tensorflow 进行批量标准化推理?

】如何使用Tensorflow进行批量标准化推理?【英文标题】:HowdoesonedoInferencewithBatchNormalizationwithTensorFlow?【发布时间】:2016-11-1317:43:35【问题描述】:我正在阅读BN上的theoriginalpaper和HowcouldIuseBatchNormalizationinTensorFlow?上的堆栈溢出问... 查看详情

干货丨数据库分库分表基础和实践

数据库架构的演变在业务数据量比较少的时代,我们使用单机数据库就能满足业务使用,随着业务请求量越来越多,数据库中的数据量快速增加,这时单机数据库已经不能满足业务的性能要求,数据库主从复制架构随之应运而生... 查看详情

mindstudio训练营第一季基于mxvision的可视化ai应用开发初体验(代码片段)

一、前言mxVision是MindXSDK软件开发套件的一个核心组件,其致力于简化昇腾AI处理器推理业务开发过程,降低使用昇腾AI处理器开发的门槛。主要功能如下:插件化开发模式,将整个推理流程“插件化”,每个插... 查看详情

实践分享丨企业上云后资源容量如何规划和实施

简介: 企业上云后,云上的预算直接影响上云的优先级、进度、深度。预算投入的多少,与业务发展和资源需求的容量评估紧密相关。精准的容量评估,可以使企业上云的预算规划更科学,同时也更贴合业务... 查看详情

最佳实践丨企业上云后资源容量如何规划和实施

简介:企业上云后,云上的预算直接影响上云的优先级、进度、深度。预算投入的多少,与业务发展和资源需求的容量评估紧密相关。精准的容量评估,可以使企业上云的预算规划更科学,同时也更贴合业务... 查看详情

如何使用经过训练的 CNN 模型(torch7 格式)进行单张图像推理?

】如何使用经过训练的CNN模型(torch7格式)进行单张图像推理?【英文标题】:HowtodoasingleimageinferenceusingatrainedCNNmodel(torch7format)?【发布时间】:2018-09-2811:17:01【问题描述】:我已经获得了一个经过训练的torch7格式的CNN模型。如... 查看详情

数据库实践丨使用mtk迁移mysql源库后主键自增列导致数据无法插入问题

摘要:用户使用Mogdb2.0.1版本进行业务上线测试,发现在插入数据时,应用日志中提示primarykey冲突,用户自查业务SQL没有问题,接到通知后,招手处理故障。本文分享自华为云社区《​​使用MTK迁移Mysql源库后主键自增列导致数... 查看详情

ddm实践系列丨分布式数据库中间件使用经验分享

最近公司新项目使用了华为云的DDM分布式数据库中间件服务,通过一段的时间的使用感觉还不错。近段时间发现有许多小伙伴也准备去使用这个服务,所以为大家分享一下使用创建DDM服务的经验,帮助小伙伴们少走弯路。首先在... 查看详情

如何保存大型 sklearn RandomForestRegressor 模型进行推理

】如何保存大型sklearnRandomForestRegressor模型进行推理【英文标题】:HowtosavelargesklearnRandomForestRegressormodelforinference【发布时间】:2021-04-2607:14:36【问题描述】:我在19GB的训练数据上训练了一个SklearnRandomForestRegressor模型。我想将它... 查看详情