性能分析思路

Profiling系统调优的目的是通过分析AI任务运行时采集的性能数据,判断AI任务运行时的软硬件性能瓶颈。可以根据图1来对数据进行分析。

图1 Profiling性能分析思路

为了保证Profiling执行时不占用过多的设备资源,导致采集性能数据不准确,以下为推荐的操作步骤:

  1. 根据推理或训练场景选择Profiling采集的方式。
  2. 执行一次默认采集项的Profiling采集、解析并导出timeline和summary数据。

    默认采集性能数据如下:

    表1 msprof默认配置采集的性能数据文件

    文件夹

    文件名

    说明

    timeline

    msprof*.json

    timeline数据总表。

    acl_*.json

    AscendCL接口调用时序。

    ai_stack_time_*.json

    昇腾AI软件栈各组件(AscendCL,GE,Runtime,Task Scheduler等)运行时序。

    ge_*.json

    GE接口耗时数据。

    step_trace_*.json

    迭代轨迹数据,每轮迭代的耗时。

    task_time_*.json

    Task Scheduler任务调度时序。

    thread_group_*.json

    AscendCL,GE,Runtime组件耗时数据。

    summary

    acl_*.csv

    AscendCL API调用过程。

    acl_statistic_*.csv

    AscendCL API数据统计。

    op_summary_*.csv

    AI Core和AI CPU算子数据。

    op_statistic _*.csv

    AI Core和AI CPU算子调用次数及耗时统计。

    step_trace_*.csv

    迭代轨迹数据。

    task_time_*.csv

    Task Scheduler任务调度信息。

    ai_stack_time_*.csv

    昇腾AI软件栈各组件(AscendCL,GE,Runtime,Task Scheduler等)信息。

    fusion_op_*.csv

    模型中算子融合前后信息。

    prof_rule_0.json

    调优建议。

    注:“*”表示{device_id}_{model_id}_{iter_id},其中{device_id}表示设备ID,{model_id}表示模型ID,{iter_id}表示某轮迭代的ID。这些字段可以使用数据解析与导出完成数据解析后,使用数据解析与导出中的“查询Profiling数据文件信息查询功能”对结果文件进行查询得出,若查询某些字段显示为N/A(为空)则在导出的结果文件名中不展示。

  3. 查看所有迭代轨迹(step_trace_*.json)耗时数据的timeline文件,观察并找出耗时长的迭代。
  4. 导出查看迭代轨迹数据中Top耗时的迭代汇总数据的timeline文件(msprof*.json)并进一步分析接口或算子内耗时长的信息。
  5. 针对耗时长的接口或算子找到对应summary数据文件查看详细信息,定位出最小粒度的事件。
  6. 最后针对最小粒度事件进行具体的优化。
  7. 重复执行1~6步,对比优化前后的性能数据,确认是否成功调优。

对于其他非默认数据比如采集昇腾AI处理器系统数据、msproftx数据等,可以单独采集并执行步骤1~步骤7步操作。