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 e74e7ae560fee7f3a0cbe35e285cb0a56a717648..17bfea4703d2a4f44017a37b4e60d9a3538fb896 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" @@ -9,6 +9,8 @@ - [3.1 找不到atc命令或找不到ascend动态库](#31-找不到atc命令或找不到ascend动态库) - [3.2 模型推理工具常见的错误&&解决方案](#32-模型推理工具常见的错误解决方案) - [3.3 msame和benchmark在多batch下推理区别](#33-msame和benchmark在多batch下推理区别) + - [3.4 msame/benchmark推理提示实际输入和om输入size不一致](#34-msamebenchmark推理提示实际输入和om输入size不一致) + - [3.5 benchmark工具报错`ERROR Check free memory less 0.256 rate now wait!`](#35-benchmark工具报错error-check-free-memory-less-0256-rate-now-wait) - [4 精度调试常见问题](#4-精度调试常见问题) - [5 性能优化常见问题](#5-性能优化常见问题) - [5.1 如何使用AIPP进行性能提升](#51-如何使用aipp进行性能提升) @@ -23,7 +25,7 @@ # 2 om模型转换问题汇总 ## 2.1 如何查看 `ONNX/om/pbtxt` 模型 -可以使用[在线版netron工具](https://netron.app/)或者[本地安装netron工具](https://github.com/lutzroeder/Netron)查看 +可以使用[在线版netron工具](https://netron.app/)或者[本地安装netron工具](https://github.com/lutzroeder/Netron)查看,建议本地安装查看。 ## 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自定义算子(方式一) @@ -166,13 +168,57 @@ [ERROR] model execute failed [ERROR] Sample process failed ``` - - 原因分析 +- 原因分析 - benchmark工具多batch模式下设置 `batch_size=16` 数值后,benchmark工具会一次读取16个bin进行推理,所以一个bin对应的是一张图片; - msame工具只会一次读取1个bin进行推理(没有`batch_size`命令行参数),所以多batch模式下需要一个bin对应的是16张图片; - - 解决方案 + benchmark工具多batch模式下设置 `batch_size=16` 数值后,benchmark工具会一次读取16个bin进行推理,所以一个bin对应的是一张图片; + msame工具只会一次读取1个bin进行推理(没有`batch_size`命令行参数),所以多batch模式下需要一个bin对应的是16张图片; +- 解决方案 + + 预处理时把16张图片保存成一个bin文件 + +## 3.4 msame/benchmark推理提示实际输入和om输入size不一致 +- 问题现象: + + 日志中表明实际输入和om中的输入size不一致。 + ```shell + [WARNING] GE(231368,msame):2021-11-29-15:52:53.388.686 [davinci_model.cc:3421]231368 CheckUserAndModelSize:User input size [5836800] is bigger than om size need [2067232], MAY cause inference result ERROR, please check model input + ``` +- 定位过程 + + 查看debug日志可以看出其它的input是没有问题的,msame处理多输入存在无问题的部分,应该是bin文件出了问题。 + ```shell + INFO[INFO] GE(231368,msame):2021-11-29-15:52:53.388.794 [davinci_model.cc:3527]231368 UpdateZeroCopyTaskParam:[ZCPY] Copy input blobs_index 7, virtual_addr: 0x108192984c00, size: 64, user_data_addr: 0x108081dba000, batch_label: + ``` +- 解决方案 + + 在pdb中查看input blobs_index 对应输入的shape,发现与om输入的shape不一致。更换输入后,用getsizeof查看存入bin文件之前的nparray,依然是比msame日志中的need size要大。通过观察在日志中没有问题的输入,发现无论是float32还是float64,在存入bin之前都是比日志中的size要大。而使用input.nbytes发现它的datasize是要小于日志中的size。最后发现nparray为空时,依然占用了内存中的96字节。 + +## 3.5 benchmark工具报错`[ERROR][VisionPreProcess] Check free memory less 0.256 rate now wait!` +- 问题现象: + + 使用benchmark工具推理时遇到如下报错 + ```shell + [INFO][VisionPreProcess] Create stream SUCCESS + [INFO][VisionPreProcess] Init SUCCESS + [INFO][Preprocess] Init SUCCESS + [INFO][DataManager] Init SUCCESS + [INFO][Inference] Init SUCCESS + [INFO][PostProcess] Init SUCCESS + [ERROR][VisionPreProcess] Check free memory less 0.256 rate now wait! If long time free memory lower, please check. + ``` - 预处理时把16张图片保存成一个bin文件 +- 定位过程 + + 因为是benchmark工具的报错,所以直接查看源码发现是有**DevMemNotEnough**函数检测device内存使用率,当om内存使用大于0.75后会直接报错。目前已与benchmark开发同事沟通去除该限制,详见[PR链接](https://gitee.com/ascend/cann-benchmark/commit/6ec0a0a7bff64130362db9ca6cd125dad023bbda) + +- 解决方案 + + 下载[benchmark工具](https://gitee.com/ascend/cann-benchmark)源码,本地编译即可。或者使用[msame工具](https://gitee.com/ascend/tools/tree/master/msame)进行替代。 + ```shell + # benchmark工具编译命令 + cd infer/build + bash build_local.sh + ``` # 4 精度调试常见问题