本文主要介绍通过MindStudio全流程开发工具链,将PaddlePaddle模型转成om模型,并在昇腾环境上进行推理的流程,目录如下:
目录
一、Rosetta_MobileNetV3模型介绍和推理任务
1.1、Rosetta_MobileNetV3模型介绍
1.2、Rosetta_MobileNetV3模型推理任务
二、MindStudio的相关介绍与安装流程
2.1、MindStudio的相关介绍
2.2、MindStudio的安装流程
2.3、MindStudio的环境搭建
三、Rosetta_MobileNetV3模型
3.1、获取Rostta_MobileV3模型的源码
3.2、安装Rostta_MobileV3模型的依赖
四、数据预处理
4.1、获取原始数据集
4.2、添加数据预处理文件
4.3、设置可执行命令
五、模型转换
5.1、PyTroch模型转ONNX模型
5.2、ONNX模型转OM模型
六、模型推理
6.1、准备推理工具
6.2、离线推理
七、精度验证
八、性能验证
九、遇见的相关问题
SDK获取没有权限
十、总结
这个模型是基于PaddlePaddle 的模型库 PaddleOCR 中Rostta_MobileV3模型。Rosetta是用于图像中文本检测和识别的大规模系统,文本识别是使用称为 CTC 的全卷积模型完成的(因为它在训练期间使用序列到序列的 CTC 损失),该模型输出字符序列。最后一个卷积层在输入词的每个图像位置预测最可能的字符。
第一个任务是对相关模型数据进行预处理。
第二个任务是将PyTorch模型转换成om模型,首先我们需要将paddle训练模型转paddle推理模型,再将paddle推理模型转换成onnx模型,最后将onnx模型转换成om模型。
第三个任务是对相关模型进行推理, 然后验证模型精度和性能。、
以上三个任务完成后,相关模型在昇腾环境中的离线推理基本完成。
MindStudio提供您在AI开发所需的一站式开发环境,支持模型开发、算子开发以及应用开发三个主流程中的开发任务。依靠模型可视化、算力测试、IDE本地仿真调试等功能,MindStudio能够帮助您在一个工具上就能高效便捷地完成AI应用开发。MindStudio采用了插件化扩展机制,开发者可以通过开发插件来扩展已有功能。
1、针对安装与部署,MindStudio提供多种部署方式,支持多种主流操作系统,为开发者提供最大便利。
2、针对算子开发,MindStudio提供包含UT测试、ST测试、TIK算子调试等的全套算子开发流程。支持TensorFlow、PyTorch、MindSpore等多种主流框架的TBE和AI CPU自定义算子开发。
3、针对网络模型的开发,MindStudio支持TensorFlow、Pytorch、MindSpore框架的模型训练,支持多种主流框架的模型转换。集成了训练可视化、脚本转换、模型转换、精度比对等工具,提升了网络模型移植、分析和优化的效率。
4、针对应用开发,MindStudio集成了Profiling性能调优、编译器、MindX SDK的应用开发、可视化pipeline业务流编排等工具,为开发者提供了图形化的集成开发环境,通过MindStudio能够进行工程管理、编译、调试、性能分析等全流程开发,能够很大程度提高开发效率。
(2)、功能框架
MindStudio功能框架如图1所示,目前含有的工具链包括:模型转换工具、模型训练工具、自定义算子开发工具、应用开发工具、工程管理工具、编译工具、流程编排工具、精度比对工具、日志管理工具、性能分析工具、设备管理工具等多种工具。
图1 MindStudio功能框架
(3)、工具功能
MindStudio工具中的主要几个功能特性如下:
1、工程管理:为开发人员提供创建工程、打开工程、关闭工程、删除工程、新增工程文件目录和属性设置等功能。
2、SSH管理:为开发人员提供新增SSH连接、删除SSH连接、修改SSH连接、加密SSH密码和修改SSH密码保存方式等功能。
3、应用开发:针对业务流程开发人员,MindStudio工具提供基于AscendCL(Ascend Computing Language)和集成MindX SDK的应用开发编程方式,编程后的编译、运行、结果显示等一站式服务让流程开发更加智能化,可以让开发者快速上手。
4、自定义算子开发:提供了基于TBE和AI CPU的算子编程开发的集成开发环境,让不同平台下的算子移植更加便捷,适配昇腾AI处理器的速度更快。
5、离线模型转换:训练好的第三方网络模型可以直接通过离线模型工具导入并转换成离线模型,并可一键式自动生成模型接口,方便开发者基于模型接口进行编程,同时也提供了离线模型的可视化功能。
6、日志管理:MindStudio为昇腾AI处理器提供了覆盖全系统的日志收集与日志分析解决方案,提升运行时算法问题的定位效率。提供了统一形式的跨平台日志可视化分析能力及运行时诊断能力,提升日志分析系统的易用性。
7、性能分析:MindStudio以图形界面呈现方式,实现针对主机和设备上多节点、多模块异构体系的高效、易用、可灵活扩展的系统化性能分析,以及针对昇腾AI处理器的性能和功耗的同步分析,满足算法优化对系统性能分析的需求。
8、设备管理:MindStudio提供设备管理工具,实现对连接到主机上的设备的管理功能。
9、精度比对:可以用来比对自有模型算子的运算结果与Caffe、TensorFlow、ONNX标准算子的运算结果,以便用来确认神经网络运算误差发生的原因。
10、开发工具包的安装与管理:为开发者提供基于昇腾AI处理器的相关算法开发套件包Ascend-cann-toolkit,旨在帮助开发者进行快速、高效的人工智能算法开发。开发者可以将开发套件包安装到MindStudio上,使用MindStudio进行快速开发。Ascend-cann-toolkit包含了基于昇腾AI处理器开发依赖的头文件和库文件、编译工具链、调优工具等。
(1)、场景介绍
1、纯开发场景(分部署形态):在非昇腾AI设备上安装MindStudio和Ascend-cann-toolkit开发套件包。可作为开发环境仅能用于代码开发、编译等不依赖于昇腾设备的开发活动(例如ATC模型转换、算子和推理应用程序的纯代码开发)。如果想运行应用程序或进行模型训练等,需要通过MindStudio远程连接功能连接已部署好运行环境所需软件包的昇腾AI设备。
2、开发运行场景(共部署形态):在昇腾AI设备上安装MindStudio、Ascend-cann-toolkit开发套件包、npu-firmware安装包、npu-driver安装包和AI框架(进行模型训练时需要安装)。作为开发环境,开发人员可以进行普通的工程管理、代码编写、编译、模型转换等功能。同时可以作为运行环境,运行应用程序或进行模型训练。
(2)、软件包介绍
1、MindStudio:提供图形化开发界面,支持应用开发、调试和模型转换功能,同时还支持网络移植、优化和分析等功能。
2、Ascend-cann-toolkit:开发套件包。为开发者提供基于昇腾AI处理器的相关算法开发工具包,旨在帮助开发者进行快速、高效的模型、算子和应用的开发。开发套件包只能安装在Linux服务器上,开发者可以在安装开发套件包后,使用MindStudio开发工具进行快速开发。
(3)、安装操作
1、安装流程
MindStudio安装流程如图2所示。
图2 MindStudio安装流程
2、环境要求
本地环境要求:Windows 10 x86_64操作系统
3、准备软件包
获取链接:MindStudio下载-昇腾社区 (hiascend.com)
4、安装Python依赖
如果用户需要使用创建算子和转换样例工程的输入图片功能,则需要安装此依赖。
1、去Python官网下载Python安装包到Windows本地系统。MindStudio目前支持Python版本为3.7~3.9,下面以安装Python3.7.5依赖包为例。
2、将Python3.7.5安装到本地。
3、在Windows 10操作系统中,显示设置>搜索“高级系统设置”如图3所示。
图3 选择高级系统设置
4、单击“查看高级系统设置”,弹出“系统属性”对话框,选择“环境变量”,如图4所示。
图4 选择环境变量
5、在“环境变量 > 用户变量(U)”弹框中选中Path变量后单击“编辑”,如图5所示。
图5 编辑Path环境变量
6、在“编辑环境变量”弹框中单击“新建”,输入Python3.7.5安装包目录和脚本目录的路径,例如:D:\python和D:\python\Scripts,单击“确定”,如图6所示。
图6 新建环境变量
7、打开系统命令行,输入python -V命令确认python版本是否为3.7.5。
8、安装Python3相关依赖。
pip3 install xlrd==1.2.0
pip3 install absl-py
pip3 install numpy
pip3 install requests
如若返回如下信息(示例),则表示安装成功。
Successfully installed xlrd-1.2.0
Successfully installed absl-py-0.12.0 six-1.15.0
Successfully installed numpy-1.20.1
Successfully installed request-2.28.0
5、安装MindStudio
具体安装细节可以通过以下安装链接了解:安装MindStudio-安装操作(Windows)-安装指南-5.0.RC2-MindStudio-文档首页-昇腾社区 (hiascend.com)
(1)、创建一个新的工程
点击“New Project”,建立一个新的项目,如图15所示。
图15 建立一个新项目
随后跳转到建立新项目界面,我们选择“Ascend App”进行创建,接下来输入对应工程名称和工程存储位置,步骤如图16所示。
图16 工程名称和存储位置
(2)、配置CANN
点击“CANN Version”旁边的“Change”按钮,配置相应的CANN包,如图17所示。
图17 配置CANN包
首先,我们需要设置连接远程服务器,找到“Remote Connection”,点击
最右边的加号,如图18所示
图18 连接远程服务器
点击加号,左边出现红框所现区域,开始填写相关内容,填写完相关内容后,点击“Test Connection”,测试是否连接成功,连接成功后,如图20所示,然后点击“OK”,详细步骤图解如图19所示。
图19 填写服务器相关信息
图20 服务器连接成功
然后,我们打开远程服务器目录树。点击文件标识,进入红框显示的区域中,选择对应版本CANN包所在的地址,然后点击OK,详细步骤如图21所示
图21 连接CANN包
找到CANN包后,点击“Finish”,开始配置,如图22所示,成功后如图23所示。
图22 开始配置
图23 CANN包配置成功
然后点击图23中的“Next”,进入选择Templates界面,选择“MindX SDK Project(Python)”,点击Finish,如图24所示。
图24 建立工程
最后,成功创建一个空白工程如图25所示。
图25 工程建立完成
(3)、配置SDK
点击“File”>“Settings”,如图26所示。
图26 点击“Settings”
点击“Appearance & Behavior”>“System Settings”>“MindX SDK”,点击“Install SDK”,如图27所示。
图27 安装SDK
设置CANN包和SDK远程路径。注意,这里需要将CANN包和SDK设置在同一个路径下方,详细问题见后续问题描述。最后,点击“OK”即可,如图28所示。
图28 设置SDK
设置成功后,就如图29中红框所示,然后点击“OK”。
图29 设置完成
点击“Tools”,选中“Star SSH session…”,如图30所示。
图30 选中“Star SSH session…”
点击后显示远程终端,如图31所示,
图31 远程终端
点击需要的远程终端,就进入了相应的远程终端窗口,如图32中红框所示。
图32 远程终端窗口
接下来,点击“Tools”->“Deployment”->“Configuration…”,如图33所示。
图33 选择“Configuration…”
进入页面后,选择“Deployment”,然后选择相应的远程终端,接着点击“Mappings”,配置远端映射路径,然后依次点击“OK”,完成相应配置,详细步骤如图34所示。
图34 配置远程映射路径
在空白项目页面中,点击右上角的设置标识,选中“Project Structure…”,如图35所示。
图35 开始配置SDK
点击“SDKs”,点击左上角加号,然后选择“Add Python SDK…”,如图36所示。
图36 选择“Add Python SDK…”
点击“SSH Interpreter”,系统自动识别远程Python环境相关信息,然后点击“OK”,如图37所示。
图37 配置远程Python环境
点击“Project”,选中刚刚的配置SDK,然后点击“OK”,如图38所示。
图38配置SDK
点击“Modules”,选中“Dependencies”,选中刚刚创建的SDK,点击“OK”,如图39所示。
图39 配置Modules
依次点击“Tools”->“Deployment”->“Automatic Upload”,如图40所示。
图40“Automatic Upload”
选择远程服务器,可自动上传修改并保存的文件,如图41所示。
图41 选择远程服务器
以上所有步骤完成后,MindStudio的环境搭建完成。
首先,需要在终端执行以下命令,从而获取相关模型源码。
git clone -b release/2.6 https://github.com/PaddlePaddle/PaddleOCR.git
cd PaddleOCR
git reset --hard 76fefd56f86f2809a6e8f719220746442fbab9f3
其次,需要修改模型的配置文件,将中的“use_gpu:true”修改成“use_gpu:false”,如图42所示,并将其上传到终端处,如图43所示。
图42 修改模型配置文件
图43 上传到远程终端
在终端执行以下命令,安装所需的依赖。
pip install -r requirements.txt
python setup.py install
最后,在终端创建一个目录,用于存放整个推理过程中所需文件与生成文件。
mkdir rosetta
该模型在以 LMDB 格式(LMDBDataSet)存储的 IIIT, SVT, IC03, IC13, IC15, SVTP, CUTE 数据集上进行评估,共计 12067 个评估数据。相关数据可以通过此链接(https://github.com/clovaai/deep-text-recognition-benchmark#download-lmdb-dataset-for-traininig-and-evaluation-from-here)获取。
在工程中添加数据预处理脚本,该脚本主要对图片进行归一化操作并转成二
进制文件保存如下图44所示。
图44 添加数据预处理文件
选中Rosetta_MobileNetV3的按钮,选择“Edit Configurations…”,如图45红框所示。
图45 选择“Edit Configurations…”
进入相关页面后,点击左上角的加号,选择“Ascend App”,如图46所示。
图46 选择“Ascend App”
选中刚刚新建的“Ascend App”,将它命名为“preprocess”,点击“Executable”旁边的文件按钮,将刚刚设置的预处理文件设置进去,点击“OK”,如图47所示。
图47 设置proprecess
在“Command Arguments”中添加预处理命令参数,点击“OK”,如图48所示。
图48 添加命令参数
命令参数具体如下:
python rosetta_preprocess.py \
--config configs/rec/rec_mv3_none_none_ctc.yml \
--opt data_dir=rosetta/lmdb/
bin_dir=rosetta/bin_list
info_dir=rosetta/info_list
-c, --config: 模型配置文件路径。
--opt data_dir: lmdb数据集所在路径。
--opt bin_dir: 存放生成的bin文件的目录路径。
--opt info_dir: 存放groundtruth等信息的目录路径。
点击绿色执行按钮,就可以开始数据预处理了,如图49所示。
图49 开始数据预处理
预处理脚本运行结束后,rosetta/bin_list目录下会生成 12067个bin文件。 rosetta/info_list目录下也会对应生成 12067个pickle文件。
首先,需要通过下方链接获取Paddle训练模型
(https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_mv3_none_none_ctc_v2.0_train.tar),压缩包下载好后,将其解压到本地文件中,并上传到远程终端,具体如图50所示。
图50 将训练模型上传到远程终端
在MindStudio打开远程终端服务器,通过如下指令,将paddle训练模型转成paddle推理模型,具体细节如图51所示。
python3 tools/export_model.py \
-c configs/rec/rec_mv3_none_none_ctc.yml \
-o Global.pretrained_model=rosetta/rec_mv3_none_none_ctc_v2.0_train/best_accuracy \
Global.save_inference_dir=rosetta/rec_mv3_none_none_ctc_v2.0_infer/
图51 paddle训练模型转成paddle推理模型
接下来,我们需要将推理模型转化成onnx模型,在远程终端下执行如下命令,在远程终端中生成onnx文件,然后通过MindStudio将其上传到本地文件中,具体细节如图52所示。
paddle2onnx \
--model_dir rosetta/rec_mv3_none_none_ctc_v2.0_infer/ \
--model_filename inference.pdmodel \
--params_filename inference.pdiparams \
--save_file rosetta/rosetta_mobilenetv3.onnx \
--opset_version 11 \
--input_shape_dict="{'x':[-1,3,-1,-1]}" \
--enable_onnx_checker True
图52 将onnx模型传入本地
接下来,需要通过MindStudio的模型转换功能将ONNX模型转化成OM模型。
首先,我们需要点击界面中的“Model Converter”按钮,如图53所示。
图53 点击“Model Converter”按钮
在当前页面中,设置“Modle File”,选择刚刚转换好的ONNX模型文件,点击“”“OK”,系统将会自动解析,如图54所示。
图54 选择ONNX模型
解析完成后,根据情况设置转化成的om模型名称、模型输入位置、Soc版本等相关内容,然后点击“Next”,进行命令检查,如图55所示。
图55 设置相关信息
CANN Machine:CANN的远程服务器
Modle File:*.onnx文件的路径(可以在本地,也可以在服务器上)
Modle Name:生成的om文件名称
Target SoC Version:需要的系统芯片版本
Output Path:生成*.om文件的路径
Input Format:输入的格式
Load Configuration:加载配置
命令检查成功后,会出现如图56的界面,然后继续点击“Next”。
图56 命令检查成功
检查生成的 atc 命令,确认无误后点击“Finish”,如图57所示。
图57 开始转换模型
转换成功后,output界面可以看见转换完成的提示,如图58中红框所示。我们就可以在设置的路径下找到相关的om模型文件,我们可以点击打开查看模型,如图58所示。
图58 查看om模型
至此,模型转换全部完成。
本推理项目使用ais_infer作为推理工具,须自己拉取源码,打包并安装。
首先,我们需要在远程终端的命令行中输入以下指令,获取推理工具代码,在MindStudio中将相关文件传输到本地中,具体如图59所示。
git clone https://gitee.com/ascend/tools.git ascend_tools/
图59 准备工具
执行以下命令,安装 aclruntime 包。
cd ais_infer/backend/
pip3 wheel ./
pip3 install --force-reinstall aclruntime-xxx.whl
cd ../..
至此,通过以上步骤,成功获取ais_infer工具,并安装了aclruntime。
建立val_bs1_out文件,用于保存推理结果。选中“preprocess”的按钮,选择“Edit Configurations…”,如图60红框所示。
图60 选择“Edit Configurations…”
建立一个新的“Ascend App”,将名字改为“ais_infer”,添加ais_infer脚本,将相关指令填入,点击“OK”,具体如图61所示。
图61 建立ais_infer
Deployment:连接的远程服务器
Executable:*.py文件的路径
Command Arguments:对应的命令参数
推理命令参数具体如下:
python3 ais_infer/ais_infer.py
--model rosetta/rosetta_mobilenetv3_bs1.om
--input rosetta/bin_list/
--output rosetta/val_bs1_out/
--batchsize 1
--model: OM模型路径。
--input: 存放预处理bin文件的目录路径
--output: 存放推理结果的目录路径
--batchsize: 模型每次处理样本的数量
建立好后,点击绿色运行按钮,运行刚刚设置的ais_infer,相关结果在远程终端上实现,再通过MindStudio传输到本地上,具体过程如图62所示。
图62 生成推理结果
至此,我们获得了想要的推理结果。
首先,我们需要添加数据后处理命令,具体过程如图63所示。
图63 添加后处理命令
后处理命令参数具体内容如下:
python rosetta_postprocess.py \
-c configs/rec/rec_mv3_none_none_ctc.yml \
-o res_dir=rosetta/val_bs1_out/2022_09_26-15_13_53/ info_dir=rosetta/info_list/
-c, --config: 模型配置文件路径
-o res_dir: 存放推理结果的目录路径
-o info_dir: 存放groundtruth等信息的目录路径
点击绿色按钮,开始数据后处理,如图64所示。
图64 执行后处理命令
执行完成后,程序打印出结果acc: 0.773846025711572。在 310P 设备上,OM 模型各个 batchsize 的精度均为 77.38% ,明显优于PaddleOCR 官方提供的指标(75.80%)。
通过ais_infer 脚本,建立性能验证的命令,具体内容如图65所示。
纯推理命令参数具体如下:
python3 ais_infer/ais_infer.py
--model rosetta/rosetta_mobilenetv3_bs1.om
--loop 100
--batchsize 1
--model: OM模型路径。
--loop: 推理次数
--batchsize: 模型每次处理样本的数量。
图65 设置性能测试命令
点击绿色按钮,开始执行,如图66所示。
图66 执行命令
执行过后,程序会输出如下内容:
[INFO] -----------------Performance Summary------------------
[INFO] H2D_latency (ms): min = 0.10275840759277344, max = 0.10275840759277344, mean = 0.10275840759277344, median = 0.10275840759277344, percentile(99%) = 0.10275840759277344
[INFO] NPU_compute_time (ms): min = 0.40299999713897705, max = 3.2839999198913574, mean = 0.4343369999527931, median = 0.42399999499320984, percentile(99%) = 0.5660099846124649
[INFO] D2H_latency (ms): min = 0.07843971252441406, max = 0.07843971252441406, mean = 0.07843971252441406, median = 0.07843971252441406, percentile(99%) = 0.07843971252441406
[INFO] throughput 1000*batchsize(1)/NPU_compute_time.mean(0.4343369999527931): 2302.359688694924
[INFO] ------------------------------------------------------
性能达到2302fps。
在登陆310p服务器的时候,是通过infname用户进入,如果我们将SDK的包放在了其他用户下面,就会出现获取没有权限的情况,如图67所示。
图67 SDK获取没有权限
这个问题的解决办法就是,将SDK 的文件存入infname之中,最好是和CANN包放在一个目录下面,如图68所示。
图68 问题解决
本文主要是介绍如何通过MindStudio对Paddle Paddle模型进行转化,以及对模型精度和性能的验证。开发者再遇到相关问题时,可以进入昇腾社区获得更多的帮助。
昇腾官网:https://www.hiascend.com/
昇腾社区:华为云社区_大数据社区_AI社区_云计算社区_开发者中心-华为云
昇腾论坛:华为云论坛_云计算论坛_开发者论坛_技术论坛-华为云