快捷搜索:  汽车  科技

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)默认的python版本为3.7.5。其中label标签的形式为:图片名称及对应的类别标签。如下图展示:现在对主要用到的一些相关文件进行说明:本模型使用ImageNet2012数据集中的五万张图片作为测试集。上传数据集到服务器任意目录,其中数据及标签分别存放的路径为/home/HUAWEIUSER/dataset/val与/home/HUAWEIUSER/dataset/val_label.txt.其中val文件的内容格式为以下形式:

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

MindStudio的是一套基于华为自研昇腾AI处理器开发的AI全栈开发工具平台,其功能涵盖面广,可以进行网络模型训练、移植、应用开发、推理运行及自定义算子开发等多种任务。除此以外,我个人觉得MindStudio给用户提供了一个简单方便快捷的使用工具,能够让我们能够很顺畅的进行代码的开发、运行和调试。如其可以和远端服务器进行连接,在MindStudio上对代码进行修改可以很方便的同步到远程服务器上,不需要再借助xftp软件进行文件的传输;关于远端服务器上的代码运行也不需要再借助xshell等软件,可以很方便的通过MindStudio自带的工具进行。MindStudio将文件传输和运行代码集中在一起,在一定程度上提高了我们开发代码的效率。

  1. 概述

PNAS是一种学习卷积神经网络(CNN)结构的方法,该方法比现有的基于强化学习和进化算法的技术更有效。使用了基于序列模型的优化(SMBO)策略,在这种策略中,按照增加的复杂性对结构进行搜索,同时学习代理模型(surrogate model)来引导在结构空间中的搜索。这种方法类似于 A* 算法(也被称为分支限界法),其中从简单到复杂搜索模型空间,并在前进过程中剪枝处理掉没有前途的模型。这些模型(单元)按照它们所包含的模块的数量进行排序。从考量带有一个模块的单元开始。评估这些单元(通过训练它们并在一个验证集上计算它们的损失),然后使用观察得到的奖励来训练一个基于 RNN 的启发式函数(也被称为代理函数),其可以预测任何模型的奖励。接着可以使用这个学习到的启发式函数来决定应该评估哪些带有 2 个模块的单元。在对它们进行了评估之后,再对这个启发式函数进行更新,重复这一过程,直到我们找到带有所想要的模块数量的优良单元。

  1. 服务器端推理环境准备
  1. 获取Pytorch框架下的PNAS推理项目源代码

该推理项目源代码通过华为方提供的网页链接进行下载,下载到本地电脑之后会得到一个ATC PNASNet5Large(FP16) from Pytorch - Ascend310.zip的压缩包,然后将压缩包通过xftp软件传输到服务器上面并进行解压操作。

  1. 解压完之后,会形成当前的目录结构

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(1)

现在对主要用到的一些相关文件进行说明:

  • benchmark.x86-64:推理工具
  • env.sh:配置环境变量
  • requirements.txt:配置python环境所需要的依赖包相关说明
  • get_info.py:生成推理输入的数据集二进制info文件
  • vision_metric_ImageNet.py:用于推理结果的验证,比对benchmark输出的分类和标签,给出Accuracy。
  • imagenet_torch_preprocess.py:数据集预处理脚本:将JPEG格式的图像转换成bin格式的文件。
  • Pnasnet5large_onnx.py:用于转换pth模型文件到onnx模型文件
  1. 获取数据集及标签

本模型使用ImageNet2012数据集中的五万张图片作为测试集。上传数据集到服务器任意目录,其中数据及标签分别存放的路径为/home/HUAWEIUSER/dataset/val与/home/HUAWEIUSER/dataset/val_label.txt.

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(2)

其中val文件的内容格式为以下形式:

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(3)

其中label标签的形式为:图片名称及对应的类别标签。如下图展示:

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(4)

  1. 配置conda环境、安装依赖包

默认的python版本为3.7.5

下表列出来所需的依赖包:

依赖名称

版本

ONNX

1.9.0

Torch

1.8.1

TorchVision

0.9.1

numpy

1.20.1

Pillow

8.2.0

opencv-python

4.5.2.52

安装以上依赖包可通过requirements.txt文件进行安装 安装命令格式为:pip install -r requirements.txt

  1. 获取PNAS模型

由于源代码问题,加载下载好的权重文件会报错,所以我们这边选择根据脚本自动下载权重文件。

  1. PNAS模型代码在timm里,所以首先通过以下命令安装timm:

git clone https://github.com/rwightman/pytorch-image-models

cd pytorch-image-models

python3.7 setup.py install

cd ..

② 安装timm以后,修改timm开源代码仓代码,修改Python安装路径下的“lib/python3.7/site-packages/timm/models/pnasnet.py”文件:将其第349行改为 model_kwargs = dict(pad_type='' **kwargs)。修改成功为以下界面:

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(5)

③导出onnx模型并自动获取权重

导出onnx时,会自动加载权重文件pnasnet5large-bf079911.pth。执行以下命令:

python3.7 pnasnet5large_onnx.py pnasnet5large.onnx

此时运行pnasnet5large_onnx.py脚本生成会自动生成pnasnet5large.onnx模型文件。

  1. 客户端Mindstudio
  1. 安装和配置环境

按照Mindstudio用户手册中的安装指南—>安装操作来安装Mindstudio。

推理环境在远端服务器上已经配置完成。

  1. 创建工程

(1)按照下图标的顺序创建工程。

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(6)

(2)选择Ascend App 项目

  • 填写项目名称,
  • 点击Change 选择远程服务器的CANN版本。

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(7)

  • 点击Change后跳转到以下界面,然后点击“ ”,添加远程服务器。

在Remote Connection 中填写账号名称和相应的IP地址。

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(8)

  • 添加远程服务器

填写相关远程服务器信息后并测试,测试连接成功

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(9)

  • 服务器连接成功后,选择CANN目录。

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(10)

  • 点击Finish。

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(11)

  • 等待本地同步远端服务器CANN文件。
  • 同步成功后,选择ACL Project(python)项目,点击完成,完成新建项目。

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(12)

(3)配置项目结构

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(13)

  1. 选择add python SDK

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(14)

② 选择ssh interpreter

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(15)

③ 添加远程服务器,点击Deploy后面的“...”进行添加

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(16)

④ 远程服务器连接成功后,选择对应的python解释器

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(17)

⑤ Python SDK添加成功后显示以下界面形式,test为给python解释器起的别名。

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(18)

(4)配置本地文件夹与远程服务器映射

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(19)

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(20)

填写右侧的Mappings相关信息,点击 Apply,最后点击ok,即本地与远程服务器映射成功。最终映射结果如下图所示:

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(21)

(5)获取远端服务器的相关代码

注意:由于所用的数据集太大,为了减少传输时间,我们在这里只传输相关重要文件,关于数据集在这里我们不再通过MindStudio从远程服务器获取,我们直接自己从ImageNet官网进行下载即可。

  • 1. 获取重要文件代码

  • 2. 拉取代码成功后,显示如下界面内容:

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(22)

  • 3. 数据集获取
  1. 远程服务器获取

在远程服务器的/opt/npu/imageNet的路径下存储有相关数据集和标签文件,所以在这里通过以下命令传输到远程服务器的文件中:

  1. 数据集:

cp -r /opt/npu/imageNet/val /home/NEU_ZC/pnasnet5large/

  1. 标签:

cp -r /opt/npu/imageNet/val_label.txt /home/NEU_ZC/pnasnet5large/

此时远程服务器的文件目录为:

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(23)

  1. 本地文件

我们需要自己去官网下载数据集到本地文件中。

本地目录为以下形式:

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(24)

3. 运行项目

1. 数据预处理

①数据预处理将原始数据集转换为模型输入的数据,使用imagenet_torch_preprocess.py,将JPEG图像格式的数据转换为bin文件。

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(25)

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

但是,运行此脚本文件的时候会报错,报错的原因是因为未找到在远程服务器我所设置的conda虚拟环境,具体的报错信息如下图所示:

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(26)

对应的远程服务器运行此脚本所显示的内容如下图所示:

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(27)

在MindStudio中,我所设置的python解释器如下图所示:

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(28)

从以上三张图中可以看出问题就在于未正确找到conda环境。

所以在这里用远程终端进行数据预处理:

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(29)

在远程终端输入以下命令运行脚本文件:

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(30)

运行结束后,在远程终端文件夹下会生成pre_dataset文件夹如下图所示,用来存放生成的bin文件。

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(31)

② 生成JPEG图片输入info文件,使用benchmark推理需要输入图片数据集的info文件,用于获取数据集。使用gen_info.py脚本,输入已经获得的图片文件,输出生成图片数据集的info文件。

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(32)

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

由于生成的bin文件过大,从远程服务器获取的话需要较少时间,所以我们继续利用远程服务器进行此次数据的处理步骤:

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(33)

脚本运行结束后,会在远程服务器生成imagenet_prep_bin.info文件

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(34)

将生成的imagenet_prep_bin.info文件通过Xftp获取到本地文件夹中,以便后续处理。

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(35)

  • 运行pnasnet5large_onnx.py文件导出为onnx文件

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(36)

转换成功后,会在左侧生成pnasnet5large.onnx文件

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(37)

  • 简化模型:需要通过连接的服务器进行简化,简化成功后显示Finish!
  1. 开启ssh session

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(38)

  1. 打开远程终端服务器的文件地址和激活环境,进行模型的简化

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(39)

  1. 从远程终端获取简化后的模型

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(40)

  • onnx 转om:使用ATC工具进行模型的转换,其中分为两步:
  1. 首先配置环境变量:需要通过服务器上进行

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(41)

  1. 利用ATC开始进行转换,点击Ascend-->Model Conveter开始转换

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(42)

  • 点击Mobile File后面的文件夹图标,选择要转换的模型

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(43)

  • 选择要转换的模型成功后,点击ok,会显示模型正在自动解析

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(44)

  • 模型解析成功后出现如下界面,接着点击Next

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(45)

  • 点击next后,会出现以下界面,最后点击Finish,即模型转换成功。

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(46)

  • 模型转换成功后在output中会显如下内容

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(47)

  • 转换om模型成功后,使用mindstudio remote终端执行benchmark推理

启动ssh session,切换conda环境、工作目录

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(48)

  • 使用Benchmark工具进行推理,配置benchmark工具需要的环境

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(49)

  • 执行benchmark命令

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(50)

推理结果完成以后显示以下内容:

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(51)

推理完成后,结果会自动保存在远程服务器的文件目录下的result/dumpOutput_device0/文件夹下面。所以在我们进行精度验证前需要先把推理结果同步到本地上。下图就展示了同步完成的结果:

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(52)

  • 最后调用vision_metric_ImageNet.py脚本推理结果与label比对,可以获得Accuracy Top5数据,结果保存在result_bs1.json中。

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(53)

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

  • 精度验证结果显示

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(54)

  • 310执行完毕,经该模型迁移至710,将上述流程在Ascend710上可按照以上步骤再执行一遍。

四 Q&A

问题1. 在进行数据预处理的时候找不到远程服务器配置的conda环境,导致运行报错

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(55)

解决方案:

利用Remote Terminal 运行数据预处理

xmind折叠收起功能(使用MindStudio进行PNAS模型ONNX推理)(56)

猜您喜欢: