本次进行的X3D模型onnx推理实验在远端服务器和MindStudio上协同进行,相当于把远程服务器的环境移植到MindStudio上进行onnx推理实验。
MindStudio是基于华为晟腾AI处理器研究开发的全栈开发平台,相当于一款功能极其丰富的IDE,关键功能包括工程开发、应用开发、模型开发以及算子开发。不仅如此,此开发平台还包括了一些辅助功能,例如脚本转换、精度比对、Profiling性能分析,AI核心错误分析工具等。对于MindStudio,不仅用户可以再本地享受MindStudio所提供的强大的功能支持,还支持连接服务器环境的使用,这使得个人设备算力不够等情况的用户也可以方便使用,该IDE对用户的交互体验很好,非常适合用户完成各种晟腾模型任务。
X3D是一个高效的视频网络系列,可在空间、时间、宽度和深度方面沿多个网络轴逐步扩展微型 2D 图像分类架构。受机器学习中特征选择方法的启发,采用简单的逐步网络扩展方法,在每个步骤中扩展单个轴,从而实现对复杂性的良好准确性权衡。为了将 X3D 扩展到特定的目标复杂性,在X3D模型中执行递进式前向扩展,然后执行向后收缩。X3D 实现了最先进的性能,同时需要 4.8 倍和 5.5 倍的乘法添加和参数,以实现与以前工作相似的精度。最令人惊讶的发现是,这个具有高时空分辨率的网络在处理一些视频数据湖时可以表现得非常良好,同时在网络宽度和参数方面非常轻。X3D模型在视频分类和检测基准测试方面以前所未有的效率得出了具有竞争力的精度和性能。
进入ATC X3D(FP16)-昇腾社区 (hiascend.com),点击立即下载,并将获取的源码上传到服务器。目录结构如下图所示:
安装完上述基础依赖后,根据ATC X3D(FP16)-昇腾社区 (hiascend.com)中快速上手->获取源码->3.获取开源代码仓 进行detectron2_repo源码包和SlowFast源码包的下载与安装。
根据源码目录readme文档进行Kinetics-400数据集的获取以及简单处理,数据集目录结构如下:
├── Kinetics-400
├──val
├──abseiling
├──air_drumming
├──answering_questions
├──applauding
├──applying_cream
…
├──yoga
├──zumba
├──test.csv
该过程需要使用msame工具,可以在MindStudio的Remote Terminal中执行git clone https:/gitee.com/ascend/tools.git得到tools文件夹,MindStudio的Remote Terminal连接在本文第四部分进行介绍,用户也可以直接在服务器中执行此命令。
在服务器中执行以下命令来设置环境变量
export DDK_PATH=/usr/local/Ascend/ascend-toolkit/latest
export NPU_HOST_LIB=$DDK_PATH/acllib/lib64/stub
进入tools/msame文件夹,设置文件权限,运行编译脚本
按照MindStudio用户手册中的安装指南—>安装操作来安装MindStudio,而推理环境在服务器上已经配置完成,使用MindStudio直接进行ssh连接即可。
选择Ascend App项目,在CANN Version一栏点击change进入下图界面
点击加号进入添加服务器页面,根据所使用服务器填入用户名,IP,密码等信息
服务器连接成功后,选择CANN目录
等待本地同步远端服务器CANN文件。同步完成后,出现下图界面
点击next,选择ACL Project(python)项目,点击finish,完成工程创建
配置项目结构,点击File->Project Structure…进入下图页面
选择Add Python SDK后,选择ssh interpreter,再Deploy一栏选择远程服务器
接下来在Interpreter一栏选择自己的python解释器
参照ATC X3D(FP16)-昇腾社区 (hiascend.com)的数据预处理部分,将数据集以及其标签文件处理好
使用MindStudio终端在当前目录下创建一个data_bin_bs1的文件夹
运行X3d_preprocess.py,在Command Arguments一栏填写运行此脚本所需的参数设置
在data_bin_bs1目录下生成bin数据文件
参数解释:
–cfg:模型配置文件
DATA.PATH_TO_DATA_DIR:标签文件路径
DATA.PATH_PREFIX:数据集路径
TEST.BATCH_SIZE:批次参数
X3D_PREPROCESS.DATA_OUTPUT_PATH:输出文件路径
在当前目录下生成X3D模型的onnx文件x3d_s.onnx
首先填写模型信息,找到远端服务器中onnx模型的路径,然后选择模型输入格式,自己填写输入图片的尺寸,点击next。如下图所示:
模型信息填写成功后,等待有关模型数据的预处理,完成后点击next
参数解释:
–model:为ONNX模型文件。
–framework:5代表ONNX模型。
–output:输出的OM模型。
–input_format:输入数据的格式。
–input_shape:输入数据的shape。
–check_report:分析报告。
–soc_version:处理器型号。
最终模型转换成功,如下图所示:
导出om模型后,使用MindStudio的Remote Terminal进行benchmark推理,依次执行以下步骤
开启远程服务器终端
报错的原因是因为没有导入benchmark工具推理所需的依赖,执行一下source /usr/local/Ascend/ascend-toolkit/set_env.sh命令即可解决。
最后得到的性能如下图所示
在Remote Terminal中设置main文件权限并执行推理命令,生成om_res_bs1文件夹
参数解释:
–model :输入的om文件。
–input:输入的bin数据文件。
–device:NPU设备编号。
–outfmt:输出数据的格式。
然后执行X3d_postprocess.py脚本文件
参数解释:
–cfg:模型配置文件。
TEST.BATCH_SIZE:输入参数。
X3D_POSTPROCESS.OM_OUTPUT_PATH :后处理结果放置位置。
精度结果:
Q:执行所有python脚本文件时,Command Arguments如何填写?
A:与在远程服务器上运行命令时的参数一样即可,可将其直接复制到Command Arguments一栏。
Q:在310P服务器上如何进行X3D模型的onnx推理验证?
A:310P上执行推理与310基本一样,只需把soc_version=310的地方更换为soc_version=310P即可。
Q:模型转换时,自己添加完模型后,MindStudio对其自动解析得出的shape和format不能成功实现om模型的导出
A:点击删除按钮,自己手动配置模型输入信息即可。其中最重要的一步就是shape一栏的填写,具体可参考MindStudio用户手册中的模型转换一节来配置输入信息。
Q:MindStudio已经成功连接服务器,但配置远程python解释器时,无法检测到自己conda环境里的所有依赖。
A:建议先进行ssh配置和Deployment同步,再进行远程python解释器的连接
最后,开发者在使用 MindStudio 或进行算子开发过程中遇到任何问题,都可以从昇腾社区获得更多的帮助。
昇腾官网:https://www.hiascend.com/
昇腾社区:https://bbs.huaweicloud.com/
昇腾论坛:https://bbs.huaweicloud.com/forum/forum-726-1.html