跳转至

msMonitor工具快速入门

下面通过msMonitor常见的使用场景介绍msMonitor工具快速入门:

  1. 先使用npu-monitor功能获取关键算子耗时。
  2. 当发现监测到关键算子耗时劣化,使用nputrace功能采集详细性能数据做分析。

前置条件

完成msMonitor工具安装,具体请参见《msMonitor工具安装指南》。

操作步骤

  1. 启动dynolog daemon进程。

命令示例如下:

# 命令行方式开启dynolog daemon
dynolog --certs-dir NO_CERTS --enable-ipc-monitor

# 如需使用TensorBoard展示数据,传入参数--metric_log_dir用于指定TensorBoard文件落盘路径
dynolog --certs-dir NO_CERTS --enable-ipc-monitor --metric_log_dir /tmp/metric_log_dir    # dynolog daemon的日志路径为:/var/log/dynolog.log

[!NOTE] Note --certs-dir NO_CERTS 表示不使用证书验证,仅用于测试环境,后文同理。在生产环境中,建议使用证书验证,以确保数据传输的安全性。详情请参见 dynolog_instruct

  1. 配置msMonitor环境变量。
export MSMONITOR_USE_DAEMON=1
  1. 设置LD_PRELOAD环境变量使能msPTI(启动npu-monitor功能设置)。
# export LD_PRELOAD=<CANN Toolkit安装路径>/cann/lib64/libmspti.so
# 默认路径示例:
export LD_PRELOAD=/usr/local/Ascend/cann/lib64/libmspti.so
  1. 启动训练任务。

以下 train.py 是一个完整的 PyTorch 训练脚本示例,使用随机生成的数据,无需外部数据集即可运行。将脚本保存为 train.py 并执行:

import torch
import torch.nn as nn

# 定义一个简单的全连接网络
class SimpleModel(nn.Module):
    def __init__(self):
        super(SimpleModel, self).__init__()
        self.net = nn.Sequential(
            nn.Linear(64, 128),
            nn.ReLU(),
            nn.Linear(128, 64),
            nn.ReLU(),
            nn.Linear(64, 10)
        )

    def forward(self, x):
        return self.net(x)

# 随机生成训练数据,无需外部数据集
batch_size = 32
num_steps = 100
input_size = 64
num_classes = 10

device = torch.device("npu:0" if torch.npu.is_available() else "cpu")
model = SimpleModel().to(device)
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

for step in range(num_steps):
    # 使用 torch.randn 随机生成输入和标签
    inputs = torch.randn(batch_size, input_size, device=device)
    labels = torch.randint(0, num_classes, (batch_size,), device=device)

    outputs = model(inputs)
    loss = criterion(outputs, labels)

    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

    if step % 10 == 0:
        print(f"Step {step}, Loss: {loss.item():.4f}")

执行训练脚本:

python train.py

若使用 PyTorch 原生优化器(如 torch.optim.SGDtorch.optim.Adam),msMonitor 可自动识别训练迭代边界,无需额外修改代码。

  1. 使用dyno命令行触发npu-monitor监测关键算子耗时。
# 开启npu-monitor,上报周期30s, 上报数据类型为Kernel
dyno --certs-dir NO_CERTS npu-monitor --npu-monitor-start --report-interval-s 30 --mspti-activity-kind Kernel

# 关闭npu-monitor
dyno --certs-dir NO_CERTS npu-monitor --npu-monitor-stop

npu-monitor 功能详细介绍和采集结果说明请参见 npumonitor_instruct

  1. 使用dyno命令行触发nputrace采集详细trace数据(需要关闭npu-monitor功能才能触发nputrace功能)。
# 从第10个step开始采集,采集2个step,采集框架、CANN和device数据,同时采集完后自动解析以及解析完成不做数据精简,落盘路径为/tmp/profile_data
dyno --certs-dir NO_CERTS nputrace --start-step 10 --iterations 2 --activities CPU,NPU --analyse --data-simplification false --log-file /tmp/profile_data

nputrace 功能详细介绍和采集结果说明请参见 nputrace_instruct