From 5ecd8db62efa90576374a67d959d0a7d22f6f1be Mon Sep 17 00:00:00 2001 From: Ronnie_zheng Date: Sat, 13 Nov 2021 11:32:58 +0800 Subject: [PATCH 1/3] update AIPP in FAQ --- ...47\272\277\346\216\250\347\220\206-FAQ.md" | 71 +++++++++---------- ...50\347\220\206\346\214\207\345\257\274.md" | 40 ++++++----- 2 files changed, 54 insertions(+), 57 deletions(-) diff --git "a/Ascend-PyTorch\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274/PyTorch\347\246\273\347\272\277\346\216\250\347\220\206-FAQ.md" "b/Ascend-PyTorch\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274/PyTorch\347\246\273\347\272\277\346\216\250\347\220\206-FAQ.md" index 1912728..8a9c6bf 100644 --- "a/Ascend-PyTorch\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274/PyTorch\347\246\273\347\272\277\346\216\250\347\220\206-FAQ.md" +++ "b/Ascend-PyTorch\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274/PyTorch\347\246\273\347\272\277\346\216\250\347\220\206-FAQ.md" @@ -1,42 +1,28 @@ # Ascend PyTorch模型离线推理常见问题FAQ - [Ascend PyTorch模型离线推理常见问题FAQ](#ascend-pytorch模型离线推理常见问题faq) - [1 介绍](#1-介绍) - - [FAQ上传格式](#faq上传格式) - [2 om模型转换问题汇总](#2-om模型转换问题汇总) - - [如何查看 `ONNX/om/pbtxt` 模型](#如何查看-onnxompbtxt-模型) - - [导出onnx脚本的 `dynamic_axes` 参数与onnx模型中的-1是什么意思?](#导出onnx脚本的-dynamic_axes-参数与onnx模型中的-1是什么意思) - - [`Exporting the operator {opname} to ONNX opset version {version} is not supported.`](#exporting-the-operator-opname-to-onnx-opset-version-version-is-not-supported) + - [2.1 如何查看 `ONNX/om/pbtxt` 模型](#21-如何查看-onnxompbtxt-模型) + - [2.2 `Exporting the operator {opname} to ONNX opset version {version} is not supported.`](#22-exporting-the-operator-opname-to-onnx-opset-version-version-is-not-supported) - [3 OM离线推理失败问题汇总](#3-om离线推理失败问题汇总) - - [运行atc或benchmark命令时报错找不到atc命令或找不到ascend动态库](#运行atc或benchmark命令时报错找不到atc命令或找不到ascend动态库) + - [3.1 找不到atc命令或找不到ascend动态库](#31-找不到atc命令或找不到ascend动态库) - [模型推理工具常见的错误&&解决方案](#模型推理工具常见的错误解决方案) - [4 精度调试常见问题](#4-精度调试常见问题) - [5 性能优化常见问题](#5-性能优化常见问题) -# [1 介绍](#1-介绍) + - [5.1 如何使用AIPP进行性能提升](#51-如何使用aipp进行性能提升) +# 1 介绍 本文目标读者为Ascend PyTorch模型离线推理开发者,用于指导开发者在昇腾服务器的CANN软件环境中,实现模型离线推理精度性能达标。这里仅列举模型离线推理中遇到的常见问题与解决方法,持续更新。 -## FAQ上传格式 +**FAQ上传格式** 尽量以文本方式呈现,方便索引查找 - 标题 - 错误现象 - 原因分析 - 解决方案 -# [2 om模型转换问题汇总](#2-om模型转换问题汇总) -## 如何查看 `ONNX/om/pbtxt` 模型 +# 2 om模型转换问题汇总 +## 2.1 如何查看 `ONNX/om/pbtxt` 模型 可以使用[在线版netron工具](https://netron.app/)或者[本地安装netron工具](https://github.com/lutzroeder/Netron)查看 -## 导出onnx脚本的 `dynamic_axes` 参数与onnx模型中的-1是什么意思? -常用ONNX导出命令如下,其中 `-1` 表示动态shape轴,即任意数值的输入shape均支持。 -```python -input_names = ["image"] -output_names = ["class"] -dynamic_axes = {'image': {0: '-1'}, 'class': {0: '-1'}} -dummy_input = torch.randn(1, 3, 224, 224) -torch.onnx.export(model, dummy_input, output_file, - input_names = input_names, dynamic_axes = dynamic_axes, - output_names = output_names, opset_version=11, verbose=True) -``` -因为目前CANN层对动态shape支持不完善,所以在ATC进行om模型转换时**优先使用** [dynamic_batch_size](https://support.huaweicloud.com/atctool-cann503alpha2infer/atlasatc_16_0051.html),[dynamic_image_size](https://support.huaweicloud.com/atctool-cann503alpha2infer/atlasatc_16_0052.html),[dynamic_dims](https://support.huaweicloud.com/atctool-cann503alpha2infer/atlasatc_16_0053.html) 动态分档特性。 - -## `Exporting the operator {opname} to ONNX opset version {version} is not supported.` +## 2.2 `Exporting the operator {opname} to ONNX opset version {version} is not supported.` 常见于 [mmdection](https://github.com/open-mmlab/mmdetection) 或者 [Ascend_pytorch](https://gitee.com/ascend/pytorch?_from=gitee_search) 等框架下出现了不存在于[ONNX标准库算子](https://github.com/onnx/onnx/blob/master/docs/Operators.md)的自定义算子,所以导出ONNX报错失败。解决方案有如下两种可供选择: - 注册ONNX自定义算子(方式一) ```python @@ -56,14 +42,11 @@ torch.onnx.export(model, dummy_input, output_file, out = AdaptiveAvgPoolOp.apply(x, output_size) return out - x = F.adaptive_avg_pool2d(input, output_size=bin_size)替换为x = adaptive_avg_pool_op(input, (bin_size, bin_size)) - ``` -- 注册ONNX自定义算子(方式二) - ```python - # 待补充 + #x = F.adaptive_avg_pool2d(input, output_size=bin_size) + x = adaptive_avg_pool_op(input, (bin_size, bin_size)) # 替换上面代码 ``` -# [3 OM离线推理失败问题汇总](#3-OM离线推理失败问题汇总) -## 运行atc或benchmark命令时报错找不到atc命令或找不到ascend动态库 +# 3 OM离线推理失败问题汇总 +## 3.1 找不到atc命令或找不到ascend动态库 - 现象描述 ```shell Command 'atc' not found, but can be installed with: @@ -84,11 +67,6 @@ torch.onnx.export(model, dummy_input, output_file, export ASCEND_OPP_PATH=${install_path}/opp export ASCEND_AICPU_PATH=/usr/local/Ascend/ascend-toolkit/latest ``` - 若是普通用户登录装有Ascend310卡的服务器,需要使用sudo执行命令,并且 - ``` - 修改/etc/sudoers将Defaults env_reset改成Defaults !env_reset - 修改/etc/bash.bashrc添加alias sudo='sudo env PATH=$PATH LD_LIBRARY_PATH=$LD_LIBRARY_PATH' - ``` ## 模型推理工具常见的错误&&解决方案 当前默认的模型推理是benchmark工具,以下为常见错误和一些解决方案: @@ -113,7 +91,24 @@ torch.onnx.export(model, dummy_input, output_file, - 模型不支持的输入 解决思路:当前benchmark工具支持的模型类型有:图像/自然语音/YOLO检测/搜索/语义理解/翻译,但存在不支持的输入类型如:3D的输入(如视频理解/点云等),可以采用[msame工具](https://gitee.com/ascend/tools/tree/master/msame)进行推理。 -# [4 精度调试常见问题](#4-精度调试常见问题) - -# [5 性能优化常见问题](#5-性能优化常见问题) +# 4 精度调试常见问题 +# 5 性能优化常见问题 +## 5.1 如何使用AIPP进行性能提升 +原理介绍可以参考[使能AIPP](https://support.huaweicloud.com/atctool-cann503alpha2infer/atlasatc_16_0016.html) +- 使用方法 + - 创建 `insert_op.cfg` + 如下示例相当于把输入直接给om推理了,如果期望AIPP实现**预处理功能**或者了解**配置项含义**可以参见[配置文件模板](https://support.huaweicloud.com/atctool-cann503alpha2infer/atlasatc_16_0024.html) + ```shell + aipp_op { + related_input_rank: 0 + src_image_size_w: 250 + src_image_size_h: 250 + aipp_mode: static + input_format: RGB888_U8 + csc_switch: false + rbuv_swap_switch: false + } + ``` + - 增加atc参数 + 在原有atc命令基础上增加 [--enable_small_channel=1](https://support.huaweicloud.com/atctool-cann503alpha2infer/atlasatc_16_0077.html) 和 [--insert_op_conf=path/to/insert_op.cfg](https://support.huaweicloud.com/atctool-cann503alpha2infer/atlasatc_16_0068.html#ZH-CN_TOPIC_0000001152734182) diff --git "a/Ascend-PyTorch\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274/PyTorch\347\246\273\347\272\277\346\216\250\347\220\206-\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274.md" "b/Ascend-PyTorch\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274/PyTorch\347\246\273\347\272\277\346\216\250\347\220\206-\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274.md" index 4c09dcd..886a167 100644 --- "a/Ascend-PyTorch\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274/PyTorch\347\246\273\347\272\277\346\216\250\347\220\206-\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274.md" +++ "b/Ascend-PyTorch\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274/PyTorch\347\246\273\347\272\277\346\216\250\347\220\206-\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274.md" @@ -2,24 +2,26 @@ # Ascend PyTorch模型离线推理指导 -- [1 概述](#1-概述) - - [1.1 原理与方案](#11-原理与方案) - - [1.2 环境搭建与使用说明](#12-环境搭建与使用说明) -- [2 推理指导](#2-推理指导) - - [2.1 推理流程](#21-推理流程) - - [2.1.1 导出onnx文件](#211-导出onnx文件) - - [2.1.2 转换为om模型](#212-转换为om模型) - - [2.1.3 测试集预处理](#213-测试集预处理) - - [2.1.4 离线推理](#214-离线推理) - - [2.1.5 精度统计](#215-精度统计) - - [2.1.6 性能对比](#216-性能对比) - - [2.2 模型转换指导](#22-模型转换指导) - - [2.3 精度调试指导](#23-精度调试指导) - - [2.4 性能优化指导](#24-性能优化指导) -- [3 附录](#3-附录) - - [3.1 模型案例](#31-模型案例) - - [3.2 交付标准与规范](#32-交付标准与规范) - - [3.3 深度学习指导](#33-深度学习指导) +- [Ascend PyTorch模型离线推理指导](#ascend-pytorch模型离线推理指导) + - [1 概述](#1-概述) + - [1.1 原理与方案](#11-原理与方案) + - [1.2 环境搭建与使用说明](#12-环境搭建与使用说明) + - [2 推理指导](#2-推理指导) + - [2.1 推理流程](#21-推理流程) + - [2.1.1 导出onnx文件](#211-导出onnx文件) + - [2.1.2 转换为om模型](#212-转换为om模型) + - [2.1.3 测试集预处理](#213-测试集预处理) + - [2.1.4 离线推理](#214-离线推理) + - [2.1.5 精度统计](#215-精度统计) + - [2.1.6 性能对比](#216-性能对比) + - [2.2 模型转换指导](#22-模型转换指导) + - [2.3 精度调试指导](#23-精度调试指导) + - [2.4 性能优化指导](#24-性能优化指导) + - [3 附录](#3-附录) + - [**附录1 完整模型案例**](#附录1-完整模型案例) + - [**附录2 交付标准与规范**](#附录2-交付标准与规范) + - [**附录3 推理FAQ**](#附录3-推理faq) + - [3.3 深度学习指导](#33-深度学习指导) @@ -40,7 +42,7 @@ - Ascend PyTorch模型离线推理流程 - 1. 获取预训练权重:基于基于Ascend 910训练好的pth权重文件或者开源代码仓提供的模型权重(优先) + 1. 获取预训练权重:基于Ascend 910训练好的pth权重文件或者开源代码仓提供的模型权重(优先) 2. 基于pth权重文件在**cpu**上导出onnx模型文件 -- Gitee From 873c5594739f58f4711ed8b5b013dd7dbce28486 Mon Sep 17 00:00:00 2001 From: Ronnie_zheng Date: Sat, 13 Nov 2021 11:38:16 +0800 Subject: [PATCH 2/3] revert change --- ...50\347\220\206\346\214\207\345\257\274.md" | 39 +++++++++---------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git "a/Ascend-PyTorch\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274/PyTorch\347\246\273\347\272\277\346\216\250\347\220\206-\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274.md" "b/Ascend-PyTorch\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274/PyTorch\347\246\273\347\272\277\346\216\250\347\220\206-\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274.md" index 886a167..d0bff57 100644 --- "a/Ascend-PyTorch\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274/PyTorch\347\246\273\347\272\277\346\216\250\347\220\206-\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274.md" +++ "b/Ascend-PyTorch\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274/PyTorch\347\246\273\347\272\277\346\216\250\347\220\206-\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274.md" @@ -2,27 +2,24 @@ # Ascend PyTorch模型离线推理指导 -- [Ascend PyTorch模型离线推理指导](#ascend-pytorch模型离线推理指导) - - [1 概述](#1-概述) - - [1.1 原理与方案](#11-原理与方案) - - [1.2 环境搭建与使用说明](#12-环境搭建与使用说明) - - [2 推理指导](#2-推理指导) - - [2.1 推理流程](#21-推理流程) - - [2.1.1 导出onnx文件](#211-导出onnx文件) - - [2.1.2 转换为om模型](#212-转换为om模型) - - [2.1.3 测试集预处理](#213-测试集预处理) - - [2.1.4 离线推理](#214-离线推理) - - [2.1.5 精度统计](#215-精度统计) - - [2.1.6 性能对比](#216-性能对比) - - [2.2 模型转换指导](#22-模型转换指导) - - [2.3 精度调试指导](#23-精度调试指导) - - [2.4 性能优化指导](#24-性能优化指导) - - [3 附录](#3-附录) - - [**附录1 完整模型案例**](#附录1-完整模型案例) - - [**附录2 交付标准与规范**](#附录2-交付标准与规范) - - [**附录3 推理FAQ**](#附录3-推理faq) - - [3.3 深度学习指导](#33-深度学习指导) - +- [1 概述](#1-概述) + - [1.1 原理与方案](#11-原理与方案) + - [1.2 环境搭建与使用说明](#12-环境搭建与使用说明) +- [2 推理指导](#2-推理指导) + - [2.1 推理流程](#21-推理流程) + - [2.1.1 导出onnx文件](#211-导出onnx文件) + - [2.1.2 转换为om模型](#212-转换为om模型) + - [2.1.3 测试集预处理](#213-测试集预处理) + - [2.1.4 离线推理](#214-离线推理) + - [2.1.5 精度统计](#215-精度统计) + - [2.1.6 性能对比](#216-性能对比) + - [2.2 模型转换指导](#22-模型转换指导) + - [2.3 精度调试指导](#23-精度调试指导) + - [2.4 性能优化指导](#24-性能优化指导) +- [3 附录](#3-附录) + - [3.1 模型案例](#31-模型案例) + - [3.2 交付标准与规范](#32-交付标准与规范) + - [3.3 深度学习指导](#33-深度学习指导) ## 1 概述 -- Gitee From e48eebbb7980bf2a9f5c222876c8907364c7e1d1 Mon Sep 17 00:00:00 2001 From: Ronnie_zheng Date: Mon, 15 Nov 2021 09:53:40 +0800 Subject: [PATCH 3/3] update FAQ --- ...47\272\277\346\216\250\347\220\206-FAQ.md" | 21 +++++++------------ 1 file changed, 8 insertions(+), 13 deletions(-) diff --git "a/Ascend-PyTorch\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274/PyTorch\347\246\273\347\272\277\346\216\250\347\220\206-FAQ.md" "b/Ascend-PyTorch\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274/PyTorch\347\246\273\347\272\277\346\216\250\347\220\206-FAQ.md" index 8a9c6bf..614d750 100644 --- "a/Ascend-PyTorch\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274/PyTorch\347\246\273\347\272\277\346\216\250\347\220\206-FAQ.md" +++ "b/Ascend-PyTorch\347\246\273\347\272\277\346\216\250\347\220\206\346\214\207\345\257\274/PyTorch\347\246\273\347\272\277\346\216\250\347\220\206-FAQ.md" @@ -71,25 +71,20 @@ ## 模型推理工具常见的错误&&解决方案 当前默认的模型推理是benchmark工具,以下为常见错误和一些解决方案: -- 模型输入数据存在问题 -错误日志: -``` +- 错误现象: +```shell [ERROR][Inference] Input data size don't match the model input size! len is xx, singleSize is xx [ERROR][Inference] Call create model dataset size failed! ``` -解决思路:通常是dump出来的bin文件有问题,如size等 - -- 输入数据的info文件存在问题 - -错误日志: -``` +或者 +```shell # 常见于nlp等模型 [ERROR][DataManager] Get language text path failed, please check language text list file! ``` -解决思路:通常是输入的input_image_path/input_text_path格式问题,如常见的nlp模型通常会有多输入的场合会有输入顺序/输入名的问题 - -- 模型不支持的输入 -解决思路:当前benchmark工具支持的模型类型有:图像/自然语音/YOLO检测/搜索/语义理解/翻译,但存在不支持的输入类型如:3D的输入(如视频理解/点云等),可以采用[msame工具](https://gitee.com/ascend/tools/tree/master/msame)进行推理。 +- 原因分析&解决方案 + - 通常是dump出来的bin文件有问题,如size等; + - 通常是输入的input_image_path/input_text_path格式问题,如常见的nlp模型通常会有多输入的场合会有输入顺序/输入名的问题 + - 当前benchmark工具支持的模型类型有:图像/自然语音/YOLO检测/搜索/语义理解/翻译,但存在不支持的输入类型如:3D的输入(如视频理解/点云等),可以采用[msame工具](https://gitee.com/ascend/tools/tree/master/msame)进行推理。 # 4 精度调试常见问题 -- Gitee