开发者
资源

使用acl.json配置文件采集性能数据

离线推理场景下,用户可以在推理程序中调用acl.json文件,读取性能采集参数,从而自动采集性能原始数据。

采集性能原始数据成功后,可将采集的原始数据取到装有工具的开发环境上进行性能数据解析,展示性能数据解析结果。解析操作请参见使用msprof命令解析、查询与导出性能数据,解析结果文件介绍请参见性能数据文件参考

本节仅介绍如何在推理程序中使能性能数据采集,推理应用完整开发过程请参见《应用开发指南 (C&C++)》

前提条件

  • 在开启性能数据采集之前,请确保推理程序可正常执行。
  • 务必调用aclInit()aclFinalize()完成初始化和去初始化。

操作步骤

参考以下步骤完成acl.json文件配置,并完成应用工程编译和运行:

  1. 打开aclInit()函数所在的推理应用工程代码文件,获取acl.json文件路径。
    1
    2
    3
    4
    5
    6
    7
    8
    // ACL init
    const char *aclConfigPath = "../src/acl.json";
    aclError ret = aclInit(aclConfigPath);
    if (ret != ACL_ERROR_NONE) {
        ERROR_LOG("acl init failed");
        return FAILED;
    }
    INFO_LOG("acl init success");
    

    如果aclInit()初始化为空,则需要修改该函数,补充步骤2创建的acl.json文件路径。

  2. 在查出的目录下修改acl.json文件(如不存在该文件,则需要新建,建议放在工程编译后的src目录下),添加Profiling相关配置,格式如下所示。
    1
    2
    3
    4
    5
    6
    {
    "profiler": {
            "switch": "on",
            "output": "output"
            }
    }
    
    • switch:Profiling开关,取值on或off。

      on表示开启Profiling,off表示关闭Profiling;如果缺失该参数或参数值不为on,则表示关闭Profiling。

      开启Profiling开关后自动采集Runtime等接口和Task Scheduler任务调度信息数据。

    • output:Profiling性能数据落盘路径。未配置本参数时,性能数据默认落盘到应用工程可执行文件所在目录。

      路径中不能包含特殊字符:"\n", "\\n", "\f", "\\f", "\r", "\\r", "\b", "\\b", "\t", "\\t", "\v", "\\v", "\u007F", "\\u007F", "\"", "\\\"", "'", "\'", "\\", "\\\\", "%", "\\%", ">", "\\>", "<", "\\<", "|", "\\|", "&", "\\&", "$", "\\$", ";", "\\;", "`", "\\`"。

      Profiling采集结束后,在该目录下生成PROF开头目录,存放Profiling采集的性能原始数据。支持配置绝对路径或相对路径(相对执行命令行时的当前路径):
      • 绝对路径配置以“/”开头
      • 相对路径配置直接以目录名开始,例如:output。
      • 该参数指定的目录需要确保安装时配置的运行用户具有读写权限。如果该处设置的目录没有读写权限,默认存放采集结果数据到应用工程可执行文件所在目录(确保安装时配置的运行用户具有该目录的读写权限)。
      • 该参数优先级高于ASCEND_WORK_PATH,具体请参考《环境变量参考》
    • storage_limit:指定落盘目录允许存放的最大文件容量。当Profiling数据文件在磁盘中即将占满本参数设置的最大存储空间或剩余磁盘总空间即将被占满时(总空间剩余<=20MB),则将磁盘内最早的文件进行老化删除处理。

      范围[200, 4294967295],单位为MB,例如storage_limit=200MB,默认未配置本参数。

      未配置本参数时,采集前,如果磁盘可用空间小于20MB时,则不落盘数据。

    • aicpu:采集AI CPU算子的详细信息,如:算子执行时间、数据拷贝时间等。可选on或off,默认值为off。
    • aic_metrics:AI Core性能指标采集项。task_time或task_trace配置为on、l1时,该参数生效;task_time或task_trace配置为l0或off时,不执行该参数采集。取值包括:
      • ArithmeticUtilization:计算类指令耗时占比
      • PipeUtilization:计算类和搬运类指令耗时和占比。
      • Memory:内存读写带宽速率
      • MemoryL0:L0读写带宽速率
      • MemoryUB:UB读写带宽速率
      • ResourceConflictRatio:资源冲突占比
      • L2Cache:L2 Cache命中率

        Atlas 推理系列产品:不支持

      • PipelineExecuteUtilization:计算类和搬运类指令耗时和占比

        Atlas 推理系列产品:不支持

        Atlas 训练系列产品:不支持

        Atlas A2 训练系列产品/Atlas A2 推理系列产品:不支持

        Atlas A3 训练系列产品/Atlas A3 推理系列产品:不支持

        Atlas 350 加速卡:不支持

      • MemoryAccess:

        Atlas 200I/500 A2 推理产品:不支持

        Atlas 推理系列产品:不支持

        Atlas 训练系列产品:不支持

        Atlas 350 加速卡:不支持

      默认值:

      Atlas 200I/500 A2 推理产品:PipelineExecuteUtilization

      Atlas 推理系列产品:PipeUtilization

      Atlas 训练系列产品:PipeUtilization

      Atlas A2 训练系列产品/Atlas A2 推理系列产品:PipeUtilization

      Atlas A3 训练系列产品/Atlas A3 推理系列产品:PipeUtilization

      Atlas 350 加速卡:PipeUtilization

      支持自定义需要采集的寄存器,例如:"aic_metrics":"Custom:0x49,0x8,0x15,0x1b,0x64,0x10"。
      • Custom字段表示自定义类型,配置为具体的寄存器值,范围[0x1, 0x7FFFFFFF]。并非所有的可取值都有对应的PMU寄存器,若配置的值无对应PMU寄存器,则采集结果可能为0。
      • 配置的寄存器数最多不能超过8个,寄存器通过“,”区分开。
      • 寄存器的值支持十六进制或十进制。
    • l2:控制L2 Cache命中率和TLB页表缓存命中率采集开关,可选on或off,默认为off。
      • Atlas 200I/500 A2 推理产品:支持采集L2 Cache的命中率;分析AI Core命中L2次数推荐使用aic-metrics=L2Cache。
      • Atlas 推理系列产品:支持采集L2 Cache的命中率
      • Atlas 训练系列产品:支持采集L2 Cache的命中率
      • Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持采集L2 Cache和TLB页表缓存的命中率;分析AI Core命中L2次数推荐使用aic-metrics=L2Cache。
      • Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持采集L2 Cache和TLB页表缓存的命中率;分析AI Core命中L2次数推荐使用aic_metrics=L2Cache。
      • Atlas 350 加速卡:支持采集L2 Cache和TLB页表缓存的命中率;分析AI Core命中L2次数推荐使用aic_metrics=L2Cache。
    • hccl:控制通信数据采集开关。该数据只在多卡、多节点或集群场景下生成。
      • json文件中配置该参数时,可选配on或off。
      • json文件中未配置该参数时,默认为空,不采集;当task_time设置为on时,该参数联动被设置为on。

      此开关后续版本会废弃,请使用task_time开关控制相关数据采集。

    • task_time:控制采集算子下发耗时和算子执行耗时的开关。涉及在task_time、op_summary、op_statistic等文件中输出相关耗时数据。配置值:
      • on:开启。默认为on。
      • off:关闭。
      • l0:采集算子下发耗时、算子执行耗时数据。与l1相比,由于不采集算子基本信息数据,采集时性能开销较小,可更精准统计相关耗时数据。
      • l1:采集算子下发耗时、算子执行耗时数据以及算子基本信息数据,提供更全面的性能分析数据,和配置为on的效果一样。
    • ge_api:采集动态shape算子在Host调度阶段的耗时数据。取值:
      • off:关闭,默认为off。
      • l0:采集动态shape算子在Host调度主要阶段的耗时数据,可更精准统计相关耗时数据。
      • l1:采集动态shape算子在Host调度阶段更细粒度的耗时数据,提供更全面的性能分析数据。
    • ascendcl:控制acl接口性能数据采集的开关,可选on或off,默认为on。可采集acl接口性能数据,包括Host与Device之间、Device间的同步异步内存复制时延等。
    • runtime_api:控制runtime API性能数据采集开关,可选on或off,默认为on。可采集runtime API性能数据,包括Host与Device之间、Device间的同步异步内存复制时延等。
    • sys_hardware_mem_freq:片上内存读写速率、QoS传输带宽、LLC三级缓存带宽、加速器带宽、SoC传输带宽、组件内存占用等的采集频率。不同产品的采集内容略有差异,请以实际结果为准。范围[1,100],单位Hz。默认不采集。

      Atlas 350 加速卡,Qos和SoC支持的采集频率最大支持配置10000,其他采集项支持的最大采集频率仍为100,若配置超出范围,其他采集项则按照最大采集频率100进行采集。

      已知在安装有glibc<2.34的环境上采集memory数据,可能触发glibc的一个已知Bug 19329,通过升级环境的glibc版本可解决此问题。

      对于以下型号,采集任务结束后,不建议用户增大采集频率,否则可能导致SoC传输带宽数据丢失。

      Atlas 200I/500 A2 推理产品

      Atlas A2 训练系列产品/Atlas A2 推理系列产品

      Atlas A3 训练系列产品/Atlas A3 推理系列产品

    • llc_profiling:LLC Profiling采集事件。采集该数据需要设置sys_hardware_mem_freq。取值包括:
      • read:读事件,三级缓存读速率,默认为read。
      • write:写事件,三级缓存写速率。
    • sys_io_sampling_freq:NIC、ROCE、UB带宽数据采集频率。不同产品的采集内容略有差异,请以实际结果为准。范围[1,100],单位Hz。
      • Atlas 200I/500 A2 推理产品:仅RC场景支持采集NIC,容器场景参数不生效
      • Atlas 推理系列产品:不支持该参数。
      • Atlas 训练系列产品:支持采集NIC和ROCE
      • Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持采集NIC和ROCE
      • Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持采集NIC和ROCE
      • Atlas 350 加速卡:UB带宽数据
    • sys_interconnection_freq:集合通信带宽数据(HCCS)、集合通信硬件加速单元(CCU)带宽数据、SIO数据、PCIe数据采集频率,片间传输带宽信息、UB带宽数据采集频率。不同产品的采集内容略有差异,请以实际结果为准。

      范围[1,50],单位Hz。默认不采集。

      • Atlas 200I/500 A2 推理产品不支持该参数。
      • Atlas 推理系列产品:支持采集PCIe数据
      • Atlas 训练系列产品:支持采集HCCS、PCIe数据
      • Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持采集HCCS、PCIe数据、片间传输带宽信息
      • Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持采集HCCS、PCIe数据、片间传输带宽信息、SIO数据
      • Atlas 350 加速卡:支持采集PCIe数据、片间传输带宽信息、SIO数据、CCU带宽数据、UB带宽数据
    • dvpp_freq:DVPP采集频率。范围[1,100],单位Hz。
    • instr_profiling:AI Core和AI Vector的带宽和延时采集频率开关。

      仅单算子API执行场景支持。仅Atlas 350 加速卡支持。

      可能会因最后一段指令的统计时间超长导致统计不准确,建议使用msprof op方式采集。

    • instr_profiling_freq:AI Core和AI Vector的带宽和延时采集频率,范围[300,30000],单位Hz。

      仅单算子API执行场景支持。

      该开关与aicpu、aic_metrics、l2、hccl、task_time、ascendcl、runtime_api互斥,无法同时执行。

      仅以下型号支持该参数:

      Atlas A2 训练系列产品/Atlas A2 推理系列产品

      Atlas A3 训练系列产品/Atlas A3 推理系列产品

    • host_sys:Host侧性能数据采集开关,取值包括:
      • cpu:进程级别的CPU利用率。
      • mem:进程级别的内存利用率。
      • disk:进程级别的磁盘I/O利用率。
      • network:系统级别的网络I/O利用率。
      • osrt:进程级别的syscall和pthreadcall。

      可选其中的一项或多项,选多项时用英文逗号隔开,例如"host_sys": "cpu,mem"。

    • host_sys_usage:采集Host侧系统及所有进程的CPU和内存数据,取值包括cpu和mem。可选其中的一项或多项,选多项时用英文逗号隔开,例如"host_sys_usage": "cpu,mem"。
    • host_sys_usage_freq:配置Host侧系统和所有进程CPU、内存数据的采集频率。范围[1,50],默认值50,单位Hz。
    • msproftx:控制msproftx用户和上层框架程序输出性能数据的开关,可选on或off,默认值为off。

      Profiling开启msproftx功能之前,需要在程序内调用msproftx相关接口来开启程序的Profiling数据流的输出,并开启记录应用程序执行期间特定事件发生的时间跨度。

  3. 配置acl.json文件完成后,参考《应用开发指南 (C&C++)》重新编译应用工程、并运行应用工程。

    “output”指定路径下生成Profiling性能原始数据,如图1所示。

    图1 Profiling性能原始数据

    如果acl.json文件之前已经存在,本处仅是修改文件内容、添加Profiling相关配置,则不需要重新编译应用工程。