AI Core和AI CPU算子数据

AI Core和AI CPU算子数据op_summary_*.csv,用于统计算子的具体信息和耗时情况。

op_summary_*.csv文件内容格式示例(示例仅展示部分参数,详情请参见表1)如下。

图1 Atlas A2训练系列产品

Task Duration字段为算子耗时信息,可以按照Task Duration排序,找出高耗时算子;也可以按照Task Type排序,查看AI Core或AI CPU上运行的高耗时算子。

图中数据分别由--task-time和--aic-metrics开关控制。其中--task-time=l0时,部分数据不采集,详情请参见表1;当--task-time=l1时表1中的字段均采集;当配置--aic-metrics参数时,不同选项采集的数据不同,详情请参见AI Core/AI Vector Core性能指标采集项说明AI Core/AI Vector Core性能指标采集项说明(Atlas A2训练系列产品)

仅以msprof命令行工具的参数为例,其他采集方式对应相同参数。

  • MatMul算子的输入a、b矩阵满足:内轴大于1000,MAC理论计算耗时大于50us,内轴大小非516B对齐时,MatMul会转化为MIX算子,此时op_summary.csv中的MatMul算子数量减少且Task Type由原来的AI_Core转变为MIX_AIC。(Atlas A2训练系列产品
  • 由于Task Type为HCCL类型的算子通常包含一系列通信任务,每个通信任务均有独立的Task ID和Stream ID等标识,此处不作展示,因此该类算子的Task ID和Stream ID为N/A。
  • 算子的输入维度Input Shapes取值为空,即表示为“; ; ; ;”格式时,表示当前输入的为标量,其中“;”为每个维度的分隔符。算子的输出维度同理。
  • 工具会检测算子溢出情况,若发现算子溢出,则提示如下告警,此时该算子的计算结果不可信。
    图2 算子溢出告警
关键字段说明如下。
表1 字段说明

字段名

字段解释

Model Name

模型名称。如果Model Name值为空,则可能为获取的数据中该值为空。(默认情况下或单算子场景不显示该字段)

Model ID

模型ID。

Task ID

Task任务的ID。

Stream ID

该Task所处的Stream ID。

Infer ID

标识第几轮推理数据。(默认情况下或单算子场景不显示该字段)

Op Name

算子名称。

OP Type

算子类型。task-time配置为l0时,不采集该字段,显示为N/A。

Task Type

执行该Task的加速器类型,包含AI Core、AI VECTOR CORE、AI CPU等。task-time配置为l0时,不采集该字段,显示为N/A。

Task Start Time(us)

Task开始时间,单位us。

Task Duration(us)

Task耗时,包含调度到加速器的时间、加速器上的执行时间以及结束响应时间,单位us。

Task Wait Time(us)

上一个Task的结束时间与当前Task的开始时间间隔,单位us。

Block Dim

Task运行切分数量,对应Task运行时核数。task-time配置为l0时,不采集该字段,显示为0。

Mix Block Dim

Atlas A2训练系列产品,部分算子同时在AI Core和Vector Core上执行,主加速器的Block Dim在Block Dim字段描述,从加速器的Block Dim在本字段描述。task-time配置为l0时,不采集该字段,显示为N/A。

Input Shapes

算子的输入维度。task-time配置为l0时,不采集该字段,显示为N/A。

Input Data Types

算子输入数据类型。task-time配置为l0时,不采集该字段,显示为N/A。

Input Formats

算子输入数据格式。task-time配置为l0时,不采集该字段,显示为N/A。

Output Shapes

算子的输出维度。task-time配置为l0时,不采集该字段,显示为N/A。

Output Data Types

算子输出数据类型。task-time配置为l0时,不采集该字段,显示为N/A。

Output Formats

算子输出数据格式。task-time配置为l0时,不采集该字段,显示为N/A。

Context ID

Context ID。task-time配置为l0时,不采集该字段,显示为N/A。(Atlas A2训练系列产品

aiv_time(us)

当所有的Block被同时调度,且每个Block的执行时长相等时,该Task在AI Vector Core上的理论执行时间,单位us。通常情况下,不同的Block开始调度时间略有差距,故该字段值略小于Task在AI Vector Core上的实际执行时间。--task-time=l1、--aic-mode=task-based时生成。(Atlas A2训练系列产品

aicore_time(us)

当所有的Block被同时调度,且每个Block的执行时长相等时,该Task在AI Core上的理论执行时间,单位us。通常情况下,不同的Block开始调度时间略有差距,故该字段值略小于Task在AI Core上的实际执行时间。手动调频、功耗超出默认功耗值时动态调频以及Atlas 300V/Atlas 300I Pro情况下该数据不准确,不建议参考。

--task-time=l1、--aic-mode=task-based时生成。

total_cycles

该Task在AI Core上执行的cycle总数,由所有的Block的执行cycle数累加而成。

--task-time=l1、--aic-mode=task-based时生成。

寄存器值

自定义采集的寄存器的数值。由--aic-metrics配置自定义寄存器控制。