Profiling pyACL API(通过Profiling pyACL API采集并落盘性能数据)

通过调用pyACL API方式使能Profiling功能,从而自动采集性能原始数据。采集性能原始数据成功后,可将采集的原始数据拷贝到装有Ascend-cann-toolkit开发套件包的开发环境上进行性能原始数据解析,可视化展示性能原始数据解析结果。

调用接口如Profiling pyACL API所示,调用示例如Profiling pyACL API调用示例所示。

Profiling pyACL API

表1 Profiling pyACL API

接口

说明

acl.prof.create_config

创建Profiling配置。与acl.prof.destroy_config成对使用。

acl.prof.init

初始化Profiling,目前用于设置保存性能数据的文件的路径。与acl.prof.finalize成对使用。

acl.prof.start

下发Profiling请求,使能对应数据的采集。与acl.prof.stop成对使用。

acl.prof.stop

停止Profiling数据采集。与acl.prof.start成对使用。

acl.prof.finalize

结束Profiling。与acl.prof.init成对使用。

acl.prof.destroy_config

销毁通过acl.prof.create_config接口创建的aclprofConfig类型。与acl.prof.create_config成对使用。

  • 调用acl.prof.init后,会采集后续所有模型加载数据,包括Device侧、Host侧以及timeline汇总数据。如果在调用acl.prof.start接口时,仅指定部分Device采集性能数据,那么其余Device由于仅存在模型加载数据而无法解析。
  • acl.prof.init接口传入的Profiling性能采集数据的落盘路径,需要确保用户进程具有读写权限。

Profiling pyACL API详细介绍请参见Profiling pyACL API(通过Profiling pyACL API采集并落盘性能数据)

Profiling pyACL API调用示例

Profiling pyACL API,示例如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import acl
import numpy as np
# ......

# 1.申请运行管理资源,包括设置用于计算的Device、创建Context、创建Stream
# ......
stream, ret = acl.rt.create_stream()

# 2.模型加载,加载成功后,返回标识模型的model_id
# ......

# 3.创建aclmdlDataset类型的数据,用于描述模型的输入数据input、输出数据output
# ......

# 4.Profiling初始化
# 设置数据落盘路径
PROF_INIT_PATH='...'
ret = acl.prof.init(PROF_INIT_PATH)

# 5.进行Profiling配置
device_list = [0]
ACL_PROF_ACL_API = 0x0001
ACL_PROF_TASK_TIME = 0x0002
ACL_PROF_AICORE_METRICS = 0x0004
# 创建配置类型指针地址
prof_config = acl.prof.create_config(device_list, 0, 0, ACL_PROF_ACL_API | ACL_PROF_TASK_TIME | ACL_PROF_AICORE_METRICS)
ret = acl.prof.start(prof_config)

step_info = acl.prof.create_step_info()
ret =acl.prof.get_step_timestamp(step_info, ACL_STEP_START, stream)

# 6.执行模型
ret = acl.mdl.execute(model_id, input, output)

# 7.处理模型推理结果
# ......

# 8.释放描述模型输入/输出信息、内存等资源,卸载模型
# ......

ret =acl.prof.get_step_timestamp(step_info, ACL_STEP_END, stream)
acl.prof.destroy_step_info(step_info)

# 9.关闭Profiling配置, 释放配置资源, 释放Profiling组件资源
ret = acl.prof.stop(prof_config)
ret = acl.prof.destroy_config(prof_config)
ret = acl.prof.finalize()

# 10.释放运行管理资源
# ......
  • 上述Profiling pyACL API调用示例中acl.prof.create_config接口的配置参数取值包括:
    ACL_PROF_ACL_API | ACL_PROF_TASK_TIME | ACL_PROF_AICPU | ACL_PROF_AICORE_METRICS | ACL_PROF_L2CACHE | ACL_PROF_HCCL_TRACE | ACL_PROF_MSPROFTX | ACL_PROF_RUNTIME_API

    请根据实际情况选择需要的采集参数。参数详细介绍请参见函数:create_config章节中的data_type_config字段说明。

  • 若需要采集迭代内指定范围的pyACL接口耗时(包括执行模型以及其他动作的的接口),可参照以上示例代码在相应代码片段前后添加Profiling pyACL API(标记迭代时间接口)