昇腾社区首页
中文
注册
开发者
下载

动态采集性能数据

动态采集性能数据的主要功能是在执行采集的过程中可以随时启动和停止采集进程。

使用说明

动态采集性能数据可以通过launch和attach两种方式执行:

  • launch方式:msprof命令行启动动态采集时,同步调起AI任务并进入性能数据采集交互模式,可以通过命令随时启动和停止采集。
  • attach方式:用户先自行启动AI任务,再启动msprof动态采集并进入性能数据采集交互模式,可以通过命令随时启动和停止采集。
  • 若用户进程被设置为后台执行,将导致launch方式失效从而无法进入交互界面,此时建议使用attach方式动态采集性能数据。
  • 推荐解析并导出性能数据对采集后的PROF_XXX目录进行性能数据解析和导出。
  • 若在容器里拉起的业务进程,则也需要在容器里执行msprof采集命令。

支持的型号

Atlas 200I/500 A2 推理产品

Atlas 推理系列产品

Atlas 训练系列产品

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

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

注意事项

  • 使用该方式采集数据前请确保完成使用前准备
  • 动态采集性能数据前,需确保AI任务能在运行环境中正常运行。
  • attach方式下启动训练任务前需设置环境变量:
    export PROFILING_MODE=dynamic

约束说明

  • 在同一AI任务下,同一时间内仅允许一个用户进入交互模式。
  • 进入交互模式后未启动数据采集,30分钟后将自动退出,执行命令可重新进入交互模式。
  • 多卡(含集群)场景下推荐使用attach方式进行动态采集性能数据,仅支持逐一采集每张卡的性能数据。
  • 本功能与延迟采集性能数据--delay--duration参数)不能同时配置。
  • launch方式下,在传入的用户程序中,不能设置环境变量“PROFILING_MODE”和“PROFILING_OPTIONS”。

命令示例

以下两种方式任选其一。

  • launch方式:
    msprof --dynamic=on --output=/home/projects/output --model-execution=on --runtime-api=on --aicpu=on /home/projects/MyApp/out/main
    > start
        
    ...
    > stop
       
    ...
    > quit
       
    ...

    动态采集性能数据必须传入用户程序。

  • attach方式:
    msprof --dynamic=on --pid=<pid> --output=/home/projects/output --model-execution=on --runtime-api=on --aicpu=on
    > start
        
    ...
    > stop
       
    ...
    > quit
       
    ...

动态采集性能数据功能命令行可以选择所需的采集项,在命令行上添加采集AI任务运行性能数据采集昇腾AI处理器系统数据等采集参数即可。

采集所生成的性能数据保存在--output参数指定目录下,数据结果与命令指定性能数据采集和自动解析中的采集参数有关。

参数说明

表1 参数说明

参数

描述

可选/必选

--dynamic

控制动态采集性能数据的开关,可选on或off,默认值为off。

必选

--pid

指定一个需要采集的AI任务的PID。获取PID的方法可参考获取AI任务PID

attach方式必选

start

启动采集。

可选

stop

停止采集。每完成一次start和stop命令,在--output参数指定路径下生成一个存放数据文件的PROF_XXX目录。

可选

quit

停止采集并退出交互模式。AI任务正常运行,执行msprof命令可再次进入交互模式。

可选

  • start 、stop命令执行次数上限为100,两条命令执行次数总和超过100次后,服务端将终止连接,即最多采集50份性能数据。重新连接服务端时,重新计算次数。
  • 反复执行start 、stop命令时,可能因stop结束Profiling流程而终止了CANN组件的数据上报,因此打印ERROR日志,为正常现象。

获取AI任务PID

  • AI任务在物理机环境直接运行

    在该环境下执行如下命令查看AI任务的PID。

    npu-smi info

    打印结果如下,Process id字段即为该AI任务的PID。

    1
    2
    3
    4
    5
    +---------------------------+---------------+----------------------------------------------------+
    | NPU     Chip              | Process id    | Process name             | Process memory(MB)      |
    +===========================+===============+====================================================+
    | 0       0                 | 830236        | python3                  | 58                      |
    +===========================+===============+====================================================+
    
  • AI任务在特权容器中运行

    该场景下,动态采集操作的--pid参数需要指定的PID为AI任务在特权容器中运行的PID。

    需要通过如下步骤来查看该AI任务在特权容器中运行的PID。

    1. 执行如下命令,查看该AI任务运行时在宿主机中对应的PID。
      npu-smi info

      无论在特权容器中还是在特权容器的宿主机中,npu-smi info命令都只能显示该AI任务运行时在宿主机中对应的PID。

      打印结果如下,Process id字段即为该AI任务运行时在宿主机中对应的PID,此处以PID为837666为例。
      1
      2
      3
      4
      5
      +---------------------------+---------------+----------------------------------------------------+
      | NPU     Chip              | Process id    | Process name             | Process memory(MB)      |
      +===========================+===============+====================================================+
      | 0       0                 | 837666        |                          | 58                      |
      +===========================+===============+====================================================+
      
    2. 在宿主机视图下执行如下命令,查看该AI任务在宿主机中与在特权容器中,PID的映射关系。
      cat /proc/837666/status | grep NSpid
      打印结果如下。
      NSpid:	837666	849

      此处的849即为该AI任务在特权容器中运行的PID,动态采集操作的--pid参数需要指定的PID为849。

  • AI任务在非特权容器中运行
    • 方式一:直接在非特权容器视图下执行如下命令,查看该AI任务在非特权容器中运行的PID。
      npu-smi info
      打印结果如下,Process id字段即为该AI任务在非特权容器中运行的PID。
      +---------------------------+---------------+----------------------------------------------------+
      | NPU     Chip              | Process id    | Process name             | Process memory(MB)      |
      +===========================+===============+====================================================+
      | 0       0                 | 849       |                          | 58                      |
      +===========================+===============+====================================================+
    • 方式二:在非特权容器的宿主机视图下执行如下命令,查看该AI任务运行时在宿主机中对应的PID。
      npu-smi info
      打印结果如下,Process id字段即为该AI任务运行时在宿主机中对应的PID,此处以PID为837666为例。
      +---------------------------+---------------+----------------------------------------------------+
      | NPU     Chip              | Process id    | Process name             | Process memory(MB)      |
      +===========================+===============+====================================================+
      | 0       0                 | 837666        |                          | 58                      |
      +===========================+===============+====================================================+
      在宿主机视图下执行如下命令,查看该AI任务在宿主机中与在特权容器中,PID的映射关系。
      cat /proc/837666/status | grep NSpid
      打印结果如下。
      NSpid:	837666	849

      此处的849即为该AI任务在特权容器中运行的PID,动态采集操作的--pid参数需要指定的PID为849。

多Device场景下,建议每个Device逐一运行AI任务,并逐一按照上述方式获取PID;若多Device同时运行AI任务,则获取任意一个PID进行采集,当前暂不支持同时指定多PID进行动态采集。

数据解析

推荐使用解析并导出性能数据对PROF_XXX目录进行性能数据解析和导出。