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 1912728e57e67eb5b1c4d6ba3ca32bc2e7e4a4ed..614d750dea40ce89f72e936ce7aaf53db9396644 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,36 +67,43 @@ 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工具,以下为常见错误和一些解决方案: -- 模型输入数据存在问题 -错误日志: -``` +- 错误现象: +```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)进行推理。 - -# [4 精度调试常见问题](#4-精度调试常见问题) +- 原因分析&解决方案 + - 通常是dump出来的bin文件有问题,如size等; + - 通常是输入的input_image_path/input_text_path格式问题,如常见的nlp模型通常会有多输入的场合会有输入顺序/输入名的问题 + - 当前benchmark工具支持的模型类型有:图像/自然语音/YOLO检测/搜索/语义理解/翻译,但存在不支持的输入类型如:3D的输入(如视频理解/点云等),可以采用[msame工具](https://gitee.com/ascend/tools/tree/master/msame)进行推理。 -# [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 4c09dcdc2e159dad53a12df56c84f18a479d95f1..d0bff57938fd9e044f41c616aaa1c50613a1e911 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" @@ -22,7 +22,6 @@ - [3.3 深度学习指导](#33-深度学习指导) - ## 1 概述 - **[原理与方案](#11-原理与方案)** @@ -40,7 +39,7 @@ - Ascend PyTorch模型离线推理流程 - 1. 获取预训练权重:基于基于Ascend 910训练好的pth权重文件或者开源代码仓提供的模型权重(优先) + 1. 获取预训练权重:基于Ascend 910训练好的pth权重文件或者开源代码仓提供的模型权重(优先) 2. 基于pth权重文件在**cpu**上导出onnx模型文件