一、前言

最近在昇腾 NPU 环境下使用 MindSpore 框架完成深度学习模型训练,从环境导入依赖、处理 Numpy 警告,到训练回调设置、模型保存,踩了不少坑,在此记录完整流程,方便大家参考。

二、环境与依赖导入

完整导入代码

import warnings
# 屏蔽numpy亚正常数警告
warnings.filterwarnings("ignore", category=UserWarning)

import csv
import os
import time
import numpy as np
from easydict import EasyDict as edict
from matplotlib import pyplot as plt

import mindspore
from mindspore import nn
from mindspore import context
from mindspore import dataset
from mindspore.train.callback import TimeMonitor, LossMonitor
from mindspore import Tensor
from mindspore.train import Model
from mindspore.train.callback import ModelCheckpoint, CheckpointConfig

# 设定运行模式为静态图模式,并且运行设备为昇腾芯片
context.set_context(mode=context.GRAPH_MODE, device_target="Ascend")

坑点:Numpy UserWarning 警告

UserWarning: The value of the smallest subnormal for <class 'numpy.float64'> type is zero.
  • 问题说明:这只是警告,不是报错! 不会中断代码与模型训练,是昇腾环境下 numpy 版本兼容带来的提示。
  • 解决方案:在代码最开头添加 warnings 过滤语句,即可隐藏该提示。

参数说明

  1. mode=context.GRAPH_MODE:静态图模式,昇腾平台推荐使用,计算性能更高;
  2. device_target="Ascend":指定硬件为昇腾 NPU 芯片,调用昇腾算力。

三、训练后查看保存的 Checkpoint 模型文件

代码

os.listdir('./model_iris/adam')  # 查看保存的模型

输出结果:

['checkpoint_adam-graph.meta', 'checkpoint_adam-15_4.ckpt']

文件解析

  1. checkpoint_adam-graph.meta:静态图模式生成,保存网络的计算图结构信息;
  2. checkpoint_adam-15_4.ckpt:MindSpore 的模型权重文件。15代表第 15 轮 epoch 保存的模型,_4为分片编号;
    ✅ 代表模型成功保存,后续可以加载该 ckpt 文件,实现模型推理、继续增量训练。

四、补充:加载 ckpt 模型的示例代码(可追加到博客)

from mindspore.train.serialization import load_checkpoint, load_param_into_net

# 1. 搭建好和训练时完全一致的网络net
param_dict = load_checkpoint("./model_iris/adam/checkpoint_adam-15_4.ckpt")
load_param_into_net(net, param_dict)
# 加载完成后,net就拥有训练好的权重,可以直接推理

五、小结

  1. MindSpore 静态图模式在昇腾 NPU 上运行效率更高,但会额外生成 meta 图文件;
  2. Numpy 亚正常数警告属于无害提示,无需修改 numpy 版本,直接过滤警告即可;
  3. ModelCheckpoint 回调可以自动保存模型 ckpt,方便断点续训与模型部署。
Logo

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

更多推荐