已合并
[众智][PyTorch离线推理][cv][EfficientNet-B1]环境配置文件、README以及脚本修改 #3246
AtomGit-Bot创建于 2022年12月29日
[众智][PyTorch离线推理][cv][EfficientNet-B1]环境配置文件、README以及脚本修改 #3246
已合并
共 3 个文件变更+250-304
| @@ -17,6 +17,7 @@ import sys | |||
| 17 | sys.path.append("./pycls") | 17 | sys.path.append("./pycls") |
| 18 | import numpy as np | 18 | import numpy as np |
| 19 | import cv2 | 19 | import cv2 |
| 20 | +import tqdm | ||
| 20 | 21 | ||
| 21 | from pycls.datasets import transforms | 22 | from pycls.datasets import transforms |
| 22 | 23 | ||
| @@ -40,16 +41,13 @@ def trans(im): | |||
| 40 | return im | 41 | return im |
| 41 | 42 | ||
| 42 | def EffnetB1_preprocess(src_path, save_path): | 43 | def EffnetB1_preprocess(src_path, save_path): |
| 43 | - i = 0 | ||
| 44 | classes = os.listdir(src_path) | 44 | classes = os.listdir(src_path) |
| 45 | - for classname in classes: | 45 | + for classname in tqdm.tqdm(classes): |
| 46 | dirs = os.path.join(src_path, classname) | 46 | dirs = os.path.join(src_path, classname) |
| 47 | save_dir = os.path.join(save_path, classname) | 47 | save_dir = os.path.join(save_path, classname) |
| 48 | if not os.path.isdir(save_dir): | 48 | if not os.path.isdir(save_dir): |
| 49 | os.makedirs(os.path.realpath(save_dir)) | 49 | os.makedirs(os.path.realpath(save_dir)) |
| 50 | for img in os.listdir(dirs): | 50 | for img in os.listdir(dirs): |
| 51 | - i = i + 1 | ||
| 52 | - print(img, "===", i) | ||
| 53 | img_path = os.path.join(dirs, img) | 51 | img_path = os.path.join(dirs, img) |
| 54 | im = cv2.imread(img_path) | 52 | im = cv2.imread(img_path) |
| 55 | im = trans(im) | 53 | im = trans(im) |
| @@ -1,337 +1,271 @@ | |||
| 1 | # EfficientNet-B1模型PyTorch离线推理指导 | 1 | # EfficientNet-B1模型PyTorch离线推理指导 |
| 2 | 2 | ||
| 3 | -- [1 模型概述](#1-模型概述) | 3 | + |
| 4 | - - [1.1 论文地址](#11-论文地址) | 4 | +- [概述](#ZH-CN_TOPIC_0000001172161501) |
| 5 | - - [1.2 代码地址](#12-代码地址) | 5 | + |
| 6 | -- [2 环境说明](#2-环境说明) | 6 | + - [输入输出数据](#section540883920406) |
| 7 | - - [2.1 深度学习框架](#21-深度学习框架) | ||
| 8 | - - [2.2 python第三方库](#22-python第三方库) | ||
| 9 | -- [3 模型转换](#3-模型转换) | ||
| 10 | - - [3.1 pth转onnx模型](#31-pth转onnx模型) | ||
| 11 | - - [3.2 onnx转om模型](#32-onnx转om模型) | ||
| 12 | -- [4 数据集预处理](#4-数据集预处理) | ||
| 13 | - - [4.1 数据集获取](#41-数据集获取) | ||
| 14 | - - [4.2 数据集切分](#42-数据集切分) | ||
| 15 | - - [4.3 数据集预处理](#43-数据集预处理) | ||
| 16 | - - [4.4 生成数据集信息文件](#44-生成数据集信息文件) | ||
| 17 | -- [5 离线推理](#5-离线推理) | ||
| 18 | - - [5.1 ais_infer工具概述](#51-ais_infer工具概述) | ||
| 19 | - - [5.2 离线推理](#52-离线推理) | ||
| 20 | -- [6 精度对比](#6-精度对比) | ||
| 21 | - - [6.1 精度数据](#61-精度数据) | ||
| 22 | - - [6.2 精度对比](#62-精度对比) | ||
| 23 | -- [7 性能对比](#7-性能对比) | ||
| 24 | - - [7.1 310P性能数据](#71-310P性能数据) | ||
| 25 | - - [7.2 T4性能数据](#72-T4性能数据) | ||
| 26 | - - [7.3 性能对比](#73-性能对比) | ||
| 27 | 7 | ||
| 28 | 8 | ||
| 29 | 9 | ||
| 10 | +- [推理环境准备](#ZH-CN_TOPIC_0000001126281702) | ||
| 30 | 11 | ||
| 31 | -## 1 模型概述 | 12 | +- [快速上手](#ZH-CN_TOPIC_0000001126281700) |
| 32 | 13 | ||
| 33 | -### 1.1 论文地址 | 14 | + - [获取源码](#section4622531142816) |
| 15 | + - [准备数据集](#section183221994411) | ||
| 16 | + - [模型推理](#section741711594517) | ||
| 34 | 17 | ||
| 35 | -[EfficientNet-B1](https://arxiv.org/abs/1905.11946)*是针对网络参数扩张方式问题,经过EfficientNet-B0进行扩张提高网络性能的网络。* | 18 | +- [模型推理性能&精度](#ZH-CN_TOPIC_0000001172201573) |
| 36 | 19 | ||
| 37 | -### 1.2 代码地址 | ||
| 38 | 20 | ||
| 39 | -[EfficientNet-B1 Pytorch实现代码](https://github.com/facebookresearch/pycls) | 21 | +# 概述<a name="ZH-CN_TOPIC_0000001172161501"></a> |
| 40 | 22 | ||
| 41 | -```sh | 23 | +EfficientNet是图像分类网络,在ImageNet上性能优异,并且在常用迁移学习数据集上达到了相当不错的准确率,参数量也大大减少,说明其具备良好的迁移能力,且能够显著提升模型效果。 |
| 42 | -branch=master | 24 | + |
| 43 | -commit_id=8c79a8e2adfffa7cae3a88aace28ef45e52aa7e5 | 25 | + |
| 44 | -``` | 26 | +- 参考实现: |
| 27 | + | ||
| 28 | + ``` | ||
| 29 | + url=https://github.com/rwightman/pytorch-image-models | ||
| 30 | + ``` | ||
| 31 | + | ||
| 32 | +## 输入输出数据<a name="section540883920406"></a> | ||
| 33 | + | ||
| 34 | +- 输入数据 | ||
| 35 | + | ||
| 36 | + | 输入数据 | 数据类型 | 大小 | 数据排布格式 | | ||
| 37 | + | -------- | -------- | ------------------------- | ------------ | | ||
| 38 | + | input | FLOAT32 | batchsize x 3 x 240 x 240 | NCHW | | ||
| 39 | + | ||
| 40 | + | ||
| 41 | +- 输出数据 | ||
| 42 | + | ||
| 43 | + | 输出数据 | 数据类型 | 大小 | 数据排布格式 | | ||
| 44 | + | --------| -------- | -------- | ------------ | | ||
| 45 | + | output | FLOAT32 | batchsize x 1000 | ND | | ||
| 46 | + | ||
| 47 | + | ||
| 48 | +# 推理环境准备<a name="ZH-CN_TOPIC_0000001126281702"></a> | ||
| 49 | + | ||
| 50 | +- 该模型需要以下插件与驱动 | ||
| 51 | + | ||
| 52 | + **表 1** 版本配套表 | ||
| 53 | + | ||
| 54 | + | 配套 | 版本 | 环境准备指导 | | ||
| 55 | + | ------------------------------------------------------------ | ------- | ------------------------------------------------------------ | | ||
| 56 | + | 固件与驱动 | 22.0.2 | [Pytorch框架推理环境准备](https://www.hiascend.com/document/detail/zh/ModelZoo/pytorchframework/pies) | | ||
| 57 | + | CANN | 5.1.RC2 | [CANN推理架构准备](https://www/hiascend.com/software/cann/commercial) | | ||
| 58 | + | Python | 3.7.5 | 创建anaconda环境时指定python版本即可,conda create -n ${your_env_name} python==3.7.5 | | ||
| 59 | + | PyTorch | 1.11.0 | - | | ||
| 60 | + | 说明:Atlas 300I Duo 推理卡请以CANN版本选择实际固件与驱动版本。 | \ | \ | | ||
| 45 | 61 | ||
| 46 | 62 | ||
| 47 | 63 | ||
| 64 | +# 快速上手<a name="ZH-CN_TOPIC_0000001126281700"></a> | ||
| 65 | + | ||
| 66 | +## 获取源码<a name="section4622531142816"></a> | ||
| 67 | + | ||
| 68 | +1. 获取源码。 | ||
| 69 | + | ||
| 70 | + ```sh | ||
| 71 | + git clone https://github.com/facebookresearch/pycls | ||
| 72 | + cd pycls | ||
| 73 | + git reset f20820e01eef7b9a47b77f13464e3e77c44d5e1f --hard | ||
| 74 | + cd .. | ||
| 75 | + ``` | ||
| 76 | + | ||
| 77 | +2. 安装依赖,测试环境时可能已经安装其中的一些不同版本的库,故手动测试时不推荐使用该命令安装 | ||
| 78 | + | ||
| 79 | + ``` | ||
| 80 | + pip3.7 install -r requirements.txt | ||
| 81 | + ``` | ||
| 48 | 82 | ||
| 49 | 83 | ||
| 50 | -## 2 环境说明 | 84 | +## 准备数据集<a name="section183221994411"></a> |
| 51 | 85 | ||
| 52 | -### 2.1 深度学习框架 | 86 | +1. 获取原始数据集。(解压命令参考tar –xvf \*.tar与 unzip \*.zip) |
| 53 | 87 | ||
| 54 | -```sh | 88 | + 本模型支持ImageNet 50000张图片的验证集。以ILSVRC2012为例,请用户需自行获取ILSVRC2012数据集,上传数据集到服务器任意目录并解压(如:/home/HwHiAiUser/dataset)。本模型将使用到ILSVRC2012_img_val.tar验证集及ILSVRC2012_devkit_t12.gz中的meta.mat。 |
| 55 | -CANN == 5.1.RC1 | 89 | + |
| 56 | -pytorch == 1.8.0 | 90 | + 数据目录结构参考如下格式: |
| 57 | -torchvision == 0.9.0 | ||
| 58 | -onnx == 1.10.0 | ||
| 59 | -``` | ||
| 60 | 91 | ||
| 61 | -### 2.2 python第三方库 | 92 | + ```text |
| 62 | - | 93 | + ├──ILSVRC2012_img_val |
| 63 | -```sh | 94 | + ├──val |
| 64 | -onnx-simplifier == 0.4.5 | 95 | + ├──ILSVRC2012_devkit_t12 |
| 65 | -isort==4.3.21 | 96 | + ├── data |
| 66 | -iopath | ||
| 67 | -fairscale | ||
| 68 | -flake8 | ||
| 69 | -pyyaml | ||
| 70 | -matplotlib | ||
| 71 | -numpy | ||
| 72 | -opencv-python | ||
| 73 | -parameterized | ||
| 74 | -setuptools | ||
| 75 | -simplejson | ||
| 76 | -submitit | ||
| 77 | -yacs | ||
| 78 | -yattag | ||
| 79 | -scipy | ||
| 80 | -decorator | ||
| 81 | -sympy | ||
| 82 | -``` | ||
| 83 | - | ||
| 84 | -安装必要的依赖,测试环境可能已经安装其中的一些不同版本的库了,故手动测试时不推荐使用该命令安装。 | ||
| 85 | - | ||
| 86 | -```sh | ||
| 87 | -pip install -r requirements.txt | ||
| 88 | -``` | ||
| 89 | - | ||
| 90 | - | ||
| 91 | - | ||
| 92 | - | ||
| 93 | - | ||
| 94 | -## 3 模型转换 | ||
| 95 | - | ||
| 96 | -### 3.1 pth转onnx模型 | ||
| 97 | - | ||
| 98 | -1.获取pth权重文件 | ||
| 99 | - | ||
| 100 | -```sh | ||
| 101 | -wget https://ascend-pytorch-model-file.obs.cn-north-4.myhuaweicloud.com/%E4%BA%A4%E4%BB%98%E4%BB%B6/cv/image_classification/EfficientNet-B1/EN-B1_dds_8gpu.pyth | ||
| 102 | -``` | ||
| 103 | - | ||
| 104 | -2.获取EfficientNet-B1源码 | ||
| 105 | - | ||
| 106 | -```sh | ||
| 107 | -git clone https://github.com/facebookresearch/pycls | ||
| 108 | -cd pycls | ||
| 109 | -git reset f20820e01eef7b9a47b77f13464e3e77c44d5e1f --hard | ||
| 110 | -cd .. | ||
| 111 | -``` | ||
| 112 | - | ||
| 113 | -3.使用Efficient-B1_pth2onnx.py进行onnx的转换,在目录下生成Efficient-b1.onnx。 | ||
| 114 | - | ||
| 115 | -```sh | ||
| 116 | -python3.7 Efficient-B1_pth2onnx.py | ||
| 117 | -``` | ||
| 118 | - | ||
| 119 | -4.对onnx模型进行onnxsim优化。(以batch_size=16为例。) | ||
| 120 | -```sh | ||
| 121 | -python3.7 -m onnxsim --input-shape="image:16,3,240,240" ./Efficient-b1.onnx bs16_onnxsim.onnx | ||
| 122 | -``` | ||
| 123 | - | ||
| 124 | -### 3.2 onnx转om模型 | ||
| 125 | - | ||
| 126 | -1.设置环境变量,请以实际安装环境配置。 | ||
| 127 | - | ||
| 128 | -```sh | ||
| 129 | -source /usr/local/Ascend/ascend-toolkit/set_env.sh | ||
| 130 | -``` | ||
| 131 | - | ||
| 132 | -2.使用atc将onnx模型转换为om模型文件,工具使用方法可以参考[CANN V100R020C10 开发辅助工具指南 (推理) 01](https://support.huawei.com/enterprise/zh/doc/EDOC1100164868?idPath=23310P424|251366513|22892968|251168373),需要指定输出节点以去除无用输出,可以使用netron开源可视化工具查看具体的输出节点名: | ||
| 133 | - | ||
| 134 | -```sh | ||
| 135 | -atc --framework=5 --model=./bs16_onnxsim.onnx --input_format=NCHW --input_shape="image:16,3,240,240" --output=Efficient-b1_bs16 --log=debug --soc_version=Ascend${chip_name} --enable_small_channl=1 | ||
| 136 | -# 此处以bs=16为例。 | ||
| 137 | -# ${chip_name}可通过npu-smi info指令查看 | ||
| 138 | -``` | ||
| 139 | - | ||
| 140 | - | ||
| 141 | - | ||
| 142 | -参数说明: --model:为ONNX模型文件。 | ||
| 143 | - | ||
| 144 | ---framework:5代表ONNX模型。 | ||
| 145 | - | ||
| 146 | ---output:输出的OM模型。 | ||
| 147 | - | ||
| 148 | ---input_format:输入数据的格式。 | ||
| 149 | - | ||
| 150 | ---input_shape:输入数据的shape。 | ||
| 151 | - | ||
| 152 | ---log:日志级别。 | ||
| 153 | - | ||
| 154 | - --soc_version:处理器型号。 | ||
| 155 | - | ||
| 156 | - | ||
| 157 | - | ||
| 158 | - | ||
| 159 | - | ||
| 160 | -## 4 数据集预处理 | ||
| 161 | - | ||
| 162 | -### 4.1 数据集获取 | ||
| 163 | - | ||
| 164 | -获取原始数据集。(解压命令参考tar –xvf *.tar与 unzip *.zip) | ||
| 165 | - | ||
| 166 | -本模型支持ImageNet 50000张图片的验证集。以ILSVRC2012为例,请用户需自行获取ILSVRC2012数据集,上传数据集到服务器任意目录并解压(如:/home/HwHiAiUser/dataset)。本模型将使用到ILSVRC2012_img_val.tar验证集及ILSVRC2012_devkit_t12.gz中的meta.mat。 | ||
| 167 | - | ||
| 168 | -数据目录结构请参考: | ||
| 169 | - | ||
| 170 | -``` | ||
| 171 | -├──ILSVRC2012_img_val | ||
| 172 | -├──val | ||
| 173 | -├──ILSVRC2012_devkit_t12 | ||
| 174 | - ├── data | ||
| 175 | └── meta.mat | 97 | └── meta.mat |
| 176 | -``` | 98 | + ``` |
| 177 | 99 | ||
| 178 | -### 4.2 数据集切分 | 100 | +2. 数据预处理 |
| 101 | + 1. 首先运行数据集切分脚本ImageNet_val_split.py切分官方val数据集,形成上述目录结构, | ||
| 102 | + ``` | ||
| 103 | + python3.7 ImageNet_val_split.py ./val ./ILSVRC2012_devkit_t12 | ||
| 104 | + ``` | ||
| 105 | + - 参数说明: | ||
| 179 | 106 | ||
| 180 | -切分官方val数据集,形成和train一样的文件结构,即根目录-类别-图片 三级 | 107 | + - ./val:下载且未分类的ImageNet的val数据集**绝对路径**(如果需要保留val文件夹请先备份)。 |
| 108 | + - ./ILSVRC2012_devkit_t12:官方提供的deckit文件夹**绝对路径**。 | ||
| 181 | 109 | ||
| 182 | -```sh | 110 | + 2. 然后将原始数据集转换为模型输入的数据,执行Efficient-B1_preprocess.py脚本,完成预处理。 |
| 183 | -# 第一个参数为 新下载且未分类的 imagenet的val数据集路径, | 111 | + ``` |
| 184 | -# 第二个参数为官方 提供的 devkit 文件夹,如果要保留val文件夹请先备份 | 112 | + python3.7 Efficient-B1_preprocess.py ./val ./prep_dataset |
| 185 | -python3.7 ImageNet_val_split.py ./val ./ILSVRC2012_devkit_t12 | 113 | + ``` |
| 186 | -``` | 114 | + - 参数说明: |
| 187 | 115 | ||
| 188 | -### 4.3 数据集预处理 | 116 | + - ./val:同上述val数据集**绝对路径**。 |
| 117 | + - ./prep_dataset:保存数据集处理后二进制文件的文件夹**绝对路径**。 | ||
| 189 | 118 | ||
| 190 | -执行“Efficient-B1_preprocess.py”预处理脚本,生成数据集预处理后的bin文件。 | 119 | +## 模型推理<a name="section741711594517"></a> |
| 191 | 120 | ||
| 192 | -```sh | 121 | +1. 模型转换。 |
| 193 | -python3.7 Efficient-B1_preprocess.py ../val ./prep_dataset | ||
| 194 | -``` | ||
| 195 | 122 | ||
| 196 | -### 4.4 生成数据集信息文件 | 123 | + 使用PyTorch将模型权重文件.pth转换为.onnx文件,再使用ATC工具将.onnx文件转为离线推理模型文件.om文件。 |
| 197 | 124 | ||
| 198 | -生成数据集info文件。 | 125 | + 1. 获取权重文件。 |
| 199 | 126 | ||
| 200 | -```sh | 127 | + ```sh |
| 201 | -python3.7 gen_dataset_info.py bin ./prep_dataset ./efficientnet-B1_prep_bin.info 240 240 | 128 | + wget https://ascend-repo-modelzoo.obs.cn-east-2.myhuaweicloud.com/model/1_PyTorch_PTH/EfficientNet-B1/PTH/EN-B1_dds_8gpu.pyth |
| 202 | -``` | 129 | + ``` |
| 130 | + | ||
| 131 | + 2. 导出onnx文件。 | ||
| 132 | + | ||
| 133 | + 1. 使用pth2onnx导出onnx文件。 | ||
| 134 | + | ||
| 135 | + 运行pth2onnx脚本。 | ||
| 136 | + | ||
| 137 | + ``` | ||
| 138 | + python3.7 Efficient-B1_pth2onnx.py | ||
| 139 | + ``` | ||
| 140 | + | ||
| 141 | + 获得Efficient-b1.onnx文件。 | ||
| 142 | + | ||
| 143 | + 2. 优化ONNX文件。 | ||
| 144 | + | ||
| 145 | + ```sh | ||
| 146 | + python3.7 -m onnxsim --overwrite-input-shape="image:8,3,240,240" ./Efficient-b1.onnx efficient_B1_onnxsim.onnx | ||
| 147 | + ``` | ||
| 148 | + | ||
| 149 | + 获得efficient_B1_onnxsim.onnx文件。 | ||
| 150 | + | ||
| 151 | + 3. 使用ATC工具将ONNX模型转OM模型。 | ||
| 152 | + | ||
| 153 | + 1. 配置环境变量。 | ||
| 154 | + | ||
| 155 | + ``` | ||
| 156 | + source /usr/local/Ascend/ascend-toolkit/set_env.sh | ||
| 157 | + ``` | ||
| 158 | + | ||
| 159 | + 2. 执行命令查看芯片名称($\{chip\_name\})。 | ||
| 160 | + | ||
| 161 | + ``` | ||
| 162 | + npu-smi info | ||
| 163 | + #该设备芯片名为Ascend310P3 (自行替换) | ||
| 164 | + 回显如下: | ||
| 165 | + +-------------------+-----------------+------------------------------------------------------+ | ||
| 166 | + | NPU Name | Health | Power(W) Temp(C) Hugepages-Usage(page) | | ||
| 167 | + | Chip Device | Bus-Id | AICore(%) Memory-Usage(MB) | | ||
| 168 | + +===================+=================+======================================================+ | ||
| 169 | + | 0 310P3 | OK | 15.8 42 0 / 0 | | ||
| 170 | + | 0 0 | 0000:82:00.0 | 0 1074 / 21534 | | ||
| 171 | + +===================+=================+======================================================+ | ||
| 172 | + | 1 310P3 | OK | 15.4 43 0 / 0 | | ||
| 173 | + | 0 1 | 0000:89:00.0 | 0 1070 / 21534 | | ||
| 174 | + +===================+=================+======================================================+ | ||
| 175 | + ``` | ||
| 176 | + | ||
| 177 | + 3. 执行ATC命令。 | ||
| 178 | + | ||
| 179 | + ``` | ||
| 180 | + atc --model=efficient_B1_onnxsim.onnx --framework=5 --input_format=NCHW --input_shape="image:8,3,240,240" --output=Efficientnet_b1_bs8 --soc_version=Ascend${chip\_name\} --log=debug | ||
| 181 | + ``` | ||
| 182 | + | ||
| 183 | + - 参数说明: | ||
| 184 | + | ||
| 185 | + - --model:为ONNX模型文件。 | ||
| 186 | + - --framework:5代表ONNX模型。 | ||
| 187 | + - --input_format:输入数据的格式。 | ||
| 188 | + - --input_shape:输入数据的shape。 | ||
| 189 | + - --output:输出的OM模型。 | ||
| 190 | + - --soc_version:处理器型号。 | ||
| 191 | + - --log:日志级别。 | ||
| 192 | + | ||
| 193 | + 运行成功后生成<u>***Efficientnet_b1_bs8.om***</u>模型文件。 | ||
| 194 | + | ||
| 195 | +2. 开始推理验证。 | ||
| 196 | + | ||
| 197 | + 1. 使用ais_bench工具进行推理。 | ||
| 198 | + | ||
| 199 | + ais_bench工具获取及使用方式请点击查看[ais_bench推理工具使用文档](https://gitee.com/ascend/tools/tree/master/ais-bench_workload/tool/ais_infer),文档中aclruntime也需要安装。 | ||
| 200 | + | ||
| 201 | + 2. 建立软链接 | ||
| 202 | + 将prep_dataset文件夹处理为工具可以输入的格式。 | ||
| 203 | + 1. 创建用于保存软链接的文件夹 | ||
| 204 | + ``` | ||
| 205 | + mkdir soft_link | ||
| 206 | + cd soft_link | ||
| 207 | + ``` | ||
| 208 | + | ||
| 209 | + 2. 建立软链接(若无法建立,可尝试切换root用户重新建立) | ||
| 210 | + ``` | ||
| 211 | + find /home/${username}/ModelZoo-PyTorch/ACL_PyTorch/contrib/cv/classfication/EfficientNet-B1/prep_dataset/ -name "*.bin" | xargs -i ln -sf {} /home/${username}/ModelZoo-PyTorch/ACL_PyTorch/contrib/cv/classfication/EfficientNet-B1/soft_link/ | ||
| 212 | + ``` | ||
| 213 | + | ||
| 214 | + 3. 执行推理。 | ||
| 215 | + | ||
| 216 | + ``` | ||
| 217 | + source /usr/local/Ascend/ascend-toolkit/set_env.sh | ||
| 218 | + python3.7 -m ais_bench --model Efficientnet_b1_bs8.om --input ./soft_link --output ./ --outfmt TXT --device 0 | ||
| 219 | + ``` | ||
| 220 | + | ||
| 221 | + - 参数说明: | ||
| 222 | + | ||
| 223 | + - --model:om文件路径。 | ||
| 224 | + - --input:数据预处理后保存文件的路径。 | ||
| 225 | + - --output:输出文件夹路径。 | ||
| 226 | + - --outfmt:输出格式(一般为BIN或者TXT)。 | ||
| 227 | + - --device:NPU的ID,默认填0。 | ||
| 228 | + | ||
| 229 | + 推理后的输出默认在当前目录生成{20xx_xx_xx-xx_xx_xx}文件夹。 | ||
| 203 | 230 | ||
| 204 | 231 | ||
| 205 | 232 | ||
| 233 | + 4. 精度验证。 | ||
| 206 | 234 | ||
| 235 | + 调用Efficient-B1_postprocess.py脚本,可以获得精度accuracy数据(top1和top5),输入指令后请稍等片刻 | ||
| 207 | 236 | ||
| 208 | -## 5 离线推理 | 237 | + ``` |
| 238 | + python3.7 Efficient-B1_postprocess.py --pre_dir ${20xx_xx_xx-xx_xx_xx} --data_dir ../val/ --save_file ./result.json | ||
| 239 | + ``` | ||
| 209 | 240 | ||
| 210 | -### 5.1 ais_infer工具概述 | 241 | + - 参数说明: |
| 211 | 242 | ||
| 212 | -ais_infer工具包含前端和后端两部分。 后端基于c+开发,实现通用推理功能; 前端基于python开发,实现用户界面功能。获取工具及使用方法可以参考[tools: Ascend tools - Gitee.com](https://gitee.com/ascend/tools/tree/master/ais-bench_workload/tool/ais_infer) | 243 | + - --pre_dir:为生成推理结果所在相对路径。 |
| 244 | + - --data_dir:同上述val数据集绝对路径。 | ||
| 245 | + - --save_file:保存精度验证结果的路径文件。 | ||
| 213 | 246 | ||
| 214 | -### 5.2 离线推理 | 247 | + 5. 性能验证。 |
| 215 | 248 | ||
| 216 | -1.设置环境变量,请以实际安装环境配置。 | 249 | + 可使用ais_bench推理工具的纯推理模式验证不同batch_size的om模型的性能,参考命令如下: |
| 217 | 250 | ||
| 218 | -```sh | 251 | + ``` |
| 219 | -source /usr/local/Ascend/ascend-toolkit/set_env.sh | 252 | + python3.7 -m ais_bench --model ./Efficientnet_b1_bs8.om --loop 5 |
| 220 | -``` | 253 | + ``` |
| 221 | 254 | ||
| 222 | -2.安装ais_infer工具 | 255 | + - 参数说明: |
| 223 | - | 256 | + - --model:om模型的路径 |
| 224 | -```sh | ||
| 225 | -# 将工具的相关代码下载到本地 | ||
| 226 | -git clone https://gitee.com/ascend/tools.git | ||
| 227 | -# 进入ais-bench/tool/ais_infer目录,执行如下命令进行编译,生成推理后端whl包 | ||
| 228 | -cd tool/ais_infer/backend/ | ||
| 229 | -pip3.7 wheel ./ | ||
| 230 | -# 在运行设备上执行如下命令,进行安装 | ||
| 231 | -pip3 install ./aclruntime-0.0.1-cp37-cp37m-linux_aarch64.whl | ||
| 232 | -# 如果安装提示已经安装了相同版本的whl,请执行命令请添加参数"--force-reinstall" | ||
| 233 | -``` | ||
| 234 | - | ||
| 235 | -3.建立软链接 | ||
| 236 | - | ||
| 237 | -```sh | ||
| 238 | -# 由于“标签/bin文件”这一文件结构并不符合输出性能数据的要求,且直接cp文件量过多,因此选择建立软链接。 | ||
| 239 | -find ../prep_dataset/ -name "*.bin" | xargs -i ln -sf {} ./ruanlianjie | ||
| 240 | -``` | ||
| 241 | - | ||
| 242 | -4.输出性能数据 | ||
| 243 | - | ||
| 244 | -```sh | ||
| 245 | -# 以bs=16为例。 | ||
| 246 | -python3.7 ais_infer.py --model Efficient-b1_bs16.om --output ./ --input ./ruanlianjie --outfmt TXT | ||
| 247 | -# --model 需要进行推理的om模型 | ||
| 248 | -# --output 推理数据输出路径 | ||
| 249 | -# --input 模型需要的输入,支持bin文件和目录,若不加该参数,会自动生成都为0的数据 | ||
| 250 | -# --outfmt 输出数据的格式,默认”BIN“,可取值“NPY”、“BIN”、“TXT” | ||
| 251 | -``` | ||
| 252 | - | ||
| 253 | -5.切换到测试性能时生成的{20xx_xx_xx-xx_xx_xx}文件夹下,并删除sumary.json | ||
| 254 | - | ||
| 255 | -```sh | ||
| 256 | -rm -rf sumary.json | ||
| 257 | -``` | ||
| 258 | - | ||
| 259 | -6.对性能的输出结果进行重命名,以便于输出精度。 | ||
| 260 | - | ||
| 261 | -```sh | ||
| 262 | -# 由于性能输出的文件以“0.txt”结尾,不符合输出精度所要求的“以1.txt结尾”这一要求,因此需要对输出精度时输出的文件进行重命名。 | ||
| 263 | - | ||
| 264 | -# 安装rename,已经安装则可以跳过。 | ||
| 265 | -sudo apt-get update | ||
| 266 | -sudo apt-get upgrade | ||
| 267 | -sudo apt-get install rename | ||
| 268 | -rename "s/_0.txt/_1.txt/" * | ||
| 269 | -``` | ||
| 270 | 257 | ||
| 271 | 258 | ||
| 272 | 259 | ||
| 273 | -## 6 精度对比 | 260 | +# 模型推理性能&精度<a name="ZH-CN_TOPIC_0000001172201573"></a> |
| 274 | 261 | ||
| 275 | -### 6.1 精度数据 | 262 | +调用ACL接口推理计算,性能参考下列数据。 |
| 276 | 263 | ||
| 277 | -调用Efficient-B1_postprocess.py: | 264 | +| 芯片型号 | Batch Size | 数据集| 精度TOP1 | 精度TOP5 | 性能| |
| 278 | - | 265 | +| --------- | ----| ----------| ------ |---------|---------| |
| 279 | -```sh | 266 | +| 310P3 | 1 | ImageNet | 75.940 | 92.774 | 838.223 | |
| 280 | -# 输出精度 | 267 | +| 310P3 | 4 | ImageNet | 75.940 | 92.774 | 1235.712 | |
| 281 | -python3.7 Efficient-B1_postprocess.py --pre_dir {20xx_xx_xx-xx_xx_xx} --data_dir ../val/ --save_file ./result.json | 268 | +| 310P3 | 8 | ImageNet | 75.940 | 92.774 | 1409.692 | |
| 282 | -# 其中--pre_dir这一参数需要适时调整为测试性能时的输出的{20xx_xx_xx-xx_xx_xx}文件夹。 | 269 | +| 310P3 | 16 | ImageNet | 75.940 | 92.774 | 1360.392 | |
| 283 | -``` | 270 | +| 310P3 | 32 | ImageNet | 75.940 | 92.774 | 1304.791 | |
| 284 | - | 271 | +| 310P3 | 64 | ImageNet | 75.940 | 92.774 | 1273.800 | |
| 285 | -### 6.2 精度对比 | ||
| 286 | - | ||
| 287 | -| | **310** | **310P** | | ||
| 288 | -| -------- | ------- | -------- | | ||
| 289 | -| **Top1** | 75.936% | 75.936% | | ||
| 290 | -| **Top5** | 92.774% | 92.774% | | ||
| 291 | - | ||
| 292 | -### | ||
| 293 | - | ||
| 294 | - | ||
| 295 | - | ||
| 296 | -## 7 性能对比 | ||
| 297 | - | ||
| 298 | -### 7.1 310P性能数据 | ||
| 299 | - | ||
| 300 | -测试npu性能要确保device空闲,使用npu-smi info命令可查看device是否在运行其它推理任务。 | ||
| 301 | - | ||
| 302 | -```sh | ||
| 303 | -# 以bs=16为例。 | ||
| 304 | -python3.7 ais_infer.py --model Efficient-b1_bs16.om --output ./ --input ./ruanlianjie --outfmt TXT | ||
| 305 | -# --model 需要进行推理的om模型 | ||
| 306 | -# --output 推理数据输出路径 | ||
| 307 | -# --input 模型需要的输入,支持bin文件和目录,若不加该参数,会自动生成都为0的数据 | ||
| 308 | -# --outfmt 输出数据的格式,默认”BIN“,可取值“NPY”、“BIN”、“TXT” | ||
| 309 | -``` | ||
| 310 | - | ||
| 311 | -Interface throughputRate: 1635.3即是batch16 310P单卡吞吐率。 | ||
| 312 | - | ||
| 313 | -### 7.2 T4性能数据 | ||
| 314 | - | ||
| 315 | -在装有T4卡的服务器上测试gpu性能,测试过程请确保卡没有运行其他任务。 | ||
| 316 | - | ||
| 317 | -```sh | ||
| 318 | -trtexec --onnx=./Efficient-b1.onnx --shapes=image:16x3x240x240 --threads | ||
| 319 | -``` | ||
| 320 | - | ||
| 321 | -batch1 t4单卡吞吐率:1000*16/24.3536=656.98fps | ||
| 322 | - | ||
| 323 | -### 7.3 性能对比 | ||
| 324 | - | ||
| 325 | -| | **310** | **310P** | **T4** | **310P/310** | **310P/T4** | | ||
| 326 | -| ------------- | -------- | -------- | ------ | ------------ | ----------- | | ||
| 327 | -| **bs1** | 944.972 | 359.09 | 353.61 | 0.38 | 1.02 | | ||
| 328 | -| **bs16** | 1361.796 | 1635.3 | 656.98 | 1.201 | 2.49 | | ||
| 329 | -| **最优batch** | 1361.796 | 1635.3 | 656.98 | 1.201 | 2.49 | | ||
| 330 | - | ||
| 331 | -batch16: | ||
| 332 | - | ||
| 333 | -310P vs 310: 1635.3fps > 1.2 * 1361.796fps | ||
| 334 | - | ||
| 335 | -310P vs T4 : 1635.3fps > 1.6 * 656.98fps | ||
| 336 | - | ||
| 337 | -性能在310P上的性能达到310的1.2倍,达到T4性能的1.6倍,性能达标。 | ||
| @@ -1,9 +1,23 @@ | |||
| 1 | -pytorch==1.5.0 | 1 | +torch==1.11.0 |
| 2 | -torchvision==0.6.0 | 2 | +torchvision==0.12.0 |
| 3 | -onnx==1.7.0 | 3 | +onnx==1.11.0 |
| 4 | -numpy==1.18.5 | 4 | +onnxsim |
| 5 | -Pillow==7.2.0 | 5 | +isort |
| 6 | -opencv-python3==1.0 | ||
| 7 | -yacs | ||
| 8 | iopath | 6 | iopath |
| 9 | -submitit | 7 | +fairscale |
| 8 | +flake8 | ||
| 9 | +pyyaml | ||
| 10 | +matplotlib | ||
| 11 | +numpy==1.21.6 | ||
| 12 | +opencv-python==4.5.5.64 | ||
| 13 | +parameterized | ||
| 14 | +setuptools | ||
| 15 | +simplejson | ||
| 16 | +submitit | ||
| 17 | +yacs | ||
| 18 | +yattag | ||
| 19 | +scipy | ||
| 20 | +decorator | ||
| 21 | +sympy | ||
| 22 | + | ||
| 23 | + | ||