npu-monitor使用说明
简介
npu-monitor工具的作用是轻量常驻后台,负责监测关键算子耗时。
使用前准备
npu-monitor通过dyno CLI中的npu-monitor子命令开启:
dyno --certs-dir <CERT_DIR> npu-monitor [SUBCOMMANDS]
约束
- dyno和dynolog中--certs-dir传入参数值须保持一致。
CERT_DIR可传入证书路径,如果不使用TLS证书密钥,设置为NO_CERTS。
npu-monitor功能介绍
功能说明
开启npu-monitor性能监测。
命令格式
dyno npu-monitor [SUBCOMMANDS] --help
npu-monitor的SUBCOMMANDS(子命令)选项如下。
参数说明
| 子命令 | 可选/必选 | 说明 | PyTorch支持 | MindSpore支持 |
|---|---|---|---|---|
| --npu-monitor-start | 可选 | 开启性能监测,action类型,设置参数后生效,默认不生效。 | Y | Y |
| --npu-monitor-stop | 可选 | 停止性能监测,action类型,设置参数后生效,默认不生效。 | Y | Y |
| --report-interval-s | 可选 | 性能监测数据上报周期,u32类型,单位s,需要在启动时设置。默认值60。 | Y | Y |
| --duration | 可选 | 性能监测数据采集时长,f32类型,单位s,需要在启动时设置。默认值0.0,表示不限制采集时长。仅可在npu-monitor启动时设置,运行期间不支持修改。 | Y | Y |
| --mspti-activity-kind | 可选 | 性能监测数据上报数据类型,String类型,可以设置单个或多个,多个类型以逗号分隔,每次设置时刷新全局上报类型。可选值范围[Marker、Kernel、API、Hccl、Memory、MemSet、MemCpy、Communication、AclAPI、NodeAPI、RuntimeAPI] , 默认值Marker。 |
Y | Y |
| --log-file | 可选 | 性能数据采集落盘的路径,String类型,当前仅支持mspti-activity-kind设置为Marker、Kernel、API、Communication、AclAPI、NodeAPI、RuntimeAPI,7种类型数据的导出,落盘数据格式可选为DB、Jsonl(详见export-type参数说明),默认值为空,表示不落盘。 |
Y | Y |
| --export-type | 可选 | 性能数据采集落盘的格式,String类型,仅在用户设置了log-file参数后生效,可选值范围[DB, Jsonl],默认值DB。仅可在npu-monitor启动时设置,运行期间不支持修改。1. 若设置为 DB,则落盘数据为DB格式,落盘文件名为msmonitor_{process_id}_{timestamp}_{rank_id}.db,DB内容说明请参见DB格式性能数据文件参考,可使用MindStudio Insight工具进行可视化呈现(MindStudio Insight暂不支持呈现单进程多卡场景采集的msmonitor.db数据) 2. 若设置为 Jsonl,则落盘数据为Jsonl格式,落盘文件名为msmonitor_{process_id}_{timestamp}_{rank_id}.jsonl,Jsonl文件每行包含一条完整的Json格式的性能数据,支持设置以下环境变量对落盘过程进行调节 MSMONITOR_JSONL_BUFFER_CAPACITY:设置落盘 RingBuffer 大小,该参数必须为2的幂次(2n2^{n}),默认值 524288(2192^{19}),支持的设置范围为 [8192,2097152](即 [2132^{13},2212^{21}]) MSMONITOR_JSONL_MAX_DUMP_INTERVAL:设置落盘最长时间间隔(单位:ms),当前时间与上次落盘的间隔超过该阈值时,将自动触发落盘,默认值 30000ms,最小值限制为 1000ms MSMONITOR_JSONL_ROTATE_LOG_LINES:设置单个 Jsonl 文件的 Json 数据条数上限,超出该阈值将新建文件落盘。默认值 10000,支持设置范围为 [100, 500000] MSMONITOR_JSONL_ROTATE_LOG_FILES:设置单次采集的 Jsonl 文件落盘数量,超出该阈值时将删除最早落盘的文件。默认值 -1(不开启此功能),手动设置时最小值限制为 2 |
Y | Y |
| --json-rotate-log-lines | 可选 | Jsonl 落盘时单个 Jsonl 文件的 Json 数据条数上限,String类型,仅在 --log-file 与 --export-type Jsonl 配置时生效。 该参数默认不传入,优先级高于环境变量 MSMONITOR_JSONL_ROTATE_LOG_LINES;若命令行和环境变量均未设置,则使用默认值 10000。手动设置时必须传入范围为 [100, 500000] 的正整数。 |
Y | Y |
| --json-rotate-log-files | 可选 | Jsonl 落盘时单次采集保留的 Jsonl 文件数量,String类型,超出该阈值时删除最早落盘的文件,仅在 --log-file 与 --export-type Jsonl 配置时生效。 该参数默认不传入,优先级高于环境变量 MSMONITOR_JSONL_ROTATE_LOG_FILES;若命令行和环境变量均未设置,则使用默认值 -1,表示不启用文件数量清理。手动设置时必须传入 -1 或大于等于 2 的正整数。 |
Y | Y |
| --filter | 可选 | 按照想采集的数据名筛选性能数据,String类型。不同数据类型以分号分隔,不同数据名以逗号分隔,数据类型和名称之间以冒号分隔。 支持模糊匹配,无需配置完整名称,只需要配置关键词即可。配置值包含分号时,需用双引号包裹整个值。 配置方式示例: --filter "<activity_kind>:<data>[,<data>][;<activity_kind>:<data>[,<data>]]"。activity_kind可选值范围[Marker,Kernel,API,Communication,AclAPI,NodeAPI,RuntimeAPI],默认不筛选,保留所有数据。 |
Y | Y |
使用示例
-
启动dynolog daemon进程,详细介绍请参见dynolog。
# 命令行方式开启dynolog daemon dynolog --enable-ipc-monitor --certs-dir /home/ssl_certs # 如需使用TensorBoard展示数据,传入参数--metric_log_dir用于指定TensorBoard文件落盘路径 # 示例: dynolog --enable-ipc-monitor --certs-dir /home/ssl_certs --metric_log_dir /tmp/metric_log_dir -
配置dynolog环境变量。
export MSMONITOR_USE_DAEMON=1 -
(可选)配置msMonitor日志路径,默认路径为当前目录下的msmonitor_log。
export MSMONITOR_LOG_PATH=<LOG PATH> # 示例: export MSMONITOR_LOG_PATH=/tmp/msmonitor_log -
设置LD_PRELOAD使能MSPTI。
export LD_PRELOAD=<CANN Toolkit安装路径>/cann/lib64/libmspti.so # 示例: export LD_PRELOAD=/usr/local/Ascend/cann/lib64/libmspti.so -
启动训练或推理任务。
# 训练任务中需要使用pytorch的优化器/继承原生优化器 bash train.sh -
使用dyno CLI启动npu-monitor。
# 示例1:开启性能监测,使用默认配置 dyno --certs-dir /home/ssl_certs npu-monitor --npu-monitor-start # 示例2:暂停性能监测 dyno --certs-dir /home/ssl_certs npu-monitor --npu-monitor-stop # 示例3:性能监测过程中修改配置 # 上报周期30s,上报数据类型Marker和Kernel,保留类型为Kernel且算子名称中包含“Mul”关键词的数据 dyno --certs-dir /home/ssl_certs npu-monitor --report-interval-s 30 --mspti-activity-kind Marker,Kernel --filter Kernel:Mul # 示例4:性能监测开启时修改配置 # 上报周期30s,上报数据类型Marker和Kernel,保留类型为Kernel且算子名称中包含“Mul”关键词的数据 dyno --certs-dir /home/ssl_certs npu-monitor --npu-monitor-start --report-interval-s 30 --mspti-activity-kind Marker,Kernel --filter Kernel:Mul # 示例5:性能监测开启时修改配置,开启数据采集落盘 # 数据落盘路径为/tmp/msmonitor_db,落盘周期为30s,采集数据类型为Marker,Kernel,Communication dyno --certs-dir /home/ssl_certs npu-monitor --npu-monitor-start --report-interval-s 30 --mspti-activity-kind Marker,Kernel,Communication --log-file /tmp/msmonitor_db # 示例6:以 Jsonl 格式落盘,并通过命令行参数设置 Jsonl 文件轮转配置 dyno --certs-dir /home/ssl_certs npu-monitor --npu-monitor-start --report-interval-s 30 --mspti-activity-kind Marker,Kernel,Communication --log-file /tmp/msmonitor_jsonl --export-type Jsonl --json-rotate-log-lines 10000 --json-rotate-log-files 5 # 示例7:多机场景下性能监测开启时修改配置 # 多机场景下向特定机器x.x.x.x发送参数信息,参数表示上报周期30s,上报数据类型Marker和Kernel dyno --certs-dir /home/ssl_certs --hostname x.x.x.x npu-monitor --npu-monitor-start --report-interval-s 30 --mspti-activity-kind Marker,Kernel
输出结果文件说明
观测TensorBoard上报数据。
# 请确保安装了TensorBoard
pip install tensorboard
# 运行TensorBoard
tensorboard --logdir=<metric_log_dir> # metric_log_dir为使用示例dynolog命令行中--metric_log_dir参数指定的路径
# 从浏览器访问http://localhost:6006即可看到对应可视化图表, 其中localhost为服务器的ip地址,6006为TensorBoard默认端口
TensorBoard具体使用参数见https://github.com/tensorflow/tensorboard。