UB算子融合推荐分析样例

背景介绍

算子是组成模型的基本单元。模型转换时,会进行算子融合来达到网络性能提升的目的。当模型中存在算子融合规则未覆盖且可融合的算子时,模型转换完成则无法达到最优性能。本节以YOLOV5模型为例,介绍通过专家系统UB算子融合推荐功能自动发现并输出模型中可融合的Cube和Vector算子,帮助用户快速定位可融合算子,提升模型性能。

  • 本文仅介绍专家系统UB算子融合推荐功能的操作及分析过程,对于OM模型中算子融合的具体操作此处不做阐述。
  • 有关UB算子融合的详细介绍请参见图融合和UB融合规则参考
  • 有关模型转换的详细介绍请参见ATC工具使用指南

专家系统操作

以HwHiAiUser用户为例执行以下操作。

  1. 参见CANN 软件安装指南安装Ascend-cann-toolkit包。
  2. 准备通过模型转换生成的OM离线模型文件作为UB算子融合推荐功能的输入文件。

    OM离线模型文件存放路径为${data_path}数据目录根路径的project目录下。

  3. 配置环境变量。

    . /home/HwHiAiUser/Ascend/ascend-toolkit/set_env.sh

  4. 执行分析命令。

    msadvisor -d /home/HwHiAiUser/data -c model

    -d参数数据指定OM离线模型文件的路径,指定到数据目录的根目录(包含所有专家系统输入数据的目录);UB算子融合推荐功能属于对模型的分析,所以-c参数配置值为model。

  5. 完成分析后,系统会将分析结果以打屏的形式展示。输出YOLOV5模型内可融合算子如下。

    图1 UB可融合算子(优化前)

问题分析

根据专家系统UB算子融合推荐功能输出结果,可以对图1进行融合。

问题解决

具体融合操作需开发者自行修改算子代码,完成融合后的模型结构示例如图2所示。

图2 YOLOV5网络模型结构(局部)

图中以YOLOV5网络模型的Conv2D、Mul和AscendQuart算子融合为Conv2D算子为例,左侧部分为融合前的YOLOV5网络模型结构,右侧部分为优化后的YOLOV5网络模型结构,可以看到优化后模型结构得到了简化。

通过对图1中红框部分可融合算子进行融合,完成对这些算子的融合操作,重新执行模型转换并再次执行专家系统操作。输出结果如下。
图3 UB可融合算子(优化后)

图3输出结果可以看出,图1红色部分算子已不在可融合算子列表中,说明这些算子已经被成功融合。

结论

通过专家系统工具前后两次对OM模型的UB算子融合分析,并对比两次输出结果可知专家系统工具可以快速准确定位到模型中的可融合算子,减少用户的定位时间,提升效率。