功能及约束说明
功能
- 方式一:将采集到的Profiling数据写入文件,再使用Profiling工具解析该文件(请参见《CANN 开发辅助工具指南》中的“Profiling工具使用指南”章节),并展示性能分析数据包括以下两种接口调用方式:
- aclprofInit接口、aclprofStart接口、aclprofStop接口、aclprofFinalize接口配合使用,实现该方式的性能数据采集。该方式可获取AscendCL的接口性能数据、AI Core上算子的执行时间、AI Core性能指标数据等。目前这些接口为进程级控制,表示在进程内任意线程调用该接口,其它线程都会生效。
一个进程内,可以根据需求多次调用这些接口,基于不同的Profiling采集配置,采集数据。
- 调用aclInit接口,在AscendCL初始化阶段,通过*.json文件传入要采集的Profiling数据。该方式可获取AscendCL的接口性能数据、AI Core上算子的执行时间、AI Core性能指标数据等。
一个进程内,只能调用一次aclInit接口,如果要修改Profiling采集配置,需修改*.json文件中的配置。详细使用说明请参见aclInit接口处的说明,不在本章节描述。
- aclprofInit接口、aclprofStart接口、aclprofStop接口、aclprofFinalize接口配合使用,实现该方式的性能数据采集。该方式可获取AscendCL的接口性能数据、AI Core上算子的执行时间、AI Core性能指标数据等。目前这些接口为进程级控制,表示在进程内任意线程调用该接口,其它线程都会生效。
- 方式二:将采集到的Profiling数据解析后写入管道,由用户读入内存,再由用户调用AscendCL的接口获取性能数据
aclprofModelSubscribe接口、aclprofGet*接口、aclprofModelUnSubscribe接口配合使用,实现该方式的性能数据采集,当前支持获取网络模型中算子的性能数据,包括算子名称、算子类型名称、算子执行时间等。
总体约束
两种方式的Profiling性能数据采集接口不能交叉调用:
- aclprofInit接口和aclprofFinalize接口之间不能调用aclprofModelSubscribe接口、aclprofGet*接口、aclprofModelUnSubscribe接口;
- aclprofModelSubscribe接口和aclprofModelUnSubscribe接口之间不能调用aclprofInit接口、aclprofStart接口、aclprofStop接口、aclprofFinalize。
方式一的接口约束说明
- 调用接口要求:
- aclprofInit接口必须在aclInit接口之后、模型加载之前调用。
如果已经通过aclInit接口配置了Profiling信息,则调用aclprofInit接口、aclprofStart接口、aclprofStop接口、aclprofFinalize时,会返回报错。
如果没有调用aclprofInit接口,调用aclprofStart接口、aclprofStop接口、aclprofFinalize时,会返回报错。
- aclprofStart接口在模型执行之前调用,若在模型执行过程中调用aclprofStart接口,Profling采集到的数据为调用aclprofStart接口之后的数据,可能导致数据不完整。
调用aclprofStart接口时,可以指定从一个Device上采集性能数据,也可以指定从多个Device上采集性能数据。
一个用户APP进程内,如果连续调用多次aclprofStart接口,指定重复的Profiling配置,或指定的Device重复,会返回报错。
- 在用户APP的进程生命周期内,aclprofInit接口与aclprofFinalize接口配对使用,建议只调用一次,如该组合多次调用可以改变保存性能数据的文件的路径。
- aclprofStart接口与aclprofStop接口需配对使用。
- aclprofInit接口必须在aclInit接口之后、模型加载之前调用。
- 接口调用顺序:
- 建议的接口调用顺序如下,以“一个用户APP进程内采集多个模型推理时的性能数据”为例:
aclInit接口-->aclprofInit接口-->aclprofStart接口(指定Device 0和Device 1)-->模型1加载-->模型1执行-->aclprofStop接口(与aclprofStart接口的aclprofConfig数据保持一致)-->aclprofStart接口(指定Device 1和Device 2)-->模型2加载-->模型2执行-->aclprofStop接口(与aclprofStart接口的aclprofConfig数据保持一致)-->aclprofFinalize接口-->执行其它任务-->模型卸载-->aclFinalize接口
- 错误的接口调用顺序示例如下,以“一个用户APP进程内,如果连续调用多次aclprofStart接口,指定的Device重复”为例:
aclInit接口-->aclprofInit接口-->aclprofStart接口(指定Device 0和Device 1)-->aclprofStart接口(指定Device 1和Device 2)-->模型1加载-->模型1执行-->模型2加载-->模型2执行-->aclprofStop接口-->aclprofStop接口-->aclprofFinalize-->执行其它任务-->模型卸载-->aclFinalize接口
- 建议的接口调用顺序如下,以“一个用户APP进程内采集多个模型推理时的性能数据”为例:
方式二的接口约束说明
- 接口调用要求:
- aclprofModelSubscribe接口在模型执行之前调用,若在模型执行过程中调用aclprofModelSubscribe接口,Profling采集到的数据为调用aclprofModelSubscribe接口之后的数据,可能导致数据不完整。
- aclprofModelSubscribe接口需与aclprofModelUnSubscribe接口配对使用,不能在调用aclprofModelUnSubscribe接口前,多次调用
aclprofModelSubscribe接口重复订阅相同的模型。
- 不能调用aclprofModelSubscribe接口订阅不存在的模型ID。
- 不能调用aclprofModelUnSubscribe接口取消订阅不存在的模型ID或未订阅过的模型ID。
- 如果在同一个Device上加载了多个模型,只能对多个模型下发同样的订阅配置。
- 接口调用顺序:
- 建议的接口调用顺序如下:
模型加载-->aclprofModelSubscribe接口-->aclprofGetOpDescSize接口-->aclprofGetOpNum接口-->aclprofGetOpType/aclprofGetOpName/aclprofGetOpStart/aclprofGetOpEnd/aclprofGetOpDuration/aclprofGetModelId接口-->aclprofModelUnSubscribe接口
- 错误的接口调用顺序示例如下,以重复定义同一个模型为例:
模型1加载-->aclprofModelSubscribe接口(指定模型1)-->aclprofModelSubscribe接口(指定模型1)-->aclprofModelUnSubscribe接口
- 建议的接口调用顺序如下: