E2E profiling数据采集

E2E profiling基础用法

  1. 获取性能数据文件。

    with torch_npu.npu.profile(profiler_result_path="./result", use_e2e_profiler=True):
    
         model_train()
    • profiler_result_path表示profiling结果保存路径,默认为当前路径。
    • use_e2e_profiler表示是否开启E2E profiling功能,默认为False(仅开启CANN profiling功能,采集CANN层面的数据)。

    因NPU算子需要编译后才能执行,为保证数据的准确性,建议先运行10个step,在第十个step后再进行E2E prof操作,并且一般只需要profiling1个或者2个step即可。

    if step ==11:
       with torch_npu.npu.profile(profiler_result_path="./result", use_e2e_profiler=True):
    
            model_train()

  2. 解析性能数据。

    使用E2E profiling工具获得的结果为原始数据,需要解析查看。

    1. 切换至如图1路径,执行脚本,msprof工具路径请根据实际安装路径修改。
      /usr/local/Ascend/ascend-toolkit/latest/toolkit/tools/profiler/bin/msprof --export=on --output=./ 
      图1 原始数据路径
    2. 运行完成后,在原始数据路径下生成timeline目录,timeline路径下为解析得到的json格式的性能数据文件。

    3. 在Chrome浏览器中输入“chrome://tracing”地址,将json文件拖到空白处打开,通过键盘上的快捷键(w:放大, s:缩小, a:左移, d:右移)进行查看。

      该示例分为4个层次,由上到下,第一层MsprofTx为PyTorch框架数据,第二层AscendCL为AscendCL层面数据,第三层Task Scheduler为device上数据,第四层为AI CPU上数据。

E2E profiling高级设置

E2E prof工具默认配置获取上述所有层面数据。获取数据过程亦会影响性能,若获取数据过多,会导致性能数据不具备参考价值。因此,E2E prof工具提供了可配置选项,用于精细化控制获取部分层面数据。

with torch_npu.npu.profile(profiler_result_path="./results", use_e2e_profiler=True, \
                        config=torch_npu.npu.profileConfig(ACL_PROF_ACL_API=True, \
                        ACL_PROF_TASK_TIME=True, ACL_PROF_AICORE_METRICS=True, \
                        ACL_PROF_AICPU=True, ACL_PROF_L2CACHE=False, \
                        ACL_PROF_HCCL_TRACE=True, ACL_PROF_TRAINING_TRACE=False, \
                        aiCoreMetricsType=0)):
表1 配置参数说明

参数名称

参数含义

参数说明

ACL_PROF_ACL_API

采集AscendCL接口的性能数据。

默认True

ACL_PROF_TASK_TIME

采集AI CORE算子的执行时间。

默认True

ACL_PROF_AICORE_METRICS

采集AI CORE性能指标数据。

默认为True。当值为True时,aicore_metrics入参处配置的性能指标采集项才有效。

ACL_PROF_AICPU

采集AI CPU任务的开始、结束轨迹数据。

默认为True

ACL_PROF_L2CACHE

采集L2 Cache数据,该数据会导致prof结果膨胀。

默认False

ACL_PROF_HCCL_TRACE

采集HCCL数据。

默认为True

ACL_PROF_TRAINING_TRACE

表示迭代轨迹数据,记录模型正向和反向等步骤。

默认为False

aiCoreMetricsType

表2

表2

表2 aiCoreMetricsType取值和定义说明表

参数取值

相关参数

参数定义

采集项

0

ACL_AICORE_ARITHMETIC_UTILIZATION

各种计算类指标占比统计。

mac_fp16_ratio、mac_int8_ratio、vec_fp32_ratio、vec_fp16_ratio、vec_int32_ratio、vec_misc_ratio。

1

ACL_AICORE_PIPE_UTILIZATION

计算单元和搬运单元耗时占比。

vec_ratio、mac_ratio、scalar_ratio、mte1_ratio、mte2_ratio、mte3_ratio、icache_miss_rate。

2

ACL_AICORE_MEMORY_BANDWIDTH

外部内存读写类指令占比。

ub_read_bw、ub_write_bw、l1_read_bw、l1_write_bw、l2_read_bw、l2_write_bw、main_mem_read_bw、main_mem_write_bw。

3

ACL_AICORE_L0B_AND_WIDTH

内部内存读写类指令占比。

scalar_ld_ratio、scalar_st_ratio、l0a_read_bw、l0a_write_bw、l0b_read_bw、l0b_write_bw、l0c_read_bw、l0c_write_bw。

4

ACL_AICORE_RESOURCE_CONFLICT_RATIO

流水线队列类指令占比。

vec_bankgroup_cflt_ratio、vec_bank_cflt_ratio、vec_resc_cflt_ratio、mte1_iq_full_ratio、mte2_iq_full_ratio、mte3_iq_full_ratio、cube_iq_full_ratio、vec_iq_full_ratio、iq_full_ratio。

0x FF

ACL_AICORE_NONE

不采集。