开发者
资源

数据采集

功能说明

采集服务化性能数据。

注意事项

  • 服务化调优工具的acl_task_time开关与msprof工具的动态采集功能存在冲突,建议不要同时使用。msprof工具的动态采集功能相关介绍请参见《性能调优工具用户指南》

使用示例

  1. 创建采集配置文件。服务化性能数据采集通过json配置文件,配置采集数据的开关、保存路径等。
    • 自动创建:该文件支持自动创建,在2过程中配置SERVICE_PROF_CONFIG_PATH环境变量后,运行MindIE Motor服务可自动创建默认配置的json文件。
    • 手动创建:该json配置文件可以在任意路径下新建,此处以ms_service_profiler_config.json文件名为例,配置文件格式如下:
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      {
          "enable": 1,
          "prof_dir": "${PATH}",
          "profiler_level": "INFO",
          "acl_task_time": 0,
          "acl_prof_task_time_level": "",
          "aclDataTypeConfig": "",
          "aclprofAicoreMetrics": "",
          "api_filter": "",
          "kernel_filter": "",
          "timelimit": 0,
          "domain": "",
          "torch_prof_stack": false,
          "torch_prof_modules": false,
          "torch_prof_step_num": 0
      }
      
      表1 参数说明

      参数

      说明

      是否必选

      enable

      是否开启性能数据采集的开关,取值为:

      • 0:关闭。
      • 1:开启。

      prof_dir

      采集到的性能数据的存放路径,可自定义,str类型,默认值为${HOME}/.ms_server_profiler。

      profiler_level

      数据采集等级,取值为INFO。

      host_system_usage_freq

      CPU和内存系统指标采集频率,默认关闭不采集。范围整数1~50,单位Hz,表示每秒采集的次数。设置为-1时关闭采集该指标。

      说明:

      开启该功能可能占用较大内存,不建议修改。

      npu_memory_usage_freq

      NPU Memory使用率指标的采集频率,默认关闭不采集。范围整数1~50,单位Hz,表示每秒采集的次数。设置为-1时关闭采集该指标。

      说明:

      开启该功能可能占用较大内存,不建议修改。

      acl_task_time

      开启采集算子下发耗时、算子执行耗时数据的开关,取值为:

      • 0:关闭。默认值,配置为0或其他非法值均表示关闭。
      • 1:开启。

        该功能开启时调用aclprofCreateConfig接口的ACL_PROF_TASK_TIME_L0参数。

      • 2:开启基于MSPTI接口的数据落盘。
        该功能开启时调用MSPTI接口进行性能数据采集,需要在拉起服务前配置如下环境变量:
        export LD_PRELOAD=${INSTALL_DIR}/lib64/libmspti.so

        ${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。以root用户安装为例,安装后文件默认存储路径为:/usr/local/Ascend/cann。

      • 3:开启基于Torch Profiler接口的数据落盘。
      说明:
      • 以上aclprofCreateConfig接口及MSPTI接口详细介绍请参见《性能调优工具用户指南》
      • 该功能开启时会占用一定的设备性能,导致采集的性能数据不准确,建议在模型执行耗时异常时开启,用于更细致的分析。

      acl_prof_task_time_level

      设置性能数据采集的Level等级和时长,取值为:

      • L0:Level0等级,表示采集算子下发耗时、算子执行耗时数据。与L1相比,由于不采集算子基本信息数据,采集时性能开销较小,可更精准统计相关耗时数据。等同于aclDataTypeConfig参数配置ACL_PROF_MSPROFTX、ACL_PROF_TASK_TIME_L0。
      • L1:Level1等级,采集AscendCL接口的性能数据,包括Host与Device之间、Device间的同步异步内存复制时延;采集算子下发耗时、算子执行耗时数据以及算子基本信息数据,提供更全面的性能分析数据。等同于aclDataTypeConfig参数配置ACL_PROF_MSPROFTX、ACL_PROF_TASK_TIME、ACL_PROF_ACL_API。
      • <time>:采集时长,取值范围为1~999的正整数,单位s。

      默认未配置本参数,表示采集L0数据,且采集到程序执行结束。配置其他非法值时取默认值。

      采集的Level等级和时长可同时配置,例如"acl_prof_task_time_level": "L1;10"。

      aclDataTypeConfig

      用户选择如下多个宏进行逻辑或,每个宏表示某一类性能数据,取值为:

      以下采集项的结果数据可参见采集数据说明,但具体采集结果请以实际情况为准。

      以下采集项一次可以配置一个或多个,例如:"aclDataTypeConfig": "ACL_PROF_ACL_API"或"aclDataTypeConfig": "ACL_PROF_ACL_API, ACL_PROF_TASK_TIME"。

      • ACL_PROF_ACL_API:表示采集接口的性能数据,包括Host与Device之间、Device间的同步异步内存复制时延等。
      • ACL_PROF_TASK_TIME:采集算子下发耗时、算子执行耗时数据以及算子基本信息数据,提供更全面的性能分析数据。
      • ACL_PROF_TASK_TIME_L0:采集算子下发耗时、算子执行耗时数据。与ACL_PROF_TASK_TIME相比,由于不采集算子基本信息数据,采集时性能开销较小,可更精准统计相关耗时数据。
      • ACL_PROF_OP_ATTR:控制采集算子的属性信息,当前仅支持aclnn算子。
      • ACL_PROF_AICORE_METRICS:表示采集AI Core性能指标数据,逻辑或时必须包括该宏,aicoreMetrics入参处配置的性能指标采集项才有效。
      • ACL_PROF_TASK_MEMORY:控制CANN算子的内存占用情况采集开关,用于优化内存使用。单算子场景下,按照GE组件维度和算子维度采集算子内存大小及生命周期信息(单算子API执行方式不采集GE组件内存);静态图和静态子图场景下,在算子编译阶段按照算子维度采集算子内存大小及生命周期信息。
      • ACL_PROF_AICPU:表示采集AI CPU任务的开始、结束数据。
      • ACL_PROF_L2CACHE:表示采集L2 Cache数据。
      • ACL_PROF_HCCL_TRACE:控制通信数据采集开关。
      • ACL_PROF_TRAINING_TRACE:控制迭代轨迹数据采集开关。
      • ACL_PROF_RUNTIME_API:控制runtime api性能数据采集开关。
      • ACL_PROF_MSPROFTX:获取用户和上层框架程序输出的性能数据。可在采集进程内(aclprofStart接口、aclprofStop接口之间)调用如下两种接口开启记录应用程序执行期间特定事件发生的时间跨度,并写入性能数据文件,再使用msprof工具解析该文件,并导出展示性能分析数据:
        • mstx API(MindStudio Tools Extension API)接口详细操作请参见mstx API使用示例
        • msproftx扩展接口详细操作请参见“Profiling性能数据采集”

      默认未配置本参数,以acl_prof_task_time_level参数配置为L0为准。

      aclprofAicoreMetrics

      AI Core性能指标采集项,取值为:

      以下采集项的结果数据可参见op_summary(算子详细信息),但具体采集结果请以实际情况为准。

      以下采集项一次只能配置一个,例如:"aclprofAicoreMetrics": "ACL_AICORE_PIPE_UTILIZATION"。

      • ACL_AICORE_PIPE_UTILIZATION:计算单元和搬运单元耗时占比。
      • ACL_AICORE_MEMORY_BANDWIDTH:外部内存读写类指令占比。
      • ACL_AICORE_L0B_AND_WIDTH:内部内存读写类指令占比。
      • ACL_AICORE_RESOURCE_CONFLICT_RATIO:流水线队列类指令占比。
      • ACL_AICORE_MEMORY_UB:内部内存读写指令占比。
      • ACL_AICORE_L2_CACHE:读写cache命中次数和缺失后重新分配次数。
      • ACL_AICORE_NONE = 0xFF

      默认值为ACL_AICORE_PIPE_UTILIZATION。

      仅当aclDataTypeConfig配置了ACL_PROF_AICORE_METRICS后,本接口的配置才能生效。

      api_filter

      对性能数据进行过滤,配置该参数可自定义采集配置的API性能数据,例如传入“matmul”会落盘所有API数据中name字段包含matmul的性能数据。str类型,区分大小写,多个不同的筛选目标用“;”隔开,默认为空,表示落盘所有数据。

      仅当acl_task_time参数值为2时生效。

      kernel_filter

      对性能数据进行过滤,配置该参数可自定义采集配置的Kernel性能数据,例如传入“matmul”会落盘所有Kernel数据中name字段包含matmul的性能数据。str类型,区分大小写,多个不同的筛选目标用“;”隔开,默认为空,表示落盘所有数据。

      仅当acl_task_time参数值为2时生效。

      timelimit

      设置服务化性能数据采集的时长,配置该参数后,采集进程将在运行指定的时间后自动停止,取值范围为0~7200的整数,单位s,默认值0(表示不限制采集时间)。

      说明:

      该采集时长建议最短设置为120s,可以根据实际情况进行增加,若采集时间过短,可能会导致数据不满足解析输出件生成,打印告警提示。

      domain

      设置采集指定domain域下的性能数据,减少采集数据量。输入参数为字符串格式,英文分号作为分隔符,区分大小写,例如:"Request; KVCache"。

      默认为空,表示采集当前所有domain域内性能数据。

      当前已有domain域为:Request、KVCache、ModelExecute、BatchSchedule、Communication、eplb_observe。

      其中配置eplb_observe域并且使能MindIE专家热点信息采集的接口MINDIE_ENABLE_EXPERT_HOTPOT_GATHER和MINDIE_EXPERT_HOTPOT_DUMP_PATH时,采集到的数据中将包含专家热点信息,解析结果生成专家热点信息热力图。建议用户在需要采集专家热点信息时,单独使能eplb_observe domain域。

      说明:

      若指定domain域不全,采集数据不满足解析输出件生成时,则打印告警提示。查看表1

      torch_prof_stack

      采集算子调用栈信息,包括框架层及CPU算子层的调用信息。取值为:

      • false:关闭。默认值。
      • true:开启。
      说明:
      • 开启该配置前需要配置acl_task_time参数值为3。
      • 开启该配置后会引入额外的性能膨胀。

      torch_prof_modules

      采集modules层级的Python调用栈信息,即框架层的调用信息。取值为:

      • false:关闭。默认值。
      • true:开启。
      说明:
      • 开启该配置前需要配置acl_task_time参数值为3。
      • 开启该配置后会引入额外的性能膨胀。

      torch_prof_step_num

      采集的step轮数。取值为大于等于0的整数,默认值为0(表示采集所有step)。

      说明:

      开启该配置前需要配置acl_task_time参数值为3。

  2. 执行采集数据。
    1. 配置环境变量,指定采集配置文件ms_service_profiler_config.json。
      export SERVICE_PROF_CONFIG_PATH="./ms_service_profiler_config.json"
      • 若环境变量配置路径下不存在json配置文件,会在路径下自动创建默认配置的json文件,且enable开关为0关闭状态,需要在运行MindIE Motor服务后执行2.c,配置enable开关为1,开启采集任务
      • 若环境变量配置路径下已存在同名的json文件,则不会创建json文件。
    2. 运行MindIE Motor服务。
    3. 开启采集任务。

      重新开启一个命令行窗口,用户可以通过修改ms_service_profiler_config.json配置中的“enable”字段,实时切换数据采集功能的开启和关闭。开启和关闭采集功能时产生相应日志,见说明

      采集完成后,Profiling性能数据落盘在ms_service_profiler_config.json中prof_dir参数指定的路径下。

    多机多卡场景可使用Samba工具实现共享配置文件,以此实现对多机多卡场景的性能数据采集。其中多机多卡场景执行采集步骤与上文一致,但需要每个节点分别启动MindIE Motor服务。Samba为第三方工具,请用户自行查找对应使用指导,或使用其他支持配置共享目录的工具。

    服务化性能数据采集支持运行时动态启停。动态启停指在启动采集任务后,执行采集操作过程中可以随时启动和暂停采集。

    动态启停场景主要为以下三种:

    • 关闭到开启。启动MindIE Motor服务前,json配置文件中“enable”字段设置为0,运行MindIE Motor服务后修改文件中“enable”字段为1,日志中打印开启采集功能的相关信息:

    • 开启到关闭。启动MindIE Motor服务前,json配置文件中“enable”字段设置为1,运行MindIE Motor服务后修改文件中“enable”字段为0,日志中打印关闭采集功能的相关信息:

    • 修改json配置文件内容,但“enable”字段未更改,采集功能运行状态不变,日志中打印相关信息:

输出说明

进行服务化性能数据采集过程中会有日志打印,提示采集进程的状态,可以通过PROF_LOG_LEVEL环境变量控制日志打印。详细操作如下:

PROF_LOG_LEVEL环境变量用于配置数据采集打印日志等级,示例如下:

export PROF_LOG_LEVEL=INFO

日志等级可设置为(不设置默认等级为INFO):

  • INFO:包含是否开启Profiling数据采集,数据落盘路径等信息。
    示例如下:
    1
    2
    3
    [msservice_profiler] [PID:52856] [INFO] [ReadEnable:306] profile enable_: true
    [msservice_profiler] [PID:52856] [INFO] [ReadAclTaskTime:335] profile enableAclTaskTime_: false
    [msservice_profiler] [PID:52856] [INFO] [StartProfiler:661] prof path: ./log/0423-0852/
    
  • DEBUG:详细日志信息,在INFO日志的基础上包含配置文件路径信息,是否开启NPU、CPU数据采集等。
    示例如下:
    1
    2
    3
    4
    [msservice_profiler] [PID:82231] [DEBUG] [ReadConfig:275] SERVICE_PROF_CONFIG_PATH : prof.json
    [msservice_profiler] [PID:82231] [DEBUG] [ReadLevel:386] profiler_level: 20
    [msservice_profiler] [PID:82231] [DEBUG] [ReadHostConfig:510] host_system_usage_freq Disabled
    [msservice_profiler] [PID:82231] [DEBUG] [ReadNpuConfig:541] npu_memory_usage_freq Disabled
    
  • WARNING:除INFO外包含参数配置错误,动态库加载失败等告警信息。
    1
    2
    3
    4
    [msservice_profiler] [PID:43982] [WARNING] [ReadEnable:323] enable value is not an integer, will set false.
    [msservice_profiler] [PID:43984] [WARNING] [ReadEnable:323] enable value is not an integer, will set false.
    [msservice_profiler] [PID:43993] [WARNING] [ReadEnable:323] enable value is not an integer, will set false.
    [msservice_profiler] [PID:44002] [WARNING] [ReadEnable:323] enable value is not an integer, will set false.
    
  • ERROR:除报错外无打印日志。
    示例如下:
    1
    [msservice_profiler] [PID:87888] [ERROR] [StartProfiler:677] create path(./log/0423-1007/) failed