背景介绍
本样例演示AscendCL标准态动态目标识别系统 FaceRecgnition 供用户参考。本系统基于Atlas 推理系列产品(Ascend 310P处理器),支持HostCPU标准方案。主要分为目标检测识别与目标注册两个子系统:
- 目标检测识别子系统负责在视频流中抓拍输出符合目标识别要求的目标图像,提取目标描述特征向量并在目标底库中进行检索。
- 目标注册子系统在用户提供的图像中精确定位目标位置,将目标对齐以提高识别精度,提取目标描述特征向量并录入目标库。
前提条件
- 操作系统:Ubuntu18.04 / Centos7.6
- 请确保完成使用前准备。
性能数据采集和解析操作
执行msprof命令,采集当前已编译完成的应用软件模块性能数据。
msprof --application=/home/HwHiAiUser/HIAI_PROJECTS/MyAppname/out/main --output=/home/ HwHiAiUser --model-execution=on --runtime-api=on --aicpu=on
执行完上述命令后,会在--output目录下生成PROF_XXX目录,PROF_XXX目录即为保存的原始Profiling数据,并在PROF_XXX目录下生成timeline和summary的解析数据。
问题定位
算子未融合,网络结构中大量的Conv2D + BN + SCALE算子,导致数据搬运频繁,整网耗时较长,通过算子融合进行消除。
- 进入数据解析后生成的summary目录,打开算子信息统计表op_sumamry.csv,发现大量的可融合算子:Conv2D + BN + SCALE。

- 理论分析Conv2D + BN可以融合成1个Conv2D算子。


- 进入数据解析后生成的timeline目录,打开msprof.json,可以分析发现单个迭代的耗时达到30.7 ms,图中也可以看出算子较为零碎,会导致算子间耗时间隙加大。

- 重复数据采集和数据解析的步骤,获取到融合后的性能数据。
- 进入数据解析后生成的summary目录,打开算子信息统计表op_sumamry.csv,发现算子已融合成一个大的Conv2D算子。

- 进入数据解析后生成的timeline目录,打开msprof.json,可以分析发现单个迭代的耗时达到14.3 ms,对比可以发现图中大量零碎的算子聚合,数据搬运耗时变少以及算子间隙减少,性能提升一倍。

算子的多核切分存在问题,未充分发挥芯片的计算能力。
- 进入数据解析后生成的summary目录,打开算子信息统计表op_sumamry.csv,发现大量的算子的多核切分数较小,未充分利用满核,Block Dim普遍只使用2个核。

- 根据芯片配置信息可以看出310P对应的aicore num有8个,显然多核切分存在问题,未充分使用满核的计算能力。
芯片的aicore核数也可以通过采集到的Profiling性能数据查询("ai_core_num"):

- 通过AOE工具进行自动调优,可以优化算子的Block Dim切分情况。
- 重新采集Profiling数据,进入数据解析后生成的summary目录,打开算子信息统计表op_sumamry.csv,Block Dim普遍已使用8个核,且迭代耗时有1.5ms+的收益。

结论
算子未融合,网络结构中大量的Conv2D + BN + SCALE算子,导致数据搬运频繁,整网耗时较长,通过算子融合进行消除。
算子的多核切分数较小,未充分利用满核,通过AOE工具进行自动调优。