一、引言

大模型微调与预训练具有数据量大、周期长、资源消耗高、易出现梯度爆炸 / 消失、收敛异常等特点,若缺乏实时监控能力,会导致训练失败无法及时发现、资源浪费、精度不达标等问题。

MindSpore 提供了回调机制(Callback)+ 日志收集 + 可视化(MindInsight) 三位一体的在线监控体系,可在训练每一步自动采集指标、实时展示、异常中断、保存检查点。MindSpore Transformers 基于该体系封装了开箱即用的监控组件,支持:

  • 实时监控 loss、lr、epoch/step
  • 监控梯度、权重、参数更新
  • 监控 NPU 利用率、内存、算力
  • 自动保存最优模型
  • 训练异常自动停止并输出日志
  • 数据接入 MindInsight 可视化面板

二、MindSpore 训练在线监控核心架构

2.1 核心组件

  1. Callback(回调函数):训练过程中在指定时机(step_begin、epoch_end 等)执行监控逻辑。
  2. SummaryCollector:最核心监控类,自动收集损失、学习率、计算图、参数变化。
  3. LossMonitor:控制台实时打印 loss、lr、speed 等信息。
  4. CheckpointConfig & ModelCheckpoint:自动保存权重,支持最优保存。
  5. MindInsight:可视化前端,展示曲线、硬件信息、计算图、性能剖析。

2.2 监控时机

  • step 级别:每步输出 loss、吞吐量、学习率
  • epoch 级别:每轮保存模型、输出精度、验证指标
  • 异常触发:梯度爆炸、loss 异常、NPU 过载自动中断

三、MindSpore Transformers 监控关键参数

3.1 SummaryCollector 监控参数

  • summary_dir:监控日志保存目录
  • collect_freq:采集频率(step)
  • collect_graph:是否收集计算图
  • collect_trainable_params:收集可训练参数
  • collect_loss:收集损失值
  • collect_lr:收集学习率
  • collect_landmark:是否收集训练里程碑
  • max_file_size:日志文件最大大小

3.2 LossMonitor 监控参数

  • per_print_step:每隔多少步打印一次
  • auto_print:自动输出到控制台

3.3 模型保存参数

  • save_checkpoint_steps:每多少步保存一次
  • keep_checkpoint_max:最大保留 checkpoint 数量
  • save_best_ckpt:是否保存最优模型

四、完整实现代码(昇腾 NPU 适配)

4.1 环境安装

pip install mindspore mindspore-transformers mindinsight

4.2 训练在线监控完整代码

import mindspore as ms
import mindspore.nn as nn
from mindspore.train import Model, LossMonitor, TimeMonitor
from mindspore.train.callback import SummaryCollector, ModelCheckpoint, CheckpointConfig
from mindspore.transformers import AutoModel, AutoTokenizer

# ====================== 1. 基础配置 ======================
ms.set_context(mode=ms.GRAPH_MODE, device_target="Ascend")  # 昇腾NPU
summary_dir = "./mindinsight_log"  # 监控日志目录
ckpt_dir = "./ckpt"
epochs = 10
batch_size = 16
save_steps = 100
print_steps = 10

# ====================== 2. 模型与数据 ======================
# 以文本分类模型为例
model = AutoModel.from_pretrained("bert_base_uncased")
tokenizer = AutoTokenizer.from_pretrained("bert_base_uncased")

# 伪数据集(可替换为真实数据集)
from mindspore.dataset import GeneratorDataset
def dummy_data():
    for _ in range(1000):
        yield ms.Tensor([1]*128, dtype=ms.int32), ms.Tensor([0], dtype=ms.int32)

dataset = GeneratorDataset(dummy_data, ["input_ids", "label"])
dataset = dataset.batch(batch_size)

# ====================== 3. 优化器与损失 ======================
optimizer = nn.AdamWeightDecay(model.trainable_params(), learning_rate=2e-5)
loss_fn = nn.CrossEntropyLoss()
model_wrapper = nn.WithLossCell(model, loss_fn)
train_model = Model(model_wrapper, optimizer=optimizer)

# ====================== 4. 监控回调配置(核心) ======================

# 1) LossMonitor:控制台实时打印 loss、lr、速度
loss_monitor = LossMonitor(per_print_times=print_steps)

# 2) TimeMonitor:监控每轮耗时、吞吐量
time_monitor = TimeMonitor()

# 3) SummaryCollector:训练在线监控 + MindInsight可视化
summary_collector = SummaryCollector(
    summary_dir=summary_dir,
    collect_freq=10,               # 每10步采集一次
    collect_graph=True,            # 采集计算图
    collect_trainable_params=True, # 采集参数变化
    collect_loss=True,             # 采集损失
    collect_lr=True,               # 采集学习率
    collect_landmark=True         # 记录里程碑
)

# 4) 自动保存 Checkpoint
ckpt_config = CheckpointConfig(
    save_checkpoint_steps=save_steps,
    keep_checkpoint_max=5,
    save_best_ckpt=True           # 保存最优模型
)
ckpt_cb = ModelCheckpoint(prefix="bert", directory=ckpt_dir, config=ckpt_config)

# ====================== 5. 启动训练并开启在线监控 ======================
callbacks = [loss_monitor, time_monitor, summary_collector, ckpt_cb]

train_model.train(
    epoch=epochs,
    train_dataset=dataset,
    callbacks=callbacks,
    dataset_sink_mode=True  # NPU 下沉模式
)

print("训练完成!可启动 MindInsight 查看实时监控:mindinsight start --summary-base-dir=./mindinsight_log")

五、启动 MindInsight 在线可视化监控

训练启动后,执行命令启动可视化面板:

mindinsight start --port 8080 --summary-base-dir ./mindinsight_log

打开浏览器访问:

http://127.0.0.1:8080

可查看:

  • 损失收敛曲线
  • 学习率变化
  • 参数与梯度分布
  • 计算图结构
  • 昇腾 NPU 利用率、内存、算力
  • 训练性能瓶颈分析

六、监控效果与优势

  1. 实时性:每步自动采集,控制台 + Web 面板双展示
  2. 全面性:覆盖 loss、lr、梯度、权重、硬件、耗时
  3. 稳定性:异常自动记录,便于定位梯度爆炸、不收敛
  4. 昇腾深度适配:NPU 利用率、内存、算力原生监控
  5. 易用性:一行配置开启全链路监控
Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐