From ca74f5a09a4887f7167be7cae2732e75c5673b98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E4=B8=9A=E5=BA=86?= Date: Thu, 27 May 2021 14:40:04 +0800 Subject: [PATCH 01/17] =?UTF-8?q?update=20AscendPytorch=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E6=8E=A8=E7=90=86=E4=BC=97=E6=99=BAFAQ.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...347\220\206\344\274\227\346\231\272FAQ.md" | 64 ++++++++++++++++--- 1 file changed, 55 insertions(+), 9 deletions(-) diff --git "a/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" "b/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" index 1fcac6f..10b282a 100644 --- "a/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" +++ "b/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" @@ -14,14 +14,25 @@ ## [2.1 NPU模型打通常见问题FAQ](#21-NPU模型打通常见问题FAQ) -1.如果开源代码仓提供了多个权重文件,使用常用的基础的那个配置的权重文件即可;如果开源代码仓没有提供pth权重文件,则需要该模型的训练同学提供pth权重文件,或者使用开源代码仓训练脚本简单训练一个pth权重文件,然后对比om精度与该pth权重文件的精度 -2.由于随机数可能不能模拟数据分布,Ascend benchmark工具纯推理功能测的有些模型性能数据可能不太准,所以模型测试脚本与提交代码的描述中的性能数据以Ascend benchmark在数据集上推理时得到性能数据为准 -3.如果模型支持多batch,需要测试batch1,4,8,16,32的精度与性能,写在README.md里,模型测试脚本与提交代码的描述只需提供bs1和bs16的精度性能数据 -4.如果导出的onnx因包含自定义算子等而不能推理,则在t4上运行开源评测脚本测试pth模型在线推理性能 -5.交付请参考《推理指导》6.2 交付标准与规范,交付件样例:https://gitee.com/ascend/modelzoo/tree/master/built-in/ACL_PyTorch/Benchmark/cv/classification/ResNext50 -6.模型推理与训练是独立的事情,推理比训练简单一些,推理是使用模型开源代码仓提供的权重在310上执行推理,一般在训练等待结果的时间内可以同步做推理,但是做之前需要先熟悉相关工作,然后进行模型推理,如果精度性能不达标就需要花费不少时间了,模型推理到验收还有检视整改测试资料文档的工作,不是三天就能做完模型推理,从开始到验收完成整个周期规划了一个月的时间 -7.前后处理与转onnx在cpu上做即可,转om模型和benchmark推理时的命令在装有ascend 310的服务器上执行即可,因为两个命令依赖Ascend cann包提供的编译工具与npu算子库,gpu性能数据需要在装有t4卡的服务器上测 -8.如下导出的onnx模型通过可视化工具netron查看其输入shape是(-1,3,224,224),-1代表onnx模型是动态batch的,当用tensorRT在t4上测onnx的性能时可以指定任意batch的输入(batch,3,224,224),dynamic_axes是动态batch参数,'image': {0: '-1'}表示输入image的第一维是-1即batch维为-1表示动态 +1.交付请参考《推理指导》6.2 交付标准与规范 +交付件样例:https://gitee.com/ascend/modelzoo/tree/master/built-in/ACL_PyTorch/Benchmark/cv/classification/ResNext50 + +2.提供的装有Ascend 310卡的服务器已经安装好ascend的包,服务器home/common/resnext50的样例是可以运行的 + +3.模型推理与训练是独立的事情,推理比训练简单一些,推理是使用模型开源代码仓提供的权重在310上执行推理,一般在训练等待结果的时间内可以同步做推理,但是做之前需要先熟悉相关工作,然后进行模型推理,如果精度性能不达标就需要花费不少时间了,模型推理到验收还有检视整改测试资料文档的工作,不是三天就能做完模型推理,从开始到验收完成整个周期规划了一个月的时间 + +4.前后处理与转onnx在cpu上做即可,转om模型和benchmark推理时的命令在装有ascend 310的服务器上执行即可,因为两个命令依赖Ascend cann包提供的编译工具与npu算子库,gpu性能数据需要在装有t4卡的服务器上测 + +5.如果开源代码仓提供了多个权重文件,使用常用的基础的那个配置的权重文件即可 +如果开源代码仓没有提供pth权重文件,则需要该模型的训练同学提供pth权重文件,或者使用开源代码仓训练脚本简单训练一个pth权重文件,然后对比om精度与该pth权重文件的精度 + +6.如果模型支持多batch,需要测试batch1,4,8,16,32的精度与性能,写在README.md里,模型测试脚本与提交代码的描述只需提供bs1和bs16的精度性能数据 + +7.如果导出的onnx因包含自定义算子等而不能推理,则在t4上运行开源评测脚本测试pth模型在线推理性能 + +8.由于随机数可能不能模拟数据分布,Ascend benchmark工具纯推理功能测的有些模型性能数据可能不太准,所以模型测试脚本与提交代码的描述中的性能数据以Ascend benchmark在数据集上推理时得到性能数据为准 + +9.如下导出的onnx模型通过可视化工具netron查看其输入shape是(-1,3,224,224),-1代表onnx模型是动态batch的,当用tensorRT在t4上测onnx的性能时可以指定任意batch的输入(batch,3,224,224),dynamic_axes是动态batch参数,'image': {0: '-1'}表示输入image的第一维是-1即batch维为-1表示动态 ``` input_names = ["image"] output_names = ["class"] @@ -34,8 +45,43 @@ atc --framework=5 --model=./resnext50.onnx --input_format=NCHW --input_shape="image:16,3,224,224" --output=resnext50_bs16 --log=debug --soc_version=Ascend310 ``` 当然像一些模型如shufflenetv1其实不支持动态batch,转换为固定batch的om时除了指定--input_shape的相同的batch,还需要相同batch的onnx模型来转换,否则会报错 -9.提供的装有Ascend 310卡的服务器已经安装好ascend的包,服务器home/common/resnext50的样例是可以运行的 + 10.atc日志如何查看 +export ASCEND_SLOG_PRINT_TO_STDOUT=1 +export ASCEND_GLOBAL_LOG_LEVEL=0 #debug 0 --> info 1 --> warning 2 --> error 3 +然后执行atc ... > atc.log + + +11.自定义算子 +pytorch代码的adaptive_avg_pool2d目前onnx还不支持,所以导出onnx时报错,使用avg_pool2d替换adaptive_avg_pool2d,但当input最后两维不是output的整数倍时,adaptive_avg_pool2d不能完全等价替换为avg_pool2d,而npu有adaptive_avg_pool2d算子的实现,所以将adaptive_avg_pool2d改为自定义算子导出onnx,自定义算子不需要具体实现代码(因此导出的onnx不能使用onnxruntime进行推理,还需要将pytorch的_check_onnx_proto(proto)改为pass去除导出onnx时进行检查),只要自定义算子返回的输出shape与原算子输出的shape保持一致即可,相当于onnx只包含这个算子的声明(数据类型与属性需要与npu算子对应),在onnx转为om时,atc工具的onnx插件如果支持该算子,atc工具会根据这个声明找到该算子npu的实现。 +查看npu的adaptive_avg_pool2d声明: +``` +REG_OP(AdaptiveAvgPool2d) + .INPUT(x, TensorType({DT_FLOAT, DT_FLOAT16})) + .OUTPUT(y, TensorType({DT_FLOAT, DT_FLOAT16})) + .REQUIRED_ATTR(output_size, ListInt) + .OP_END_FACTORY_REG(AdaptiveAvgPool2d) +``` +修改模型代码,将adaptive_avg_pool2d改为自定义算子,然后导出onnx,其中output_size_i代表int64类型的算子属性: +``` +class AdaptiveAvgPoolOp(torch.autograd.Function): + + @staticmethod + def forward(ctx, x, output_size): + out = torch.randn(x.shape[0], x.shape[1], output_size[0], output_size[1]).to(x.dtype) + return out + + @staticmethod + def symbolic(g, x, output_size): + out = g.op('AdaptiveAvgPool2d', x, output_size_i = output_size) + return out + +def adaptive_avg_pool_op(x, output_size): + 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)) +``` ### FAQ1、运行atc或benchmark命令时报错找不到atc命令或找不到ascend动态库 -- Gitee From 04262e4568ac7d19ed8a7ee6410111b8611c66b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E4=B8=9A=E5=BA=86?= Date: Thu, 27 May 2021 14:40:54 +0800 Subject: [PATCH 02/17] =?UTF-8?q?update=20AscendPytorch=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E6=8E=A8=E7=90=86=E4=BC=97=E6=99=BAFAQ.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git "a/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" "b/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" index 10b282a..c9a063a 100644 --- "a/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" +++ "b/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" @@ -47,10 +47,11 @@ atc --framework=5 --model=./resnext50.onnx --input_format=NCHW --input_shape="im 当然像一些模型如shufflenetv1其实不支持动态batch,转换为固定batch的om时除了指定--input_shape的相同的batch,还需要相同batch的onnx模型来转换,否则会报错 10.atc日志如何查看 +``` export ASCEND_SLOG_PRINT_TO_STDOUT=1 export ASCEND_GLOBAL_LOG_LEVEL=0 #debug 0 --> info 1 --> warning 2 --> error 3 然后执行atc ... > atc.log - +``` 11.自定义算子 pytorch代码的adaptive_avg_pool2d目前onnx还不支持,所以导出onnx时报错,使用avg_pool2d替换adaptive_avg_pool2d,但当input最后两维不是output的整数倍时,adaptive_avg_pool2d不能完全等价替换为avg_pool2d,而npu有adaptive_avg_pool2d算子的实现,所以将adaptive_avg_pool2d改为自定义算子导出onnx,自定义算子不需要具体实现代码(因此导出的onnx不能使用onnxruntime进行推理,还需要将pytorch的_check_onnx_proto(proto)改为pass去除导出onnx时进行检查),只要自定义算子返回的输出shape与原算子输出的shape保持一致即可,相当于onnx只包含这个算子的声明(数据类型与属性需要与npu算子对应),在onnx转为om时,atc工具的onnx插件如果支持该算子,atc工具会根据这个声明找到该算子npu的实现。 -- Gitee From 27602f4368ab211a95d37361d42f065810c76a9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E4=B8=9A=E5=BA=86?= Date: Thu, 27 May 2021 14:57:49 +0800 Subject: [PATCH 03/17] =?UTF-8?q?update=20AscendPytorch=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E6=8E=A8=E7=90=86=E4=BC=97=E6=99=BAFAQ.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...347\220\206\344\274\227\346\231\272FAQ.md" | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git "a/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" "b/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" index c9a063a..5586903 100644 --- "a/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" +++ "b/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" @@ -14,25 +14,34 @@ ## [2.1 NPU模型打通常见问题FAQ](#21-NPU模型打通常见问题FAQ) -1.交付请参考《推理指导》6.2 交付标准与规范 +### FAQ1、交付与样例 +交付请参考《推理指导》6.2 交付标准与规范 交付件样例:https://gitee.com/ascend/modelzoo/tree/master/built-in/ACL_PyTorch/Benchmark/cv/classification/ResNext50 -2.提供的装有Ascend 310卡的服务器已经安装好ascend的包,服务器home/common/resnext50的样例是可以运行的 +### FAQ2、装有Ascend 310卡的服务器使用说明 +提供的装有Ascend 310卡的服务器已经安装好ascend的包,服务器home/common/resnext50的样例是可以运行的 -3.模型推理与训练是独立的事情,推理比训练简单一些,推理是使用模型开源代码仓提供的权重在310上执行推理,一般在训练等待结果的时间内可以同步做推理,但是做之前需要先熟悉相关工作,然后进行模型推理,如果精度性能不达标就需要花费不少时间了,模型推理到验收还有检视整改测试资料文档的工作,不是三天就能做完模型推理,从开始到验收完成整个周期规划了一个月的时间 +### FAQ3、推理与训练独立及推理工作量 +模型推理与训练是独立的事情,推理比训练简单一些,推理是使用模型开源代码仓提供的权重在310上执行推理,一般在训练等待结果的时间内可以同步做推理,但是做之前需要先熟悉相关工作,然后进行模型推理,如果精度性能不达标就需要花费不少时间了,模型推理到验收还有检视整改测试资料文档的工作,不是三天就能做完模型推理,从开始到验收完成整个周期规划了一个月的时间 -4.前后处理与转onnx在cpu上做即可,转om模型和benchmark推理时的命令在装有ascend 310的服务器上执行即可,因为两个命令依赖Ascend cann包提供的编译工具与npu算子库,gpu性能数据需要在装有t4卡的服务器上测 +### FAQ4、推理过程中哪些需要在310服务器上做,哪些需要在t4服务器上做,哪些需要在cpu上做 +前后处理与转onnx在cpu上做即可,转om模型和benchmark推理时的命令在装有ascend 310的服务器上执行即可,因为两个命令依赖Ascend cann包提供的编译工具与npu算子库,gpu性能数据需要在装有t4卡的服务器上测 -5.如果开源代码仓提供了多个权重文件,使用常用的基础的那个配置的权重文件即可 +### FAQ5、开源代码仓预训练权重文件的问题 +如果开源代码仓提供了多个权重文件,使用常用的基础的那个配置的权重文件即可,并且模型支持多任务时只需要针对一个任务做推理 如果开源代码仓没有提供pth权重文件,则需要该模型的训练同学提供pth权重文件,或者使用开源代码仓训练脚本简单训练一个pth权重文件,然后对比om精度与该pth权重文件的精度 -6.如果模型支持多batch,需要测试batch1,4,8,16,32的精度与性能,写在README.md里,模型测试脚本与提交代码的描述只需提供bs1和bs16的精度性能数据 +### FAQ6、精度与性能测试batch +如果模型支持多batch,需要测试batch1,4,8,16,32的精度与性能,写在README.md里,模型测试脚本与提交代码的描述只需提供bs1和bs16的精度性能数据 -7.如果导出的onnx因包含自定义算子等而不能推理,则在t4上运行开源评测脚本测试pth模型在线推理性能 +### FAQ7、onnx不能推理,t4性能如何测? +如果导出的onnx因包含自定义算子等而不能推理,则在t4上运行开源评测脚本测试pth模型在线推理性能 -8.由于随机数可能不能模拟数据分布,Ascend benchmark工具纯推理功能测的有些模型性能数据可能不太准,所以模型测试脚本与提交代码的描述中的性能数据以Ascend benchmark在数据集上推理时得到性能数据为准 +### FAQ8、om性能如何测? +由于随机数可能不能模拟数据分布,Ascend benchmark工具纯推理功能测的有些模型性能数据可能不太准,所以模型测试脚本与提交代码的描述中的性能数据以Ascend benchmark在数据集上推理时得到性能数据为准 -9.如下导出的onnx模型通过可视化工具netron查看其输入shape是(-1,3,224,224),-1代表onnx模型是动态batch的,当用tensorRT在t4上测onnx的性能时可以指定任意batch的输入(batch,3,224,224),dynamic_axes是动态batch参数,'image': {0: '-1'}表示输入image的第一维是-1即batch维为-1表示动态 +### FAQ9、导出onnx脚本的dynamic_axes与onnx的输入shape(-1,3,224,224)中的-1是什么意思? +如下导出的onnx模型通过可视化工具netron查看其输入shape是(-1,3,224,224),-1代表onnx模型是动态batch的,当用tensorRT在t4上测onnx的性能时可以指定任意batch的输入(batch,3,224,224),dynamic_axes是动态batch参数,'image': {0: '-1'}表示输入image的第一维是-1即batch维为-1表示动态 ``` input_names = ["image"] output_names = ["class"] @@ -46,14 +55,14 @@ atc --framework=5 --model=./resnext50.onnx --input_format=NCHW --input_shape="im ``` 当然像一些模型如shufflenetv1其实不支持动态batch,转换为固定batch的om时除了指定--input_shape的相同的batch,还需要相同batch的onnx模型来转换,否则会报错 -10.atc日志如何查看 +### FAQ10、atc命令失败时如何查看日志? ``` export ASCEND_SLOG_PRINT_TO_STDOUT=1 export ASCEND_GLOBAL_LOG_LEVEL=0 #debug 0 --> info 1 --> warning 2 --> error 3 然后执行atc ... > atc.log ``` -11.自定义算子 +### FAQ10、模型代码包含不能导出onnx的算子时如何解决-等价替换为自定义算子? pytorch代码的adaptive_avg_pool2d目前onnx还不支持,所以导出onnx时报错,使用avg_pool2d替换adaptive_avg_pool2d,但当input最后两维不是output的整数倍时,adaptive_avg_pool2d不能完全等价替换为avg_pool2d,而npu有adaptive_avg_pool2d算子的实现,所以将adaptive_avg_pool2d改为自定义算子导出onnx,自定义算子不需要具体实现代码(因此导出的onnx不能使用onnxruntime进行推理,还需要将pytorch的_check_onnx_proto(proto)改为pass去除导出onnx时进行检查),只要自定义算子返回的输出shape与原算子输出的shape保持一致即可,相当于onnx只包含这个算子的声明(数据类型与属性需要与npu算子对应),在onnx转为om时,atc工具的onnx插件如果支持该算子,atc工具会根据这个声明找到该算子npu的实现。 查看npu的adaptive_avg_pool2d声明: ``` -- Gitee From f055c3979d0d6b7552113464772fae70efae134a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E4=B8=9A=E5=BA=86?= Date: Thu, 27 May 2021 15:16:56 +0800 Subject: [PATCH 04/17] =?UTF-8?q?update=20AscendPytorch=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E6=8E=A8=E7=90=86=E4=BC=97=E6=99=BAFAQ.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...347\220\206\344\274\227\346\231\272FAQ.md" | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git "a/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" "b/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" index 5586903..30f6eef 100644 --- "a/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" +++ "b/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" @@ -14,33 +14,37 @@ ## [2.1 NPU模型打通常见问题FAQ](#21-NPU模型打通常见问题FAQ) -### FAQ1、交付与样例 +### FAQ1、需要提供哪些交付件,如何交付? 交付请参考《推理指导》6.2 交付标准与规范 交付件样例:https://gitee.com/ascend/modelzoo/tree/master/built-in/ACL_PyTorch/Benchmark/cv/classification/ResNext50 -### FAQ2、装有Ascend 310卡的服务器使用说明 +### FAQ2、装有Ascend 310卡的服务器环境如何使用? 提供的装有Ascend 310卡的服务器已经安装好ascend的包,服务器home/common/resnext50的样例是可以运行的 -### FAQ3、推理与训练独立及推理工作量 -模型推理与训练是独立的事情,推理比训练简单一些,推理是使用模型开源代码仓提供的权重在310上执行推理,一般在训练等待结果的时间内可以同步做推理,但是做之前需要先熟悉相关工作,然后进行模型推理,如果精度性能不达标就需要花费不少时间了,模型推理到验收还有检视整改测试资料文档的工作,不是三天就能做完模型推理,从开始到验收完成整个周期规划了一个月的时间 +### FAQ3、推理与训练的关系? +模型推理与训练是独立的事情,推理比训练简单一些,推理是使用模型开源代码仓提供的权重在310上执行推理,一般在训练等待结果的时间内可以同步做推理 -### FAQ4、推理过程中哪些需要在310服务器上做,哪些需要在t4服务器上做,哪些需要在cpu上做 +### FAQ4、推理工作量? +做之前需要先熟悉相关工作,然后进行模型推理,如果精度性能不达标就需要花费不少时间了,模型推理到验收还有检视整改测试资料文档的工作,不是三天就能做完模型推理,从开始到验收完成整个周期规划了一个月的时间 + +### FAQ5、推理过程中哪些工作在310服务器上做,哪些在t4服务器上做,哪些在cpu上做? 前后处理与转onnx在cpu上做即可,转om模型和benchmark推理时的命令在装有ascend 310的服务器上执行即可,因为两个命令依赖Ascend cann包提供的编译工具与npu算子库,gpu性能数据需要在装有t4卡的服务器上测 -### FAQ5、开源代码仓预训练权重文件的问题 +### FAQ6、开源代码仓预训练权重文件的问题? 如果开源代码仓提供了多个权重文件,使用常用的基础的那个配置的权重文件即可,并且模型支持多任务时只需要针对一个任务做推理 如果开源代码仓没有提供pth权重文件,则需要该模型的训练同学提供pth权重文件,或者使用开源代码仓训练脚本简单训练一个pth权重文件,然后对比om精度与该pth权重文件的精度 -### FAQ6、精度与性能测试batch +### FAQ7、精度与性能需要测试哪些batch? 如果模型支持多batch,需要测试batch1,4,8,16,32的精度与性能,写在README.md里,模型测试脚本与提交代码的描述只需提供bs1和bs16的精度性能数据 -### FAQ7、onnx不能推理,t4性能如何测? +### FAQ8、onnx不能推理,t4性能如何测? 如果导出的onnx因包含自定义算子等而不能推理,则在t4上运行开源评测脚本测试pth模型在线推理性能 -### FAQ8、om性能如何测? +### FAQ9、om性能如何测? +测试时需要确保测试过程中device只进行了这一个测试任务,使用npu-smi info查看device是否空闲 由于随机数可能不能模拟数据分布,Ascend benchmark工具纯推理功能测的有些模型性能数据可能不太准,所以模型测试脚本与提交代码的描述中的性能数据以Ascend benchmark在数据集上推理时得到性能数据为准 -### FAQ9、导出onnx脚本的dynamic_axes与onnx的输入shape(-1,3,224,224)中的-1是什么意思? +### FAQ10、导出onnx脚本的dynamic_axes与onnx的输入shape(-1,3,224,224)中的-1是什么意思? 如下导出的onnx模型通过可视化工具netron查看其输入shape是(-1,3,224,224),-1代表onnx模型是动态batch的,当用tensorRT在t4上测onnx的性能时可以指定任意batch的输入(batch,3,224,224),dynamic_axes是动态batch参数,'image': {0: '-1'}表示输入image的第一维是-1即batch维为-1表示动态 ``` input_names = ["image"] @@ -55,14 +59,14 @@ atc --framework=5 --model=./resnext50.onnx --input_format=NCHW --input_shape="im ``` 当然像一些模型如shufflenetv1其实不支持动态batch,转换为固定batch的om时除了指定--input_shape的相同的batch,还需要相同batch的onnx模型来转换,否则会报错 -### FAQ10、atc命令失败时如何查看日志? +### FAQ11、atc命令失败时如何查看日志? ``` export ASCEND_SLOG_PRINT_TO_STDOUT=1 export ASCEND_GLOBAL_LOG_LEVEL=0 #debug 0 --> info 1 --> warning 2 --> error 3 然后执行atc ... > atc.log ``` -### FAQ10、模型代码包含不能导出onnx的算子时如何解决-等价替换为自定义算子? +### FAQ12、模型代码包含不能导出onnx的算子时如何解决-等价替换为自定义算子? pytorch代码的adaptive_avg_pool2d目前onnx还不支持,所以导出onnx时报错,使用avg_pool2d替换adaptive_avg_pool2d,但当input最后两维不是output的整数倍时,adaptive_avg_pool2d不能完全等价替换为avg_pool2d,而npu有adaptive_avg_pool2d算子的实现,所以将adaptive_avg_pool2d改为自定义算子导出onnx,自定义算子不需要具体实现代码(因此导出的onnx不能使用onnxruntime进行推理,还需要将pytorch的_check_onnx_proto(proto)改为pass去除导出onnx时进行检查),只要自定义算子返回的输出shape与原算子输出的shape保持一致即可,相当于onnx只包含这个算子的声明(数据类型与属性需要与npu算子对应),在onnx转为om时,atc工具的onnx插件如果支持该算子,atc工具会根据这个声明找到该算子npu的实现。 查看npu的adaptive_avg_pool2d声明: ``` @@ -93,7 +97,7 @@ def adaptive_avg_pool_op(x, output_size): x = F.adaptive_avg_pool2d(input, output_size=bin_size)替换为x = adaptive_avg_pool_op(input, (bin_size, bin_size)) ``` -### FAQ1、运行atc或benchmark命令时报错找不到atc命令或找不到ascend动态库 +### FAQ13、运行atc或benchmark命令时报错找不到atc命令或找不到ascend动态库 * 现象描述 -- Gitee From e42ad8bc00a6301dabf9139119a8d208a3a9f8a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E4=B8=9A=E5=BA=86?= Date: Thu, 27 May 2021 15:34:14 +0800 Subject: [PATCH 05/17] =?UTF-8?q?update=20AscendPytorch=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E6=8E=A8=E7=90=86=E4=BC=97=E6=99=BAFAQ.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...6\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" "b/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" index 30f6eef..fcc347e 100644 --- "a/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" +++ "b/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" @@ -67,7 +67,7 @@ export ASCEND_GLOBAL_LOG_LEVEL=0 #debug 0 --> info 1 --> warning 2 --> error 3 ``` ### FAQ12、模型代码包含不能导出onnx的算子时如何解决-等价替换为自定义算子? -pytorch代码的adaptive_avg_pool2d目前onnx还不支持,所以导出onnx时报错,使用avg_pool2d替换adaptive_avg_pool2d,但当input最后两维不是output的整数倍时,adaptive_avg_pool2d不能完全等价替换为avg_pool2d,而npu有adaptive_avg_pool2d算子的实现,所以将adaptive_avg_pool2d改为自定义算子导出onnx,自定义算子不需要具体实现代码(因此导出的onnx不能使用onnxruntime进行推理,还需要将pytorch的_check_onnx_proto(proto)改为pass去除导出onnx时进行检查),只要自定义算子返回的输出shape与原算子输出的shape保持一致即可,相当于onnx只包含这个算子的声明(数据类型与属性需要与npu算子对应),在onnx转为om时,atc工具的onnx插件如果支持该算子,atc工具会根据这个声明找到该算子npu的实现。 +pytorch代码的adaptive_avg_pool2d目前onnx还不支持,所以导出onnx时报错,尝试使用avg_pool2d替换adaptive_avg_pool2d,但当input最后两维不是output的整数倍时,adaptive_avg_pool2d不能完全等价替换为avg_pool2d,而npu有adaptive_avg_pool2d算子的实现,所以将adaptive_avg_pool2d改为自定义算子导出onnx,自定义算子不需要具体实现代码(因此导出的onnx不能使用onnxruntime进行推理,还需要将pytorch的_check_onnx_proto(proto)改为pass去除导出onnx时进行检查),只要自定义算子返回的输出shape与原算子输出的shape保持一致即可,相当于onnx只包含这个算子的声明(数据类型与属性需要与npu算子对应),在onnx转为om时,atc工具的onnx插件如果支持该算子,atc工具会根据这个声明找到该算子npu的实现。 查看npu的adaptive_avg_pool2d声明: ``` REG_OP(AdaptiveAvgPool2d) -- Gitee From 300300444029ac8b43ebe8ed5c1d896abad67657 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E4=B8=9A=E5=BA=86?= Date: Thu, 27 May 2021 15:37:38 +0800 Subject: [PATCH 06/17] =?UTF-8?q?update=20AscendPytorch=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E6=8E=A8=E7=90=86=E4=BC=97=E6=99=BAFAQ.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...6\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" "b/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" index fcc347e..0957479 100644 --- "a/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" +++ "b/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" @@ -67,7 +67,7 @@ export ASCEND_GLOBAL_LOG_LEVEL=0 #debug 0 --> info 1 --> warning 2 --> error 3 ``` ### FAQ12、模型代码包含不能导出onnx的算子时如何解决-等价替换为自定义算子? -pytorch代码的adaptive_avg_pool2d目前onnx还不支持,所以导出onnx时报错,尝试使用avg_pool2d替换adaptive_avg_pool2d,但当input最后两维不是output的整数倍时,adaptive_avg_pool2d不能完全等价替换为avg_pool2d,而npu有adaptive_avg_pool2d算子的实现,所以将adaptive_avg_pool2d改为自定义算子导出onnx,自定义算子不需要具体实现代码(因此导出的onnx不能使用onnxruntime进行推理,还需要将pytorch的_check_onnx_proto(proto)改为pass去除导出onnx时进行检查),只要自定义算子返回的输出shape与原算子输出的shape保持一致即可,相当于onnx只包含这个算子的声明(数据类型与属性需要与npu算子对应),在onnx转为om时,atc工具的onnx插件如果支持该算子,atc工具会根据这个声明找到该算子npu的实现。 +pytorch代码的adaptive_avg_pool2d目前onnx还不支持,所以导出onnx时报错,尝试使用avg_pool2d替换adaptive_avg_pool2d,但当input最后两维不是output的整数倍时,adaptive_avg_pool2d不能完全等价替换为avg_pool2d,而npu有adaptive_avg_pool2d算子的实现,所以将adaptive_avg_pool2d改为自定义算子导出onnx,自定义算子不需要具体实现代码(因此导出的onnx不能使用onnxruntime进行推理,还需要将pytorch的_check_onnx_proto(proto)改为pass去除导出onnx时进行检查),只要自定义算子返回的输出shape与原算子输出的shape保持一致即可,相当于onnx只包含这个算子的声明(数据类型与属性需要与npu版算子对应),在onnx转为om时,atc工具的onnx插件如果支持该算子,atc工具会根据这个声明找到该算子npu的实现。 查看npu的adaptive_avg_pool2d声明: ``` REG_OP(AdaptiveAvgPool2d) -- Gitee From c59dd14d95937af3c592751606bd2e268230917e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E4=B8=9A=E5=BA=86?= Date: Thu, 27 May 2021 15:41:59 +0800 Subject: [PATCH 07/17] =?UTF-8?q?update=20AscendPytorch=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E6=8E=A8=E7=90=86=E4=BC=97=E6=99=BAFAQ.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...6\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" "b/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" index 0957479..be80cbe 100644 --- "a/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" +++ "b/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" @@ -67,7 +67,7 @@ export ASCEND_GLOBAL_LOG_LEVEL=0 #debug 0 --> info 1 --> warning 2 --> error 3 ``` ### FAQ12、模型代码包含不能导出onnx的算子时如何解决-等价替换为自定义算子? -pytorch代码的adaptive_avg_pool2d目前onnx还不支持,所以导出onnx时报错,尝试使用avg_pool2d替换adaptive_avg_pool2d,但当input最后两维不是output的整数倍时,adaptive_avg_pool2d不能完全等价替换为avg_pool2d,而npu有adaptive_avg_pool2d算子的实现,所以将adaptive_avg_pool2d改为自定义算子导出onnx,自定义算子不需要具体实现代码(因此导出的onnx不能使用onnxruntime进行推理,还需要将pytorch的_check_onnx_proto(proto)改为pass去除导出onnx时进行检查),只要自定义算子返回的输出shape与原算子输出的shape保持一致即可,相当于onnx只包含这个算子的声明(数据类型与属性需要与npu版算子对应),在onnx转为om时,atc工具的onnx插件如果支持该算子,atc工具会根据这个声明找到该算子npu的实现。 +pytorch代码的adaptive_avg_pool2d目前onnx还不支持,所以导出onnx时报错,解决方案是尝试使用avg_pool2d替换adaptive_avg_pool2d,但当input最后两维不是output的整数倍时,adaptive_avg_pool2d不能完全等价替换为avg_pool2d,而npu有adaptive_avg_pool2d算子的实现,所以解决方案变为将adaptive_avg_pool2d改为自定义算子导出onnx,自定义算子不需要具体实现代码(因此导出的onnx不能使用onnxruntime进行推理,还需要将pytorch的_check_onnx_proto(proto)改为pass去除导出onnx时进行检查),只要自定义算子返回的输出shape与原算子输出的shape保持一致即可,相当于onnx只包含这个算子的声明(数据类型与属性需要与npu版算子对应),在onnx转为om时,atc工具的onnx插件如果支持该算子,atc工具会根据这个声明找到该算子npu的实现。 查看npu的adaptive_avg_pool2d声明: ``` REG_OP(AdaptiveAvgPool2d) -- Gitee From 91ea70323d3217a59e4d78037570e608795ae4af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E4=B8=9A=E5=BA=86?= Date: Thu, 27 May 2021 15:44:10 +0800 Subject: [PATCH 08/17] =?UTF-8?q?update=20AscendPytorch=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E6=8E=A8=E7=90=86=E4=BC=97=E6=99=BAFAQ.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...347\220\206\344\274\227\346\231\272FAQ.md" | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git "a/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" "b/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" index be80cbe..0c21161 100644 --- "a/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" +++ "b/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" @@ -114,19 +114,19 @@ or * 处理方法 设置环境变量: -``` -export install_path=/usr/local/Ascend/ascend-toolkit/latest -export PATH=/usr/local/python3.7.5/bin:${install_path}/atc/ccec_compiler/bin:${install_path}/atc/bin:$PATH -export PYTHONPATH=${install_path}/atc/python/site-packages:$PYTHONPATH -export LD_LIBRARY_PATH=${install_path}/atc/lib64:${install_path}/acllib/lib64:$LD_LIBRARY_PATH -export ASCEND_OPP_PATH=${install_path}/opp -export ASCEND_AICPU_PATH=/usr/local/Ascend/ascend-toolkit/latest -``` + ``` + export install_path=/usr/local/Ascend/ascend-toolkit/latest + export PATH=/usr/local/python3.7.5/bin:${install_path}/atc/ccec_compiler/bin:${install_path}/atc/bin:$PATH + export PYTHONPATH=${install_path}/atc/python/site-packages:$PYTHONPATH + export LD_LIBRARY_PATH=${install_path}/atc/lib64:${install_path}/acllib/lib64:$LD_LIBRARY_PATH + 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' -``` + ``` + 修改/etc/sudoers将Defaults env_reset改成Defaults !env_reset + 修改/etc/bash.bashrc添加alias sudo='sudo env PATH=$PATH LD_LIBRARY_PATH=$LD_LIBRARY_PATH' + ``` ## [2.2 NPU模型精度调试常见问题FAQ](#22-NPU模型精度调试常见问题FAQ) -- Gitee From 2768bf830a0bbbf2cd6ec3e015dc16b092f9fbde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E4=B8=9A=E5=BA=86?= Date: Thu, 27 May 2021 15:44:37 +0800 Subject: [PATCH 09/17] =?UTF-8?q?update=20AscendPytorch=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E6=8E=A8=E7=90=86=E4=BC=97=E6=99=BAFAQ.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\216\250\347\220\206\344\274\227\346\231\272FAQ.md" | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git "a/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" "b/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" index 0c21161..82c8b31 100644 --- "a/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" +++ "b/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" @@ -101,11 +101,11 @@ x = F.adaptive_avg_pool2d(input, output_size=bin_size)替换为x = adaptive_avg_ * 现象描述 -``` -Command 'atc' not found, but can be installed with: -or -./benchmark.x86_64: error while loading shared libraries: libascendcl.so: cannot open shared object file: No such file or directory -``` + ``` + Command 'atc' not found, but can be installed with: + or + ./benchmark.x86_64: error while loading shared libraries: libascendcl.so: cannot open shared object file: No such file or directory + ``` * 原因分析 -- Gitee From 669b01983f2d8e6eea960ce7935435d6ab748966 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E4=B8=9A=E5=BA=86?= Date: Thu, 27 May 2021 15:45:00 +0800 Subject: [PATCH 10/17] =?UTF-8?q?update=20AscendPytorch=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E6=8E=A8=E7=90=86=E4=BC=97=E6=99=BAFAQ.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\347\220\206\344\274\227\346\231\272FAQ.md" | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git "a/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" "b/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" index 82c8b31..d4d9c3c 100644 --- "a/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" +++ "b/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" @@ -131,17 +131,17 @@ x = F.adaptive_avg_pool2d(input, output_size=bin_size)替换为x = adaptive_avg_ ## [2.2 NPU模型精度调试常见问题FAQ](#22-NPU模型精度调试常见问题FAQ) - 1.前后处理与模型参数是否与开源代码仓的推理使用的完全一致 - 2.使用开源代码仓提供的测评pth的脚本测试pth在线推理精度是否达标,可以添加算子输出结果的调试打印 - 3.如果导出的onnx可以推理,确定onnx精度是否达标 - 4.如果是om算子导致精度下降,则模型转换时指定算子为om的输出节点,然后与pth在线推理时该算子(开启verbose导出onnx时会打印算子对应的py文件代码行)的输出对比,查看是否一致 - 5.如果某算子导致精度下降问题,尝试是否可以修改模型使用其它方法替换掉该算子,然后看精度是否达标,如果遇到实在规避不了的算子问题则需要在modelzoo提issue -参考《推理指导》的4.5 maskrcnn端到端推理指导案例 + 1.前后处理与模型参数是否与开源代码仓的推理使用的完全一致 + 2.使用开源代码仓提供的测评pth的脚本测试pth在线推理精度是否达标,可以添加算子输出结果的调试打印 + 3.如果导出的onnx可以推理,确定onnx精度是否达标 + 4.如果是om算子导致精度下降,则模型转换时指定算子为om的输出节点,然后与pth在线推理时该算子(开启verbose导出onnx时会打印算子对应的py文件代码行)的输出对比,查看是否一致 + 5.如果某算子导致精度下降问题,尝试是否可以修改模型使用其它方法替换掉该算子,然后看精度是否达标,如果遇到实在规避不了的算子问题则需要在modelzoo提issue + 参考《推理指导》的4.5 maskrcnn端到端推理指导案例 ## [2.3 NPU模型性能优化常见问题FAQ](#22-NPU模型性能优化常见问题FAQ) - 1.优化修改onnx模型去掉影响性能的冗余pad,用Ascend atc的相关优化选项尝试一下,尝试使用最近邻替换双线性的resize重新训练,降低图片分辨率等使性能达标。 - 2.对于算子导致的性能问题,需要使用profiling分析定位引起性能下降的原因,具体到引起性能下降的算子。优先修改模型代码以使其选择性能好的npu算子替换性能差的npu算子使性能达标,然后在modelzoo上提issue,等修复版本发布后再重测性能,继续优化。 - 3.需要交付profiling性能数据,对经过上述方法性能可以达标的模型,在交付文档中写明问题原因与达标需要执行的操作;对经过上述方法性能仍不达标的模型,在交付的README.md文档中写明问题原因与简要的定位过程。 + 1.优化修改onnx模型去掉影响性能的冗余pad,用Ascend atc的相关优化选项尝试一下,尝试使用最近邻替换双线性的resize重新训练,降低图片分辨率等使性能达标。 + 2.对于算子导致的性能问题,需要使用profiling分析定位引起性能下降的原因,具体到引起性能下降的算子。优先修改模型代码以使其选择性能好的npu算子替换性能差的npu算子使性能达标,然后在modelzoo上提issue,等修复版本发布后再重测性能,继续优化。 + 3.需要交付profiling性能数据,对经过上述方法性能可以达标的模型,在交付文档中写明问题原因与达标需要执行的操作;对经过上述方法性能仍不达标的模型,在交付的README.md文档中写明问题原因与简要的定位过程。 -- Gitee From ef8de71418b6cb20492e365bcdec2bc725f11631 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E4=B8=9A=E5=BA=86?= Date: Thu, 27 May 2021 15:45:59 +0800 Subject: [PATCH 11/17] =?UTF-8?q?update=20AscendPytorch=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E6=8E=A8=E7=90=86=E4=BC=97=E6=99=BAFAQ.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\347\220\206\344\274\227\346\231\272FAQ.md" | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git "a/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" "b/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" index d4d9c3c..82c8b31 100644 --- "a/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" +++ "b/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" @@ -131,17 +131,17 @@ x = F.adaptive_avg_pool2d(input, output_size=bin_size)替换为x = adaptive_avg_ ## [2.2 NPU模型精度调试常见问题FAQ](#22-NPU模型精度调试常见问题FAQ) - 1.前后处理与模型参数是否与开源代码仓的推理使用的完全一致 - 2.使用开源代码仓提供的测评pth的脚本测试pth在线推理精度是否达标,可以添加算子输出结果的调试打印 - 3.如果导出的onnx可以推理,确定onnx精度是否达标 - 4.如果是om算子导致精度下降,则模型转换时指定算子为om的输出节点,然后与pth在线推理时该算子(开启verbose导出onnx时会打印算子对应的py文件代码行)的输出对比,查看是否一致 - 5.如果某算子导致精度下降问题,尝试是否可以修改模型使用其它方法替换掉该算子,然后看精度是否达标,如果遇到实在规避不了的算子问题则需要在modelzoo提issue - 参考《推理指导》的4.5 maskrcnn端到端推理指导案例 + 1.前后处理与模型参数是否与开源代码仓的推理使用的完全一致 + 2.使用开源代码仓提供的测评pth的脚本测试pth在线推理精度是否达标,可以添加算子输出结果的调试打印 + 3.如果导出的onnx可以推理,确定onnx精度是否达标 + 4.如果是om算子导致精度下降,则模型转换时指定算子为om的输出节点,然后与pth在线推理时该算子(开启verbose导出onnx时会打印算子对应的py文件代码行)的输出对比,查看是否一致 + 5.如果某算子导致精度下降问题,尝试是否可以修改模型使用其它方法替换掉该算子,然后看精度是否达标,如果遇到实在规避不了的算子问题则需要在modelzoo提issue +参考《推理指导》的4.5 maskrcnn端到端推理指导案例 ## [2.3 NPU模型性能优化常见问题FAQ](#22-NPU模型性能优化常见问题FAQ) - 1.优化修改onnx模型去掉影响性能的冗余pad,用Ascend atc的相关优化选项尝试一下,尝试使用最近邻替换双线性的resize重新训练,降低图片分辨率等使性能达标。 - 2.对于算子导致的性能问题,需要使用profiling分析定位引起性能下降的原因,具体到引起性能下降的算子。优先修改模型代码以使其选择性能好的npu算子替换性能差的npu算子使性能达标,然后在modelzoo上提issue,等修复版本发布后再重测性能,继续优化。 - 3.需要交付profiling性能数据,对经过上述方法性能可以达标的模型,在交付文档中写明问题原因与达标需要执行的操作;对经过上述方法性能仍不达标的模型,在交付的README.md文档中写明问题原因与简要的定位过程。 + 1.优化修改onnx模型去掉影响性能的冗余pad,用Ascend atc的相关优化选项尝试一下,尝试使用最近邻替换双线性的resize重新训练,降低图片分辨率等使性能达标。 + 2.对于算子导致的性能问题,需要使用profiling分析定位引起性能下降的原因,具体到引起性能下降的算子。优先修改模型代码以使其选择性能好的npu算子替换性能差的npu算子使性能达标,然后在modelzoo上提issue,等修复版本发布后再重测性能,继续优化。 + 3.需要交付profiling性能数据,对经过上述方法性能可以达标的模型,在交付文档中写明问题原因与达标需要执行的操作;对经过上述方法性能仍不达标的模型,在交付的README.md文档中写明问题原因与简要的定位过程。 -- Gitee From eabbf8b12665964a99321d96d373bb4108061d1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E4=B8=9A=E5=BA=86?= Date: Thu, 27 May 2021 16:56:02 +0800 Subject: [PATCH 12/17] =?UTF-8?q?update=20AscendPytorch=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E6=8E=A8=E7=90=86=E4=BC=97=E6=99=BAFAQ.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...6\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" "b/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" index 82c8b31..20341be 100644 --- "a/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" +++ "b/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" @@ -25,7 +25,7 @@ 模型推理与训练是独立的事情,推理比训练简单一些,推理是使用模型开源代码仓提供的权重在310上执行推理,一般在训练等待结果的时间内可以同步做推理 ### FAQ4、推理工作量? -做之前需要先熟悉相关工作,然后进行模型推理,如果精度性能不达标就需要花费不少时间了,模型推理到验收还有检视整改测试资料文档的工作,不是三天就能做完模型推理,从开始到验收完成整个周期规划了一个月的时间 +做之前需要先熟悉相关工作,然后进行模型推理,如果精度性能不达标就需要花费不少时间了,模型推理到验收还有检视整改测试资料文档的工作,不是三天就能做完模型推理,从开始到验收完成整个周期规划了1个月~1.5个月的时间 ### FAQ5、推理过程中哪些工作在310服务器上做,哪些在t4服务器上做,哪些在cpu上做? 前后处理与转onnx在cpu上做即可,转om模型和benchmark推理时的命令在装有ascend 310的服务器上执行即可,因为两个命令依赖Ascend cann包提供的编译工具与npu算子库,gpu性能数据需要在装有t4卡的服务器上测 -- Gitee From 7961eeb9863708c14fcc9e7ff55bc0db3a76592a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E4=B8=9A=E5=BA=86?= Date: Fri, 28 May 2021 11:03:23 +0800 Subject: [PATCH 13/17] =?UTF-8?q?update=20AscendPytorch=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E6=8E=A8=E7=90=86=E4=BC=97=E6=99=BAFAQ.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...13\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git "a/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" "b/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" index 20341be..35f39e4 100644 --- "a/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" +++ "b/AscendPytorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272FAQ.md" @@ -22,7 +22,7 @@ 提供的装有Ascend 310卡的服务器已经安装好ascend的包,服务器home/common/resnext50的样例是可以运行的 ### FAQ3、推理与训练的关系? -模型推理与训练是独立的事情,推理比训练简单一些,推理是使用模型开源代码仓提供的权重在310上执行推理,一般在训练等待结果的时间内可以同步做推理 +模型推理与训练是独立的事情,推理比训练简单一些,推理是使用Ascend 910训练的权重或模型开源代码仓提供的权重在310上执行推理,一般在训练等待结果的时间内可以同步做推理 ### FAQ4、推理工作量? 做之前需要先熟悉相关工作,然后进行模型推理,如果精度性能不达标就需要花费不少时间了,模型推理到验收还有检视整改测试资料文档的工作,不是三天就能做完模型推理,从开始到验收完成整个周期规划了1个月~1.5个月的时间 @@ -30,7 +30,8 @@ ### FAQ5、推理过程中哪些工作在310服务器上做,哪些在t4服务器上做,哪些在cpu上做? 前后处理与转onnx在cpu上做即可,转om模型和benchmark推理时的命令在装有ascend 310的服务器上执行即可,因为两个命令依赖Ascend cann包提供的编译工具与npu算子库,gpu性能数据需要在装有t4卡的服务器上测 -### FAQ6、开源代码仓预训练权重文件的问题? +### FAQ6、预训练权重文件选择的问题? +如果已经有了ascend 910训练提供的权重文件,那么优先使用910训练提供的权重文件做离线推理,精度与910训练出的精度对齐 如果开源代码仓提供了多个权重文件,使用常用的基础的那个配置的权重文件即可,并且模型支持多任务时只需要针对一个任务做推理 如果开源代码仓没有提供pth权重文件,则需要该模型的训练同学提供pth权重文件,或者使用开源代码仓训练脚本简单训练一个pth权重文件,然后对比om精度与该pth权重文件的精度 -- Gitee From 503b48e8dafe361cc11a8011b97565a134aac3dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E4=B8=9A=E5=BA=86?= Date: Fri, 28 May 2021 11:09:27 +0800 Subject: [PATCH 14/17] =?UTF-8?q?update=20AscendPyTorch=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E4=BC=97=E6=99=BA=E6=96=87=E6=A1=A3-=E7=A6=BB=E7=BA=BF?= =?UTF-8?q?=E6=8E=A8=E7=90=86.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...1\243-\347\246\273\347\272\277\346\216\250\347\220\206.md" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/AscendPyTorch\346\250\241\345\236\213\344\274\227\346\231\272\346\226\207\346\241\243-\347\246\273\347\272\277\346\216\250\347\220\206.md" "b/AscendPyTorch\346\250\241\345\236\213\344\274\227\346\231\272\346\226\207\346\241\243-\347\246\273\347\272\277\346\216\250\347\220\206.md" index b59263f..a0b2338 100644 --- "a/AscendPyTorch\346\250\241\345\236\213\344\274\227\346\231\272\346\226\207\346\241\243-\347\246\273\347\272\277\346\216\250\347\220\206.md" +++ "b/AscendPyTorch\346\250\241\345\236\213\344\274\227\346\231\272\346\226\207\346\241\243-\347\246\273\347\272\277\346\216\250\347\220\206.md" @@ -1193,7 +1193,7 @@ https://gitee.com/ascend/tools/tree/master/msquickcmp ### 6.2 交付标准与规范 - 交付标准 - 精度: - om模型推理的精度与PyTorch预训练模型github代码仓README.md或官网文档公布的精度对比,精度下降不超过1%则认为精度达标 + om模型推理的精度与910训练出的权重精度或PyTorch预训练模型github代码仓README.md或官网文档公布的精度对比,精度下降不超过1%则认为精度达标 - 性能: Ascend benchmark工具在数据集上推理测的NPU 310单颗device吞吐率乘以4颗即单卡吞吐率大于TensorRT工具测的GPU T4单卡吞吐率则认为性能达标 如若交付要求中对性能有要求(易模型),310的性能必须高于t4的性能 @@ -1212,7 +1212,7 @@ https://gitee.com/ascend/tools/tree/master/msquickcmp 说明: ``` - 1.如果开源代码仓提供了多个权重文件,使用常用的基础的那个配置的权重文件即可;如果开源代码仓没有提供pth权重文件,则需要该模型的训练同学提供pth权重文件,或者使用开源代码仓训练脚本简单训练一个pth权重文件,然后对比om精度与该pth权重文件的精度 + 1.如果已经有了ascend 910训练提供的权重文件,那么优先使用910训练提供的权重文件做离线推理,精度与910训练出的精度对齐;如果开源代码仓提供了多个权重文件,使用常用的基础的那个配置的权重文件即可;如果开源代码仓没有提供pth权重文件,则需要该模型的训练同学提供pth权重文件,或者使用开源代码仓训练脚本简单训练一个pth权重文件,然后对比om精度与该pth权重文件的精度 2.由于随机数可能不能模拟数据分布,Ascend benchmark工具纯推理功能测的有些模型性能数据可能不太准,所以模型测试脚本与提交代码的描述中的性能数据以Ascend benchmark在数据集上推理时得到性能数据为准 3.如果模型支持多batch,需要测试batch1,4,8,16,32的精度与性能,写在README.md里,模型测试脚本与提交代码的描述只需提供bs1和bs16的精度性能数据 4.如果导出的onnx因包含自定义算子等而不能推理,则在t4上运行开源评测脚本测试pth模型在线推理性能 -- Gitee From 7af3f2c36387b37ef64b2c00cc60a8171e1c72d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E4=B8=9A=E5=BA=86?= Date: Fri, 28 May 2021 11:13:43 +0800 Subject: [PATCH 15/17] =?UTF-8?q?update=20AscendPyTorch=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E4=BC=97=E6=99=BA=E6=96=87=E6=A1=A3-=E7=A6=BB=E7=BA=BF?= =?UTF-8?q?=E6=8E=A8=E7=90=86.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...241\243-\347\246\273\347\272\277\346\216\250\347\220\206.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/AscendPyTorch\346\250\241\345\236\213\344\274\227\346\231\272\346\226\207\346\241\243-\347\246\273\347\272\277\346\216\250\347\220\206.md" "b/AscendPyTorch\346\250\241\345\236\213\344\274\227\346\231\272\346\226\207\346\241\243-\347\246\273\347\272\277\346\216\250\347\220\206.md" index a0b2338..a5ecdc4 100644 --- "a/AscendPyTorch\346\250\241\345\236\213\344\274\227\346\231\272\346\226\207\346\241\243-\347\246\273\347\272\277\346\216\250\347\220\206.md" +++ "b/AscendPyTorch\346\250\241\345\236\213\344\274\227\346\231\272\346\226\207\346\241\243-\347\246\273\347\272\277\346\216\250\347\220\206.md" @@ -1193,7 +1193,7 @@ https://gitee.com/ascend/tools/tree/master/msquickcmp ### 6.2 交付标准与规范 - 交付标准 - 精度: - om模型推理的精度与910训练出的权重精度或PyTorch预训练模型github代码仓README.md或官网文档公布的精度对比,精度下降不超过1%则认为精度达标 + om模型推理的精度与Ascend 910训练出的权重精度或PyTorch预训练模型github代码仓README.md或官网文档公布的精度对比,精度下降不超过1%则认为精度达标 - 性能: Ascend benchmark工具在数据集上推理测的NPU 310单颗device吞吐率乘以4颗即单卡吞吐率大于TensorRT工具测的GPU T4单卡吞吐率则认为性能达标 如若交付要求中对性能有要求(易模型),310的性能必须高于t4的性能 -- Gitee From 8714d1497594f8788b3ee1ad9071efff59f122f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E4=B8=9A=E5=BA=86?= Date: Fri, 28 May 2021 11:28:52 +0800 Subject: [PATCH 16/17] =?UTF-8?q?update=20AscendPyTorch=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E4=BC=97=E6=99=BA=E6=96=87=E6=A1=A3-=E7=A6=BB=E7=BA=BF?= =?UTF-8?q?=E6=8E=A8=E7=90=86.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...1\243-\347\246\273\347\272\277\346\216\250\347\220\206.md" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/AscendPyTorch\346\250\241\345\236\213\344\274\227\346\231\272\346\226\207\346\241\243-\347\246\273\347\272\277\346\216\250\347\220\206.md" "b/AscendPyTorch\346\250\241\345\236\213\344\274\227\346\231\272\346\226\207\346\241\243-\347\246\273\347\272\277\346\216\250\347\220\206.md" index a5ecdc4..208868c 100644 --- "a/AscendPyTorch\346\250\241\345\236\213\344\274\227\346\231\272\346\226\207\346\241\243-\347\246\273\347\272\277\346\216\250\347\220\206.md" +++ "b/AscendPyTorch\346\250\241\345\236\213\344\274\227\346\231\272\346\226\207\346\241\243-\347\246\273\347\272\277\346\216\250\347\220\206.md" @@ -51,12 +51,12 @@ - 精度性能要求 Ascend PyTorch模型离线推理目标是开源代码仓的pytorch模型在npu Ascend 310卡上离线推理的精度与gpu T4卡上推理精度一致,推理性能超过T4。 -由开源PyTorch模型转换的Ascend om模型离线推理的精度与开源PyTorch预训练模型在github代码仓或官网公布的精度对比,精度下降不超过1%则认为精度达标; +由开源PyTorch模型转换的Ascend om模型离线推理的精度与开源PyTorch预训练模型在github代码仓或官网公布的精度对比,精度下降不超过1%则认为精度达标(如果已经有了ascend 910训练提供的权重文件,那么优先使用910训练提供的权重文件做离线推理,精度与910训练出的精度对齐); npu 310单颗芯片上模型推理性能的吞吐率乘以4颗即单卡吞吐率大于gpu T4单卡上模型推理性能的吞吐率则认为性能达标 - Ascend PyTorch模型端到端推理流程 -首先在github上找到PyTorch实现的引用多包含预训练的模型代码仓,参考代码仓预处理模型加载的代码加载pth并转换为onnx模型,参考代码仓预训练模型数据预处理代码对用来评价模型精度的数据集进行预处理,使用昇腾benchmark工具执行om模型的离线推理,最后参考代码仓数据后处理代码进行后处理,统计出om模型的推理精度。使用benchmark工具测试om推理性能,对性能不达标的om模型,使用profiling工具分析,通过模型调优,算子开发与算子融合等方法实现达标 +首先在github上找到PyTorch实现的引用多包含预训练的模型代码仓(如果已经有了ascend 910训练提供的权重文件,那么优先使用910训练提供的权重文件做离线推理,精度与910训练出的精度对齐),参考代码仓预处理模型加载的代码加载pth并转换为onnx模型,参考代码仓预训练模型数据预处理代码对用来评价模型精度的数据集进行预处理,使用昇腾benchmark工具执行om模型的离线推理,最后参考代码仓数据后处理代码进行后处理,统计出om模型的推理精度。使用benchmark工具测试om推理性能,对性能不达标的om模型,使用profiling工具分析,通过模型调优,算子开发与算子融合等方法实现达标 下图为Ascend PyTorch模型离线推理流程: ![](figures/pyotrch_offline_infer.png) -- Gitee From b5038eae928552c9c4fbc5c4f93e624b03e67265 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E4=B8=9A=E5=BA=86?= Date: Fri, 28 May 2021 11:34:53 +0800 Subject: [PATCH 17/17] =?UTF-8?q?update=20AscendPyTorch=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E4=BC=97=E6=99=BA=E6=96=87=E6=A1=A3-=E7=A6=BB=E7=BA=BF?= =?UTF-8?q?=E6=8E=A8=E7=90=86.md.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...1\243-\347\246\273\347\272\277\346\216\250\347\220\206.md" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/AscendPyTorch\346\250\241\345\236\213\344\274\227\346\231\272\346\226\207\346\241\243-\347\246\273\347\272\277\346\216\250\347\220\206.md" "b/AscendPyTorch\346\250\241\345\236\213\344\274\227\346\231\272\346\226\207\346\241\243-\347\246\273\347\272\277\346\216\250\347\220\206.md" index 208868c..a5ecdc4 100644 --- "a/AscendPyTorch\346\250\241\345\236\213\344\274\227\346\231\272\346\226\207\346\241\243-\347\246\273\347\272\277\346\216\250\347\220\206.md" +++ "b/AscendPyTorch\346\250\241\345\236\213\344\274\227\346\231\272\346\226\207\346\241\243-\347\246\273\347\272\277\346\216\250\347\220\206.md" @@ -51,12 +51,12 @@ - 精度性能要求 Ascend PyTorch模型离线推理目标是开源代码仓的pytorch模型在npu Ascend 310卡上离线推理的精度与gpu T4卡上推理精度一致,推理性能超过T4。 -由开源PyTorch模型转换的Ascend om模型离线推理的精度与开源PyTorch预训练模型在github代码仓或官网公布的精度对比,精度下降不超过1%则认为精度达标(如果已经有了ascend 910训练提供的权重文件,那么优先使用910训练提供的权重文件做离线推理,精度与910训练出的精度对齐); +由开源PyTorch模型转换的Ascend om模型离线推理的精度与开源PyTorch预训练模型在github代码仓或官网公布的精度对比,精度下降不超过1%则认为精度达标; npu 310单颗芯片上模型推理性能的吞吐率乘以4颗即单卡吞吐率大于gpu T4单卡上模型推理性能的吞吐率则认为性能达标 - Ascend PyTorch模型端到端推理流程 -首先在github上找到PyTorch实现的引用多包含预训练的模型代码仓(如果已经有了ascend 910训练提供的权重文件,那么优先使用910训练提供的权重文件做离线推理,精度与910训练出的精度对齐),参考代码仓预处理模型加载的代码加载pth并转换为onnx模型,参考代码仓预训练模型数据预处理代码对用来评价模型精度的数据集进行预处理,使用昇腾benchmark工具执行om模型的离线推理,最后参考代码仓数据后处理代码进行后处理,统计出om模型的推理精度。使用benchmark工具测试om推理性能,对性能不达标的om模型,使用profiling工具分析,通过模型调优,算子开发与算子融合等方法实现达标 +首先在github上找到PyTorch实现的引用多包含预训练的模型代码仓,参考代码仓预处理模型加载的代码加载pth并转换为onnx模型,参考代码仓预训练模型数据预处理代码对用来评价模型精度的数据集进行预处理,使用昇腾benchmark工具执行om模型的离线推理,最后参考代码仓数据后处理代码进行后处理,统计出om模型的推理精度。使用benchmark工具测试om推理性能,对性能不达标的om模型,使用profiling工具分析,通过模型调优,算子开发与算子融合等方法实现达标 下图为Ascend PyTorch模型离线推理流程: ![](figures/pyotrch_offline_infer.png) -- Gitee