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 1e5b9b4e463d137d5802ab9abd209683263fedf0..5629787168ea873b61248045ad587e9d297ee707 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" @@ -548,7 +548,6 @@ gpu T4是4个device并行执行的结果,mean是时延(tensorrt的时延是b - CANN C10 版本profiling使用方法 ``` 以root用户运行ada:kill -9 $(pidof ada) && /usr/local/Ascend/driver/tools/ada -... 新建/home/HwHiAiUser/test/run文件,内容如下: #! /bin/bash export install_path=/usr/local/Ascend/ascend-toolkit/latest @@ -1130,6 +1129,9 @@ profiling也会统计每个算子耗时,结合使用netron查看onnx模型结 4.如果是om算子导致精度下降,则模型转换时指定算子为om的输出节点,然后与pth在线推理时该算子(开启verbose导出onnx时会打印算子对应的py文件代码行)的输出对比,查看是否一致 5.如果某算子导致精度下降问题,尝试是否可以修改模型使用其它方法替换掉该算子,然后看精度是否达标,如果遇到实在规避不了的算子问题则需要在modelzoo提issue +精度对比工具: +https://gitee.com/ascend/tools/tree/master/msquickcmp + ## 5 深度学习指导 ### 5.1 书籍推荐 ``` @@ -1190,7 +1192,10 @@ profiling也会统计每个算子耗时,结合使用netron查看onnx模型结 - 精度: om模型推理的精度与PyTorch预训练模型github代码仓README.md或官网文档公布的精度对比,精度下降不超过1%则认为精度达标 - 性能: - Ascend benchmark工具在数据集上推理测的NPU 310单颗device吞吐率乘以4颗即单卡吞吐率大于TensorRT工具测的GPU T4单卡吞吐率则认为性能达标 + Ascend benchmark工具在数据集上推理测的NPU 310单颗device吞吐率乘以4颗即单卡吞吐率大于TensorRT工具测的GPU T4单卡吞吐率则认为性能达标 + 如若交付要求中对性能有要求(易模型),310的性能必须高于t4的性能 + 如若交付要求中没有对性能有要求(中难模型),310上推理需尽可能进行性能优化 + 若无法达到,则需要向华为方提交性能已达瓶颈的认证申请,华为方将定期组织专家组对申请模型进行评审,通过评审的模型允许以不高于t4的性能进行交付 - 脚本: 代码符合pep8规范; 脚本命名格式需统一,文件名含模型名时模型名用小写,模型名含多个字符串时用-连接; @@ -1204,12 +1209,12 @@ profiling也会统计每个算子耗时,结合使用netron查看onnx模型结 说明: ``` - 1.如果开源代码仓没有提供pth权重文件,则需要该模型的训练同学提供pth权重文件,或者使用开源代码仓训练脚本简单训练一个pth权重文件,然后对比om精度与该pth权重文件的精度 + 1.如果开源代码仓提供了多个权重文件,使用常用的基础的那个配置的权重文件即可;如果开源代码仓没有提供pth权重文件,则需要该模型的训练同学提供pth权重文件,或者使用开源代码仓训练脚本简单训练一个pth权重文件,然后对比om精度与该pth权重文件的精度 2.由于随机数可能不能模拟数据分布,Ascend benchmark工具纯推理功能测的有些模型性能数据可能不太准,所以模型测试脚本与提交代码的描述中的性能数据以Ascend benchmark在数据集上推理时得到性能数据为准 3.如果模型支持多batch,需要测试batch1,4,8,16,32的精度与性能,写在模型名称_Onnx端到端推理指导.md里,模型测试脚本与提交代码的描述只需提供bs1和bs16的精度性能数据 4.如果导出的onnx因包含自定义算子等而不能推理,则在t4上运行开源评测脚本测试pth模型在线推理性能 5.对于性能不达标的模型,需要进行如下工作: - 1)用Ascend atc的相关优化选项尝试一下,尝试使用最近邻替换双线性的resize重新训练,降低图片分辨率等使性能达标。 + 1)优化修改onnx模型去掉影响性能的冗余pad,用Ascend atc的相关优化选项尝试一下,尝试使用最近邻替换双线性的resize重新训练,降低图片分辨率等使性能达标。 2)对于算子导致的性能问题,需要使用profiling分析定位引起性能下降的原因,具体到引起性能下降的算子。优先修改模型代码以使其选择性能好的npu算子替换性能差的npu算子使性能达标,然后在modelzoo上提issue,等修复版本发布后再重测性能,继续优化。 3)需要交付profiling性能数据,对经过上述方法性能可以达标的模型,在交付文档中写明问题原因与达标需要执行的操作;对经过上述方法性能仍不达标的模型,在交付文档中写明问题原因与简要的定位过程。 6.工作量为简单模型2-3个工作日,复杂模型5-10个工作日,个别难度大的模型15-20个工作日。 @@ -1218,12 +1223,12 @@ profiling也会统计每个算子耗时,结合使用netron查看onnx模型结 - 交付件 - 交付件参考:[ResNeXt50_Onnx模型端到端推理指导.md](https://gitee.com/ascend/modelzoo/tree/master/built-in/ACL_PyTorch/Benchmark/cv/classification/ResNext50) - 最终交付件: - 包含以上交付标准的模型名称_Onnx端到端推理指导.md + 包含以上交付标准的代码,模型名称_Onnx端到端推理指导.md,以及验收脚本 - 最终交付形式: - gitee网址:https://gitee.com/ascend/modelzoo/tree/master/contrib/ACL_PyTorch - commit信息格式:【高校贡献-学校学院名称】【Onnx-模型名称】模型名称 Onnx端到端推理 + gitee网址:https://gitee.com/ascend/modelzoo/tree/master/contrib/ACL_PyTorch/Research + commit信息格式:【高校贡献-${学校学院名称}】【Pytorch离线推理-${模型名称}】${PR内容摘要} 模型命名风格为大驼峰,模型名含多个字符串时使用横杠或下划线连接,当上下文用横杠时模型名用下划线连接,否则用横杠连接 - 对于batch1与batch16,npu性能均高于T4性能1.2倍的模型,放在benchmark目录下,1-1.2倍对应official目录,低于1倍放在research目录 + 对于batch1与batch16,npu性能均高于T4性能1.2倍的模型,放在Benchmark目录下,1-1.2倍对应Official目录,低于1倍放在Research目录,目前都放在contrib/ACL_PyTorch/Research下即可 - gitee仓PR贡献流程 - fork [modelzoo](https://gitee.com/ascend/modelzoo) 到个人仓 @@ -1276,6 +1281,7 @@ profiling也会统计每个算子耗时,结合使用netron查看onnx模型结 | :------: | :------: | :------: | :------: | :------: | | ResNeXt50 bs1 | top1:77.62% top5:93.70% | top1:77.62% top5:93.69% | 763.044fps | 1497.252fps | | ResNeXt50 bs16 | top1:77.62% top5:93.70% | top1:77.62% top5:93.69% | 1234.940fps | 2096.376fps | + # 如果是无法规避的算子缺陷导致性能不达标,这里需要添加性能不达标的原因 # 自验报告 ```shell @@ -1292,7 +1298,7 @@ profiling也会统计每个算子耗时,结合使用netron查看onnx模型结 # 精度数据是否达标(需要显示官网精度与om模型的精度) # npu性能数据(如果模型支持多batch,测试bs1与bs16,否则只测试bs1,性能数据以单卡吞吐率为标准) bash test/eval_acc_perf.sh - # 验收结果: OK / Failed + # 验收结果: 是 / 否 # 备注: 目标精度top1:77.62% top5:93.70%;bs1,bs16验收精度top1:77.62% top5:93.69%;精度下降不超过1%;无运行报错,报错日志xx 等 # 备注: 验收测试性能bs1:1497.252FPS bs16:2096.376FPS;无运行报错,报错日志xx 等 @@ -1300,7 +1306,10 @@ profiling也会统计每个算子耗时,结合使用netron查看onnx模型结 bash test/perf_t4.sh # 验收结果: OK / Failed # 备注: 验收测试性能bs1:763.044FPS bs16:1234.940FPS;无运行报错,报错日志xx 等 - # 310性能需要超过t4 + + # 310性能是否超过t4: 是 / 否 + bs1:310=1.96倍t4 + bs16:310=1.70倍t4 ``` - 示例链接 https://gitee.com/ascend/modelzoo/pulls/836#note_4750681 diff --git "a/AscendPyTorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272\351\252\214\346\224\266\346\214\207\345\215\227.md" "b/AscendPyTorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272\351\252\214\346\224\266\346\214\207\345\215\227.md" index bdae5f21510330a1a7769f18729737fdf5b44cfe..e829474f677a1b68224a7bcbfd9dbfe49a20f34d 100644 --- "a/AscendPyTorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272\351\252\214\346\224\266\346\214\207\345\215\227.md" +++ "b/AscendPyTorch\346\250\241\345\236\213\346\216\250\347\220\206\344\274\227\346\231\272\351\252\214\346\224\266\346\214\207\345\215\227.md" @@ -5,20 +5,16 @@ - PR末班和文件路径结构都在下面附件里有详细说明,请仔细check 3. 按照验收脚本在交付文件夹下进行验收 - ```shell script - + ```shell # pth是否能正确转换为om - bash scripts/pth2om.sh + bash test/pth2om.sh # 精度数据是否达标(需要显示官网精度与om模型的精度) - bash scripts/eval_acc.sh - # npu性能数据(如果模型支持多batch,测试bs1与bs16,否则只测试bs1,性能数据以单卡吞吐率为标准) - bash scripts/perform_310.sh + bash test/eval_acc_perf.sh # 在t4环境测试性能数据(如果模型支持多batch,测试bs1与bs16,否则只测试bs1,如果导出的onnx模型因含自定义算子等不能离线推理,则在t4上测试pytorch模型的在线推理性能,性能数据以单卡吞吐率为标准) - bash scripts/perform_t4.sh - + bash test/perf_t4.sh ``` - 验收过程中遇到问题,如是一些路径或者打字错误的问题,先修复继续执行 @@ -28,30 +24,30 @@ ```shell # 第X次验收测试 # 验收结果 OK / Failed - # 验收环境: A + K / CANN R20C20TR5 + # 验收环境: A + K / CANN 5.0.1 # 关联issue: # pth是否能正确转换为om - bash scripts/pth2om.sh + bash test/pth2om.sh # 验收结果: OK / Failed # 备注: 成功生成om,无运行报错,报错日志xx 等 # 精度数据是否达标(需要显示官网精度与om模型的精度) - bash scripts/eval_acc.sh - # 验收结果: OK / Failed - # 备注: 目标精度top1:77.62% top5:93.70%;bs1,bs16验收精度top1:77.62% top5:93.69%;精度下降不超过1%;无运行报错,报错日志xx 等 - # npu性能数据(如果模型支持多batch,测试bs1与bs16,否则只测试bs1,性能数据以单卡吞吐率为标准) - bash scripts/perform_310.sh - # 验收结果: OK / Failed + bash test/eval_acc_perf.sh + # 验收结果: 是 / 否 + # 备注: 目标精度top1:77.62% top5:93.70%;bs1,bs16验收精度top1:77.62% top5:93.69%;精度下降不超过1%;无运行报错,报错日志xx 等 # 备注: 验收测试性能bs1:1497.252FPS bs16:2096.376FPS;无运行报错,报错日志xx 等 + # 在t4环境测试性能数据(如果模型支持多batch,测试bs1与bs16,否则只测试bs1,如果导出的onnx模型因含自定义算子等不能离线推理,则在t4上测试pytorch模型的在线推理性能,性能数据以单卡吞吐率为标准) - bash scripts/perform_t4.sh + bash test/perf_t4.sh # 验收结果: OK / Failed # 备注: 验收测试性能bs1:763.044FPS bs16:1234.940FPS;无运行报错,报错日志xx 等 - # 310性能需要超过t4 - - ``` + + # 310性能是否超过t4: 是 / 否 + bs1:310=1.96倍t4 + bs16:310=1.70倍t4 + ``` - 示例链接 https://gitee.com/ascend/modelzoo/pulls/836#note_4814643 5. 验收完成后,上gitee管理平台,将验收目标调整至完成状态 @@ -69,4 +65,143 @@ - \ No newline at end of file +### 附: 模型推理指导中的交付标准与规范 +- 交付标准 + - 精度: + om模型推理的精度与PyTorch预训练模型github代码仓README.md或官网文档公布的精度对比,精度下降不超过1%则认为精度达标 + - 性能: + Ascend benchmark工具在数据集上推理测的NPU 310单颗device吞吐率乘以4颗即单卡吞吐率大于TensorRT工具测的GPU T4单卡吞吐率则认为性能达标 + 如若交付要求中对性能有要求(易模型),310的性能必须高于t4的性能 + 如若交付要求中没有对性能有要求(中难模型),310上推理需尽可能进行性能优化 + 若无法达到,则需要向华为方提交性能已达瓶颈的认证申请,华为方将定期组织专家组对申请模型进行评审,通过评审的模型允许以不高于t4的性能进行交付 + - 脚本: + 代码符合pep8规范; + 脚本命名格式需统一,文件名含模型名时模型名用小写,模型名含多个字符串时用-连接; + xxx_pth2onnx.py中不能使用从网络下载权重pth文件的代码,xxx_pth2onnx.py应有输入输出参数,输入是本地权重pth文件,输出是生成的onnx模型文件名; + xxx_pth_preprocess.py与xxx_pth_postprocess.py尽可能只引用numpy,Pillow,torch,pycocotools等基础库,如不要因mmdetection框架的数据处理与精度评测部分封装了这些基础库的操作,为调用这些简单接口,前后处理脚本就依赖mmdetection; + 不同模型的脚本与代码部分处理流程有相似性,尽量整合成通用的脚本与代码。 + - 推理过程: + 需要提供端到端推理过程中执行的命令等 + - 关键问题总结: + 需要提供端到端推理遇到的关键问题的简要调试过程,至少包含模型转换要点,精度调试,性能优化 + + 说明: + ``` + 1.如果开源代码仓提供了多个权重文件,使用常用的基础的那个配置的权重文件即可;如果开源代码仓没有提供pth权重文件,则需要该模型的训练同学提供pth权重文件,或者使用开源代码仓训练脚本简单训练一个pth权重文件,然后对比om精度与该pth权重文件的精度 + 2.由于随机数可能不能模拟数据分布,Ascend benchmark工具纯推理功能测的有些模型性能数据可能不太准,所以模型测试脚本与提交代码的描述中的性能数据以Ascend benchmark在数据集上推理时得到性能数据为准 + 3.如果模型支持多batch,需要测试batch1,4,8,16,32的精度与性能,写在模型名称_Onnx端到端推理指导.md里,模型测试脚本与提交代码的描述只需提供bs1和bs16的精度性能数据 + 4.如果导出的onnx因包含自定义算子等而不能推理,则在t4上运行开源评测脚本测试pth模型在线推理性能 + 5.对于性能不达标的模型,需要进行如下工作: + 1)优化修改onnx模型去掉影响性能的冗余pad,用Ascend atc的相关优化选项尝试一下,尝试使用最近邻替换双线性的resize重新训练,降低图片分辨率等使性能达标。 + 2)对于算子导致的性能问题,需要使用profiling分析定位引起性能下降的原因,具体到引起性能下降的算子。优先修改模型代码以使其选择性能好的npu算子替换性能差的npu算子使性能达标,然后在modelzoo上提issue,等修复版本发布后再重测性能,继续优化。 + 3)需要交付profiling性能数据,对经过上述方法性能可以达标的模型,在交付文档中写明问题原因与达标需要执行的操作;对经过上述方法性能仍不达标的模型,在交付文档中写明问题原因与简要的定位过程。 + 6.工作量为简单模型2-3个工作日,复杂模型5-10个工作日,个别难度大的模型15-20个工作日。 + ``` + +- 交付件 + - 交付件参考:[ResNeXt50_Onnx模型端到端推理指导.md](https://gitee.com/ascend/modelzoo/tree/master/built-in/ACL_PyTorch/Benchmark/cv/classification/ResNext50) + - 最终交付件: + 包含以上交付标准的代码,模型名称_Onnx端到端推理指导.md,以及验收脚本 + - 最终交付形式: + gitee网址:https://gitee.com/ascend/modelzoo/tree/master/contrib/ACL_PyTorch/Research + commit信息格式:【高校贡献-${学校学院名称}】【Pytorch离线推理-${模型名称}】${PR内容摘要} + 模型命名风格为大驼峰,模型名含多个字符串时使用横杠或下划线连接,当上下文用横杠时模型名用下划线连接,否则用横杠连接 + 对于batch1与batch16,npu性能均高于T4性能1.2倍的模型,放在Benchmark目录下,1-1.2倍对应Official目录,低于1倍放在Research目录,目前都放在contrib/ACL_PyTorch/Research下即可 + +- gitee仓PR贡献流程 + - fork [modelzoo](https://gitee.com/ascend/modelzoo) 到个人仓 + - 提交代码到个人仓 + - 签署cla [link](https://clasign.osinfra.cn/sign/Z2l0ZWUlMkZhc2NlbmQ=) + - 选择 Sign Individual CLA + - 若已提交PR,但忘记签署,可在签署CLA后再评论内评论 ```/check-cla``` 重新校验 + - 依据文件夹名称及目录规范整理代码,完成自验,使用PR内容模板进行PR,审查人员请指定 王姜奔(wangjiangben_hw) + - PR后,华为方会进行代码检视,并对PR进行验证,请关注PR的评论并及时修改 + - 最终验收完成后合入主干 +- gitee仓验收使用脚本(请自验)、PR内容模板 + - 验收使用脚本(请自验) + >![](public_sys-resources/icon-note.gif) + **说明:** + > **提交前请确保自验通过!确保直接执行以下脚本就可运行!** + + ```shell + + # pth是否能正确转换为om + bash test/pth2om.sh + + # 精度数据是否达标(需要显示官网精度与om模型的精度) + # npu性能数据(如果模型支持多batch,测试bs1与bs16,否则只测试bs1,性能数据以单卡吞吐率为标准) + bash test/eval_acc_perf.sh + + # 在t4环境测试性能数据(如果模型支持多batch,测试bs1与bs16,否则只测试bs1,如果导出的onnx模型因含自定义算子等不能离线推理,则在t4上测试pytorch模型的在线推理性能,性能数据以单卡吞吐率为标准) + bash test/perf_t4.sh + ``` + - PR内容模板 + - PR示例链接 https://gitee.com/ascend/modelzoo/pulls/887 + - PR名称 + - 【高校贡献-${学校学院名称}】【Pytorch离线推理-${模型名称}】${PR内容摘要} + - 举例说明:【高校贡献-华为大学昇腾学院】【Pytorch离线推理-ResNeXt50】初次提交。 + ``` + + + + **What type of PR is this?** + > /kind task + + **What does this PR do / why do we need it**: + # 简述你这次的PR的详情 + + | 模型 | 官网精度 | 310精度 | t4性能 | 310性能 | + | :------: | :------: | :------: | :------: | :------: | + | ResNeXt50 bs1 | top1:77.62% top5:93.70% | top1:77.62% top5:93.69% | 763.044fps | 1497.252fps | + | ResNeXt50 bs16 | top1:77.62% top5:93.70% | top1:77.62% top5:93.69% | 1234.940fps | 2096.376fps | + # 如果是无法规避的算子缺陷导致性能不达标,这里需要添加性能不达标的原因 + + # 自验报告 + ```shell + # 第X次验收测试 + # 验收结果 OK / Failed + # 验收环境: A + K / CANN 5.0.1 + # 关联issue: + + # pth是否能正确转换为om + bash test/pth2om.sh + # 验收结果: OK / Failed + # 备注: 成功生成om,无运行报错,报错日志xx 等 + + # 精度数据是否达标(需要显示官网精度与om模型的精度) + # npu性能数据(如果模型支持多batch,测试bs1与bs16,否则只测试bs1,性能数据以单卡吞吐率为标准) + bash test/eval_acc_perf.sh + # 验收结果: 是 / 否 + # 备注: 目标精度top1:77.62% top5:93.70%;bs1,bs16验收精度top1:77.62% top5:93.69%;精度下降不超过1%;无运行报错,报错日志xx 等 + # 备注: 验收测试性能bs1:1497.252FPS bs16:2096.376FPS;无运行报错,报错日志xx 等 + + # 在t4环境测试性能数据(如果模型支持多batch,测试bs1与bs16,否则只测试bs1,如果导出的onnx模型因含自定义算子等不能离线推理,则在t4上测试pytorch模型的在线推理性能,性能数据以单卡吞吐率为标准) + bash test/perf_t4.sh + # 验收结果: OK / Failed + # 备注: 验收测试性能bs1:763.044FPS bs16:1234.940FPS;无运行报错,报错日志xx 等 + + # 310性能是否超过t4: 是 / 否 + bs1:310=1.96倍t4 + bs16:310=1.70倍t4 + ``` + - 示例链接 https://gitee.com/ascend/modelzoo/pulls/836#note_4750681 + + **Which issue(s) this PR fixes**: + # 用于后期issue关联的pr + + Fixes # + + **Special notes for your reviewers**: + # 在reviewer检视时你想要和他说的 + + ``` + +