【MindSpore两日训练营第五期笔记】导出MindIR格式模型
一、MindIR 概述
MindSpore通过统一IR定义了网络的逻辑结构和算子的属性,将MindIR格式的模型文件
与硬件平台解耦,实现一次训练多次部署。
MindIR作为MindSpore的统一模型文件,同时存储了网络结构和权重参数值。同时支持
部署到云端Serving和端侧Lite平台执行推理任务。
同一个MindIR文件支持多种硬件形态的部署:
- Serving部署推理
- 端侧Lite推理部署
二、名词解释
Checkpoint
• 采用了Protocol Buffers格式,存储了网络中所有的参数值。
• 一般用于训练任务中断后恢复训练,或训练后的微调(Fine Tune)任务。
•MindIR
• 全称MindSpore IR,是MindSpore的一种基于图表示的函数式IR,定义了可扩展的图
结构以及算子的IR表示。
• 它消除了不同后端的模型差异,一般用于跨硬件平台执行推理任务。
•ONNX
• 全称Open Neural Network Exchange,是一种针对机器学习模型的通用表达。
• 一般用于不同框架间的模型迁移或在推理引擎(TensorRT)上使用。
•AIR
• 全称Ascend Intermediate Representation,是华为定义的针对机器学习所设计的开放式
文件格式。
• 它能更好地适应华为AI处理器,一般用于Ascend 310上执行推理任务。
三、导出LeNet网络的MindIR格式模型
1.训练LeNet模型生成checkpoint
LeNet训练代码选用MindSpore官方代码仓中modelzool中的代码
地址:https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/cv/lenet
2.MNIST数据下载地址
1)官方下载地址:http://yann.lecun.com/exdb/mnist/
2)网盘下载:链接: https://pan.baidu.com/s/1zX-OwL8bOgq4dhEuaRj2Xg 提取码: zew6
MNIST数据集下载完成后解压到代码根目录下
3.执行训练命令
python train.py --data_path ./MNIST_DATA/ --ckpt_path=./checkpoint/ --device_target Ascend
注:我使用的是昇腾平台进行模型训练,如果使用CPU或者GPU进行训练的话device_target后面改为对应的就好
当屏幕出现epoch、loss等数值时模型就开始进行训练了
4.得到checkpoint
当模型训练参数中指定的ckpt_path文件夹中出现ckpt文件就代表训练成功了。接下去我们可以选择一个ckpt文件进行转换mindir格式。这里我选择checkpoint_lenet-10_1875.ckpt
5.编写模型转换代码
import numpy as np
from mindspore import Tensor, export, load_checkpoint, load_param_into_net
from src.lenet import LeNet5
lenet = LeNet5()
# load the parameter into net
load_checkpoint("./checkpoint/checkpoint_lenet-10_1875.ckpt", net=lenet) #checkpoint_lenet-10_1875.ckpt更换成对应所需要转换的ckpt文件
input = np.random.uniform(0.0, 1.0, size=[32, 1, 32, 32]).astype(np.float32) #Lenet模型的size为32,1,32,32
export(lenet, Tensor(input), file_name='lenet-10_1875', file_format='MINDIR') #file_name指定转换后文件的文件名
6.执行模型转换代码
python lenet_mindr.py
执行完毕后查看代码根目录下如果存在前面我们指定的lenet-10_1875.mindir文件的话就代表模型转化成功了!
四、导出ResNet50网络的MindIR格式模型
1.训练ResNet50网络生成checkpoint
ResNet50模型训练代码依旧使用MindSpore官方代码仓中modelzoo的代码,链接:https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/cv/resnet
2.Cifar10数据集
因为ImageNet数据集比较庞大训练需要比较久的时间,所以这边我们采用cifar10数据集进行模型训练
1)Cifar10数据集官方下载:http://www.cs.toronto.edu/~kriz/cifar.html
2) 百度网盘下载:链接: https://pan.baidu.com/s/1CpgjFtZk2ZQsr_qUtc6z1g 提取码: kjhi
3.执行训练命令
python train.py --net resnet50 --dataset cifar10 --dataset_path ./data/cifar10-bin/train/ --device_target Ascend
注:我使用的是昇腾平台进行模型训练,如果使用CPU或者GPU进行训练的话device_target后面改为对应的就好
当屏幕出现epoch、loss等数值时模型就开始进行训练了
4.获取checkpoint
当模型训练参数中指定的ckpt_path文件夹中出现ckpt文件就代表训练成功了。接下去我们可以选择一个ckpt文件进行转换mindir格式。这里我选择resnet-90_1562.ckpt
5.编写模型转换脚本
import numpy as np
from mindspore import Tensor, export, load_checkpoint, load_param_into_net
from src.resnet import resnet50 as ResNet50
resnet = ResNet50()
# load the parameter into net
load_checkpoint("./checkpoint/resnet-90_1562.ckpt", net=resnet)
input = np.random.uniform(0.0, 1.0, size=[32, 3, 224, 224]).astype(np.float32)
export(resnet, Tensor(input), file_name='resnet-90_162', file_format='MINDIR')
6.执行模型转换
python resnet_mindir.py
执行完毕后查看代码根目录下如果存在前面我们指定的resnet-90_1562.mindir文件的话就代表模型转化成功了!
- 点赞
- 收藏
- 关注作者
评论(0)