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 5de7ac5d14699be310ca5173aaf68d64b4e1bd11..6e4be62adebef90096393ae0faa9b48df124baf1 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" @@ -1311,57 +1311,39 @@ python3 ssd_pth_postprocess.py /root/dataset/VOCdevkit/VOC2007/ ./voc-model-labe om模型推理的精度与Ascend 910训练出的权重精度或PyTorch预训练模型github代码仓README.md或官网文档公布的精度对比,精度下降不超过1%则认为精度达标 - 性能: Ascend benchmark工具在数据集上推理测的NPU 310单颗device吞吐率乘以4颗即单卡吞吐率大于TensorRT工具测的GPU T4单卡吞吐率则认为性能达标 - 如若交付要求中对性能有要求(易模型),310的性能必须高于t4的性能 - 如若交付要求中没有对性能有要求(中难模型),310上推理需尽可能进行性能优化 + 如若交付要求中对性能有要求(易模型),310性能必须高于t4性能 + 如若交付要求中没有对性能有要求(中难模型),310上推理需尽可能进行性能优化以使性能达标,默认310性能必须大于0.5倍t4性能 若无法达到,则需要向华为方提交性能已达瓶颈的认证申请,华为方将定期组织专家组对申请模型进行评审,通过评审的模型允许以不高于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; - 不同模型的脚本与代码部分处理流程有相似性,尽量整合成通用的脚本与代码。 + xxx_pth_preprocess.py与xxx_pth_postprocess.py尽可能只引用torch,torchvision,onxx,numpy,Pillow,opencv-python等基础库; + 代码要尽可能通用与精简,少包含没有使用的库与函数,少复制开源模型代码 - 推理过程: - 需要提供端到端推理过程中执行的命令等 - - 关键问题总结: - 需要提供端到端推理遇到的关键问题的简要调试过程,至少包含模型转换要点,精度调试,性能优化 + 需要提供端到端推理过程中执行的命令等,需要提供端到端推理遇到的关键问题的简要调试过程,至少包含模型转换要点,精度调试,性能优化 - 说明: - ``` - 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模型在线推理性能 - - 5.对于性能不达标的模型,需要进行如下工作: - 1)优化修改onnx模型去掉影响性能的冗余pad,用Ascend atc的相关优化选项尝试一下,尝试使用最近邻替换双线性的resize重新训练,降低图片分辨率等使性能达标。 - 2)对于算子导致的性能问题,需要使用profiling分析定位引起性能下降的原因,具体到引起性能下降的算子。优先修改模型代码以使其选择性能好的npu算子替换性能差的npu算子使性能达标,然后在modelzoo上提issue,等修复版本发布后再重测性能,继续优化。 - 3)需要交付profiling性能数据,对经过上述方法性能可以达标的模型,在交付文档中写明问题原因与达标需要执行的操作;对经过上述方法性能仍不达标的模型,在交付的README.md文档中写明问题原因与简要的定位过程。 - - 6.git clone开源模型代码仓到工作目录,如果模型代码仓没有安装命令,pth2onnx.py脚本需要引用模型代码仓的函数或类时,通过sys.path.append(r"./代码仓目录")添加搜索路径,如果需要修改开源代码仓代码,将修改用git diff做成一个patch文件,交付件不要交付开源代码仓里的代码,只需要交付这个patch文件。参见本文3.5 maskrcnn端到端推理指导-开源detectron2加载npu权重的推理指导 - - 7.数据集统一放在/root/datasets/目录 - ``` - -- 交付件 - - 交付件参考:[ResNeXt50_Onnx模型端到端推理指导.md](https://gitee.com/ascend/modelzoo/tree/master/built-in/ACL_PyTorch/Benchmark/cv/classification/ResNext50) - - 最终交付件: - 包含以上交付标准的代码,README.md,以及验收脚本 - 权重文件、profiling性能数据等非代码交付件一并打压缩包邮件发送 - - 最终交付形式: - 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下即可 + >![](https://gitee.com/wangjiangben_hw/ascend-pytorch-crowdintelligence-doc/raw/master/public_sys-resources/icon-note.gif) +**说明:** + > 如果已经有了Ascend 910训练提供的权重文件,那么优先使用训练的权重做离线推理,精度与该权重精度对齐,注意基于开源PyTorch与开源模型代码做推理,训练修改的影响精度的代码需要移植过来;如果910还没有训练好权重,可以使用官网开源模型代码提供的基础配置的pth权重文件,然后对比om精度与该pth权重的精度 + > + > 如果模型支持多batch,需要测试batch1,4,8,16,32的精度与性能,模型测试脚本与提交代码的描述只需提供bs1和bs16的精度性能数据 + > + > 由于随机数不能模拟真实数据分布,Ascend benchmark工具纯推理功能测试性能对少数模型可能不太准,所以模型测试脚本与提交代码描述中的性能数据以benchmark在数据集上推理时得到的性能数据为准 + > + > 如果导出的onnx因包含npu自定义算子等不能推理,可在t4上运行开源评测脚本测试pth模型在线推理性能 + > + > 对于性能不达标的模型,需要使用Ascend profiling工具分析并尝试优化。对于算子导致的性能问题,优先修改模型代码以使其选择性能好的npu算子,并在modelzoo上提issue。 + > + > 如果需要修改开源模型代码,将修改用git diff做成一个patch文件,交付件不要交付开源代码仓里的代码,只需要交付这个patch文件。 + > + > 通用数据集统一放在/root/datasets/或/opt/npu/目录 -- 交付件参考 - 代码交付件checklist,以Nested_UNet模型为例: +- 交付件 + - 代码交付件checklist,以Nested_UNet模型为例: ``` Nested_UNet #模型名称命名的文件夹 ├── env.sh #环境变量 - ├── Nested_UNet.patch #以补丁形式修改开源模型代码 + ├── Nested_UNet.patch #如果需要修改开源模型代码,以补丁形式修改 ├── Nested_UNet_pth2onnx.py #模型转换脚本,通过sys.path.append(r"./pytorch-nested-unet") from archs import NestedUNet的方式引用开源模型代码 ├── Nested_UNet_preprocess.py #模型前处理脚本,不要import该脚本没有用到的库,类或函数,输入的数据集路径要以参数形式传递给脚本而不是将其写在脚本里 ├── gen_dataset_info.py #生成数据集info文件 @@ -1389,8 +1371,8 @@ python3 ssd_pth_postprocess.py /root/dataset/VOCdevkit/VOC2007/ ./voc-model-labe > Xxx_postprocess.py:尽量不import开源模型代码,但是如果因此脚本直接复制了大量开源模型代码的评测函数,为求精简,也可以import开源模型代码的类或函数;不应将开源模型代码评测相关的框架代码也复制过来,只需要引用实际实现评测的函数,代码要精简 > > requirements.txt:模型离线推理用到的所有依赖库与版本,开源模型代码依赖的第三方库模型离线推理时可能并没有依赖,不要写入实际没有依赖的库,常用的是torch,torchvision,onnx,numpy,Pilow,opencv-python;PyTorch优选开源1.5.0版本,特殊情况可选用1.8.0但是需写明具体原因,tochvision版本与torch是配套的,onnx版本默认选用1.7.0,其它库具体版本是离线推理时使用的具体版本,如果对这些库的具体版本没有特殊要求,这些库版本可以不写 - - pth2onnx与模型目录结构基本操作: + + pth2onnx基本操作与模型目录结构: ``` cd Nested_UNet git clone https://github.com/4uiiurz1/pytorch-nested-unet @@ -1401,35 +1383,37 @@ python3 ssd_pth_postprocess.py /root/dataset/VOCdevkit/VOC2007/ ./voc-model-labe #pth2onnx脚本通过sys.path.append(r"./pytorch-nested-unet") from archs import NestedUNet的方式引用NestedUNet模型结构 #工作目录可以选为模型目录或者开源模型代码目录,模型转换与前后处理脚本和开源模型代码尽量处于同一层,执行脚本命令时要根据工作目录确定路径 ``` - [代码交付件模板](https://gitee.com/wangjiangben_hw/ascend-pytorch-crowdintelligence-doc/tree/master/Ascend-PyTorch%E7%A6%BB%E7%BA%BF%E6%8E%A8%E7%90%86%E6%8C%87%E5%AF%BC/ONNX%E6%A8%A1%E5%9E%8B%E6%8E%A8%E7%90%86%E6%8C%87%E5%AF%BC/official/cv/ReID/ReID-strong-baseline) + 代码交付件参考:[代码交付件模板](https://gitee.com/wangjiangben_hw/ascend-pytorch-crowdintelligence-doc/tree/master/Ascend-PyTorch%E7%A6%BB%E7%BA%BF%E6%8E%A8%E7%90%86%E6%8C%87%E5%AF%BC/ONNX%E6%A8%A1%E5%9E%8B%E6%8E%A8%E7%90%86%E6%8C%87%E5%AF%BC/official/cv/ReID/ReID-strong-baseline) + + 代码交付形式: 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下即可 - 非代码交付件: + - 文档交付件: [PyTorch离线推理-Xxx模型测试报告.docx](https://gitee.com/wangjiangben_hw/ascend-pytorch-crowdintelligence-doc/blob/master/Ascend-PyTorch%E7%A6%BB%E7%BA%BF%E6%8E%A8%E7%90%86%E6%8C%87%E5%AF%BC/PyTorch%E7%A6%BB%E7%BA%BF%E6%8E%A8%E7%90%86-Xxx%E6%A8%A1%E5%9E%8B%E6%B5%8B%E8%AF%95%E6%8A%A5%E5%91%8A.docx) [PyTorch离线推理-Xxx模型推理指导书.docx](https://gitee.com/wangjiangben_hw/ascend-pytorch-crowdintelligence-doc/blob/master/Ascend-PyTorch%E7%A6%BB%E7%BA%BF%E6%8E%A8%E7%90%86%E6%8C%87%E5%AF%BC/PyTorch%E7%A6%BB%E7%BA%BF%E6%8E%A8%E7%90%86-Xxx%E6%A8%A1%E5%9E%8B%E6%8E%A8%E7%90%86%E6%8C%87%E5%AF%BC%E4%B9%A6.docx) - 算子问题导致精度不达标或性能不达标时的其它交付件: - 1.如果使用autotune模型性能可以达标,需要交付知识库 - 2.模型性能不达标初步优化压缩包 - ``` - PyTorch离线推理-ICNet性能不达标初步优化 - ├── PyTorch离线推理-ICNet模型测试报告.docx - ├── 优化前的profiling - ├── icnet_bs16.om - ├── icnet.onnx - └── 优化后的profiling - ``` - [PyTorch离线推理-Xxx模型测试报告.docx](https://gitee.com/wangjiangben_hw/ascend-pytorch-crowdintelligence-doc/blob/master/Ascend-PyTorch%E7%A6%BB%E7%BA%BF%E6%8E%A8%E7%90%86%E6%8C%87%E5%AF%BC/PyTorch%E7%A6%BB%E7%BA%BF%E6%8E%A8%E7%90%86-Xxx%E6%A8%A1%E5%9E%8B%E6%B5%8B%E8%AF%95%E6%8A%A5%E5%91%8A.docx)模板中含性能不达标时的优化案例与测试项 - 3.在modelzoo提issue - [issue模板](https://gitee.com/wangjiangben_hw/ascend-pytorch-crowdintelligence-doc/blob/master/Ascend-PyTorch%E7%A6%BB%E7%BA%BF%E6%8E%A8%E7%90%86%E6%8C%87%E5%AF%BC/PyTorch%E7%A6%BB%E7%BA%BF%E6%8E%A8%E7%90%86-issue%E6%A8%A1%E6%9D%BF.md) - [issue示例](https://gitee.com/ascend/modelzoo/issues/I3W5Y3?from=project-issue) - - - 如果使用补丁文件修改了模型代码则将补丁打入模型代码,如果需要引用模型代码仓的类或函数通过sys.path.append(r"./pytorch-nested-unet")添加搜索路径 + - 算子问题导致精度不达标或性能不达标时的其它交付件: + 1.如果使用autotune模型性能可以达标,需要交付知识库 + 2.在modelzoo提issue + [issue模板](https://gitee.com/wangjiangben_hw/ascend-pytorch-crowdintelligence-doc/blob/master/Ascend-PyTorch%E7%A6%BB%E7%BA%BF%E6%8E%A8%E7%90%86%E6%8C%87%E5%AF%BC/PyTorch%E7%A6%BB%E7%BA%BF%E6%8E%A8%E7%90%86-issue%E6%A8%A1%E6%9D%BF.md) + [issue示例](https://gitee.com/ascend/modelzoo/issues/I3W5Y3?from=project-issue) + 3.模型性能不达标初步优化压缩包 + ``` + PyTorch离线推理-ICNet性能不达标初步优化 + ├── PyTorch离线推理-ICNet模型测试报告.docx + ├── 优化前的profiling + ├── icnet_bs16.om + ├── icnet.onnx + └── 优化后的profiling + ``` + [PyTorch离线推理-Xxx模型测试报告.docx](https://gitee.com/wangjiangben_hw/ascend-pytorch-crowdintelligence-doc/blob/master/Ascend-PyTorch%E7%A6%BB%E7%BA%BF%E6%8E%A8%E7%90%86%E6%8C%87%E5%AF%BC/PyTorch%E7%A6%BB%E7%BA%BF%E6%8E%A8%E7%90%86-Xxx%E6%A8%A1%E5%9E%8B%E6%B5%8B%E8%AF%95%E6%8A%A5%E5%91%8A.docx)模板中含性能不达标时的优化案例与测试项 + +- 参考 + 如果使用补丁文件修改了模型代码则将补丁打入模型代码,如果需要引用模型代码的类或函数通过sys.path.append(r"./pytorch-nested-unet")添加搜索路径 参见https://gitee.com/ascend/modelzoo/pulls/2309 参见https://gitee.com/ascend/modelzoo/pulls/2585