MindSpore+MindIR

2024-01-07 16:48
文章标签 mindspore mindir

本文主要是介绍MindSpore+MindIR,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转载地址:【MindSpore训练营第五期】快速体验MindSpore+MindIR_MindSpore_昇腾论坛_华为云论坛

作者:Jack20

【MindSpore训练营第五期】快速体验MindSpore+MindIR

MindSpore端边云统一格式 — MindIR

MindIR • 全称MindSpore IR,是MindSpore的一种基于图表示的函数式IR,定义了可扩展的图 结构以及算子的IR表示。它消除了不同后端的模型差异,一般用于跨硬件平台执行推理任务。

(1)MindSpore通过统一IR定义了网络的逻辑结构和算子的属性,将MindIR格式的模型文件 与硬件平台解耦,实现一次训练多次部署。

(2)MindIR作为MindSpore的统一模型文件,同时存储了网络结构和权重参数值。同时支持 部署到云端Serving和端侧Lite平台执行推理任务。

(3)同一个MindIR文件支持多种硬件形态的部署:

- Serving部署推理

- 端侧Lite推理部署

1-1导出LeNet网络的MindIR格式模型

于是我参照着大佬的简单的写了一个py解决了这题

1.定义网络

LeNet网络不包括输入层的情况下,共有7层:2个卷积层、2个下采样层(池化层)、3个全连接层。每层都包含不同数量的训练参数,如下图所示:

我们对全连接层以及卷积层采用Normal进行参数初始化。

MindSpore支持TruncatedNormalNormalUniform等多种参数初始化方法,默认采用Normal。具体可以参考MindSpore API的mindspore.common.initializer模块说明。

使用MindSpore定义神经网络需要继承mindspore.nn.CellCell是所有神经网络(Conv2d等)的基类。

神经网络的各层需要预先在__init__方法中定义,然后通过定义construct方法来完成神经网络的前向构造。按照LeNet的网络结构,定义网络各层如下:

import mindspore.nn as nn
from mindspore.common.initializer import Normalclass LeNet5(nn.Cell):"""Lenet network structure"""#define the operator requireddef __init__(self, num_class=10, num_channel=1):super(LeNet5, self).__init__()self.conv1 = nn.Conv2d(num_channel, 6, 5, pad_mode='valid')self.conv2 = nn.Conv2d(6, 16, 5, pad_mode='valid')self.fc1 = nn.Dense(16 * 5 * 5, 120, weight_init=Normal(0.02))self.fc2 = nn.Dense(120, 84, weight_init=Normal(0.02))self.fc3 = nn.Dense(84, num_class, weight_init=Normal(0.02))self.relu = nn.ReLU()self.max_pool2d = nn.MaxPool2d(kernel_size=2, stride=2)self.flatten = nn.Flatten()#use the preceding operators to construct networksdef construct(self, x):x = self.max_pool2d(self.relu(self.conv1(x)))x = self.max_pool2d(self.relu(self.conv2(x)))x = self.flatten(x)x = self.relu(self.fc1(x))x = self.relu(self.fc2(x))x = self.fc3(x)return x

MindSpore官网为我们提供了LeNet的Checkpoint文件,提供了不同版本的:https://download.mindspore.cn/model_zoo/official/cv/lenet/

*Checkpoint • 采用了Protocol Buffers格式,存储了网络中所有的参数值。一般用于训练任务中断后恢复训练,或训练后的微调(Fine Tune)任务。

在这里我选择了CPU,因为题目说可以不用训练,所以定义完网络我就直接使用了

2.模型转换

import time
import mindspore.nn as nn
from datetime import datetime
from mindspore.common.initializer import Normallenet = LeNet5()
# 返回模型的参数字典
param_dict = load_checkpoint("./lenet.ckpt")
# 加载参数到网络
load_param_into_net(lenet, param_dict)
input = np.random.uniform(0.0, 1.0, size=[32, 1, 32, 32]).astype(np.float32)
# 以指定的名称和格式导出文件
export(lenet, Tensor(input), file_name='lenet.mindir', file_format='MINDIR',)t = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
print(" ")
print("============== Model conversion succeeded ==============")
print(t)

1-2训练一个ResNet50网络。使用训练好的checkpoint文件,导出MindIR格式模型

训练ResNet50网络生成checkpoint

参照着官网的教程使用MindSpore训练了一个ResNet50网络图像分类模型,官网的教程里那个文档适用于CPU、GPU和Ascend AI处理器环境。使用ResNet-50网络实现图像分类:https://www.mindspore.cn/tutorial/training/zh-CN/r1.1/advanced_use/cv_resnet50.html

(1)数据集的准备,这里使用的是CIFAR-10数据集。

(2)构建一个卷积神经网络,这里使用ResNet-50网络。

这里担心自己电脑跑不起来,使用了ModelArts平台提供的Notebook来跑 8vCPU+64G+1 x Tesla V100-PCIE-32G,不得不说性能很强

这里对训练好的ResNet50网络导出为MindIR 格式

import numpy as np
from resnet import resnet50from mindspore.train.serialization import export, load_checkpoint, load_param_into_net
from mindspore import Tensorresnet = resnet50(batch_size=32, num_classes=10)
# return a parameter dict for model
param_dict = load_checkpoint("./models/ckpt/mindspore_vision_application/train_resnet_cifar10-10_1562.ckpt")
# load the parameter into net
load_param_into_net(resnet, param_dict)
input = np.random.uniform(0.0, 1.0, size=[32, 3, 224, 224]).astype(np.float32)
export(resnet, Tensor(input), file_name='resnet_Jack20.mindir', file_format='MINDIR')

为了保存数据,我把它下载了下来,结果发现原训练好的Checkpoint文件文件过大超过了100MB不能直接下载,于是找到了另一种解决方法:

在Notebook中,新建一个“ipynb”文件,使用MoXing先将大文件从Notebook上传到OBS中,然后我再从我OBS桶了下载不就完了嘛

import moxing as mox
mox.file.copy('./train_resnet_cifar10-10_1562.ckpt', 'obs://bucket_name/train_resnet_cifar10-10_1562.ckpt')

注:其中"./train_resnet_cifar10-10_1562.ckpt”为文件在Notebook中的存储路径,"train_resnet_cifar10-10_1562.ckpt”为该文件上传到OBS的存储路径。

这篇关于MindSpore+MindIR的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/580590

相关文章

Mindspore 初学教程 - 3. Tensor 张量

张量(Tensor)是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在  n n n 维空间内,有  n r n^{r} nr 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。 r r r 称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 张量是一种特殊的数据结构,

mindspore打卡第三课模型定义和训练全流程

```python import mindspore from mindspore import nn, ops class Network(nn.Cell):     ### 先定义类合参数 需要初始化实例     def __init__(self):         super().__init__()         self.flatten = nn.Flatten()

昇思MindSpore全场景深度学习框架总结

昇思MindSpore介绍 MindSpore是一个全场景深度学习框架,旨在实现易开发、高效执行、全场景统一部署三大目标,具体包括API友好、调试难度低、计算效率、数据预处理效率和分布式训练效率高以及支持云、边缘和端侧场景。 昇思MindSpore的各个扩展功能模块,包括模型库、扩展库、科学计算、全场景统一API、数据处理层、AI编译器、全场景运行时、可视化调试调优工具和安全增强库等。这些

MindSpore实践图神经网络之GCN

GCN介绍 图卷积网络(GCN)于2016年提出,旨在对图结构数据进行半监督学习。它提出了一种基于卷积神经网络有效变体的可扩展方法,可直接在图上操作。该模型在图边缘的数量上线性缩放,并学习隐藏层表示,这些表示编码了局部图结构和节点特征。 GCN(图卷积神经网络) 类似CNN(卷积神经网络),只不过CNN用于二维数据结构,GCN用于图数据结构。GCN实际上跟CNN的作用一样,就是一个特征提取器

MindSpore实践图神经网络之环境篇

MindSpore在Windows11系统下的环境配置。 MindSpore环境配置大概分为三步:(1)安装Python环境,(2)安装MindSpore,(3)验证是否成功 如果是GPU环境还需安装CUDA等环境,可以参照官网 https://www.mindspore.cn/install 接下来介绍几款开发IDE以及辅助工具,此处省略了上一节Minicanda安装Python环境,

Atlas 200I DK A2安装MindSpore Ascend版本

一、参考资料 mindspore快速安装 二、重要说明 经过博主多次尝试多个版本,Atlas 200I DK A2无法安装MindSpore Ascend版本。 也有其他博主测试,也未尝成功,例如:【MindSpore易点通·漫游世界】在Atlas 200I DK A2 (CANN6.2.RC2)上安装MindSpore Ascend版的踩坑记录 mindspore 1.5.2 报错无

Atlas 200 DK(Model 3000)安装MindSpore Ascend版本

一、参考资料 mindspore快速安装 二、重要说明 经过博主多次尝试多个版本,Atlas 200 DK(Model 3000)无法安装MindSpore Ascend版本。 三、准备工作 1. 测试环境 设备型号:Atlas 200 DK(Model: 3000)Operating System + Version: Ubuntu 18.04.6 LTSCPU Type: 8核

华为开源自研AI框架昇思MindSpore应用案例:在ResNet-50网络上应用二阶优化实践

常见的优化算法可分为一阶优化算法和二阶优化算法。经典的一阶优化算法如SGD等,计算量小、计算速度快,但是收敛的速度慢,所需的迭代次数多。而二阶优化算法使用目标函数的二阶导数来加速收敛,能更快地收敛到模型最优值,所需要的迭代次数少,但由于二阶优化算法过高的计算成本,导致其总体执行时间仍然慢于一阶,故目前在深度神经网络训练中二阶优化算法的应用并不普遍。二阶优化算法的主要计算成本在于二阶信息矩阵(He

华为AI框架:MindSpore+MindInsight安装-Ubuntu

MindSpore+MindInsight安装-Ubuntu MindSpore介绍和安装缘由 MindSpore是华为开源自研AI框架,类似于Pytorch和Tensorflow。因为任务需求,需要将代码转换为MindSpore的版本,故学习和使用。由于现在还在发展中,这个框架还存在一些问题。在安装中我就遇到了一些问题,记录下来希望对其他人有所帮助。 ###安装MindSpore 在尝试

MindSpore项目中_c_expression.py这样的文件名可能并不直接存在它是通过pybind11调用C++实现

from mindspore._c_expression import Tensor as Tensor_在MindSpore项目中,_c_expression.py这样的文件名可能并不直接存在 它是通过pybind11调用C++实现 请举个例子说明 from mindspore.c_expression import Tensor as Tensor from mindspore import