MindSpore Transformers 训练在线监控:配置监控参数、实现与实战
·
一、引言
大模型微调与预训练具有数据量大、周期长、资源消耗高、易出现梯度爆炸 / 消失、收敛异常等特点,若缺乏实时监控能力,会导致训练失败无法及时发现、资源浪费、精度不达标等问题。
MindSpore 提供了回调机制(Callback)+ 日志收集 + 可视化(MindInsight) 三位一体的在线监控体系,可在训练每一步自动采集指标、实时展示、异常中断、保存检查点。MindSpore Transformers 基于该体系封装了开箱即用的监控组件,支持:
- 实时监控 loss、lr、epoch/step
- 监控梯度、权重、参数更新
- 监控 NPU 利用率、内存、算力
- 自动保存最优模型
- 训练异常自动停止并输出日志
- 数据接入 MindInsight 可视化面板
二、MindSpore 训练在线监控核心架构
2.1 核心组件
- Callback(回调函数):训练过程中在指定时机(step_begin、epoch_end 等)执行监控逻辑。
- SummaryCollector:最核心监控类,自动收集损失、学习率、计算图、参数变化。
- LossMonitor:控制台实时打印 loss、lr、speed 等信息。
- CheckpointConfig & ModelCheckpoint:自动保存权重,支持最优保存。
- 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
打开浏览器访问:
可查看:
- 损失收敛曲线
- 学习率变化
- 参数与梯度分布
- 计算图结构
- 昇腾 NPU 利用率、内存、算力
- 训练性能瓶颈分析
六、监控效果与优势
- 实时性:每步自动采集,控制台 + Web 面板双展示
- 全面性:覆盖 loss、lr、梯度、权重、硬件、耗时
- 稳定性:异常自动记录,便于定位梯度爆炸、不收敛
- 昇腾深度适配:NPU 利用率、内存、算力原生监控
- 易用性:一行配置开启全链路监控
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐
所有评论(0)