从0到1在win10上学习MindSpore

记录从0入门学习 MindSpore的过程

相关链接

MindSpore官网
MindSpore论坛
MindSpore视频

一.MindSpore简述

MindSpore是一个全场景深度学习框架,旨在实现易开发、高效执行、全场景覆盖三大目标,其中易开发表现为API友好、调试难度低,高效执行包括计算效率、数据预处理效率和分布式训练效率,全场景则指框架同时支持云、边缘以及端侧场景。

MindSpore总体架构分为前端表示层(Mind Expression,ME)、计算图引擎(Graph Engine,GE)和后端运行时三个部分。ME提供了用户级应用软件编程接口(Application Programming Interface,API),用于科学计算以及构建和训练神经网络,并将用户的Python代码转换为数据流图。GE是算子和硬件资源的管理器,负责控制从ME接收的数据流图的执行。后端运行时包含云、边、端上不同环境中的高效运行环境,例如CPU、GPU、Ascend AI处理器、 Android/iOS等。

二.学习预热-1小时入门AI开发工程师

由于之前并不了解MindSpore,于是在听课前先通过了一个1小时开发入门教程熟悉了一遍流程(1小时入门AI开发工程师)

根据教程可以基于MindSpore框架端边云全流程开发一个AI应用,来使手机识别猫和狗,成果图如下在这里插入图片描述
要求Python3.7.5,如果原来有不一致的版本可以选择配置双环境或者卸载旧版本,根据教程所安装的MindSpore版本为1.0.1,而后续实验使用的版本为1.1.0,可使用以下指令对MindSpore升级。

pip install --upgrade mindspore

也可以直接进行1.1.0版本的安装

pip install https://ms-release.obs.cn-north-4.myhuaweicloud.com/{version}/MindSpore/cpu/windows_x64/mindspore-{version}-cp37-cp37m-win_amd64.whl --trusted-host ms-release.obs.cn-north-4.myhuaweicloud.com -i https://pypi.tuna.tsinghua.edu.cn/simple

验证版本

python -c "import mindspore;print(mindspore.__version__)"

这里使用的环境是Win10 64位。

三.学习实践-导出LeNet网络的MindIR格式模型

1.获取lenet的checkpoint文件
如果已经有lenet的checkpoint文件可以直接使用,直接进行第4步操作;如果没有,则可以通过MindSpore官方仓库中的相关代码进行模型训练,得到checkpoint文件。
地址:https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/cv/lenet
2.获取MNIST数据集
官方地址:
http://yann.lecun.com/exdb/mnist/
下载后解压到代码文件根目录,目录结构如下:

MNIST_Data/
├── test
│   ├── t10k-images-idx3-ubyte
│   └── t10k-labels-idx1-ubyte
└── train
    ├── train-images-idx3-ubyte
    └── train-labels-idx1-ubyte

3.开始训练,环境是Win10-64位 CPU

python train.py --data_path ./MNIST_DATA/ --ckpt_path=./checkpoint/ --device_target CPU

在这里插入图片描述
4.将得到的checkpoint文件转换为MINDIR格式
得到的checkpoint文件

第1种方式:编写模型转换代码进行转换

import numpy as np
from mindspore import Tensor, export, load_checkpoint, load_param_into_net
from src.lenet import LeNet5

lenet = LeNet5()

load_checkpoint("./checkpoint/checkpoint_lenet-10_1875.ckpt", net=lenet)  #这里是对第10个checkpoint文件,即checkpoint_lenet-10_1875.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', file_format='MINDIR') #file_name指定转换后文件的文件名

执行转换命令

python lenet_trans.py

第2种方式:直接使用下载的代码文件中的export.py进行转换

export.py --ckpt_file lenet.ckpt --file_format MINDIR --device_target CPU

转换MINDIR
两种方式均可成功转换为MINDIR文件
在这里插入图片描述

四.学习实践-训练ResNet50网络并使用得到的checkpoint文件,导出MindIR格式模型

方式1—在个人机器上训练:

1.获取ResNet50训练代码
MindSpore官方代码仓库中的地址:
https://gitee.com/mindspore/mindspore/tree/master/model_zoo/official/cv/resnet
2.获取Cifar10数据集
官方地址:https://www.cs.toronto.edu/~kriz/cifar.html
因资源有限,故选择这个相对较小的训练集,下载完成后解压到代码根目录
3.开始训练

python train.py --net resnet50 --dataset cifar10 --dataset_path ./cifar-10-batches-bin/ --device_target CPU

在这里插入图片描述
这个训练的时间受硬件条件影响将会非常非常慢…
4.将得到的checkpoint文件转换为MINDIR格式
第1种方式:编写模型转换代码进行转换

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/train_resnet_cifar10-10_1562", 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', file_format='MINDIR')

执行转换命令

python resnet50_trans.py

第2种方式:直接使用下载的代码文件中的export.py进行转换

export.py --ckpt_file train_resnet_cifar10-10_1562 --file_format MINDIR --device_target CPU

方式2—在ModelArts训练:

1.打开ModerArts的ResNet50训练教程
进入以下地址后点击Run in ModerlArts即可
地址:https://www.mindspore.cn/tutorial/training/zh-CN/r1.1/advanced_use/cv_resnet50.html
2.依照教程操作获得checkpoint文件
执行到训练步骤后可看到训练进度
在这里插入图片描述
在这里插入图片描述
3.编写代码转换得到MINDIR模型
编写代码进行模型转换,并上传到OBS桶进行下载
在这里插入图片描述
ModelArts提供的训练资源还是非常非常强大的

五.学习实践-将下载的模型mobilenetv2.mindir用MindSpore lite converter 转成.ms 模型

1.在win 10 64位上编译MindSpore lite

官方给出的编译依赖:

CMake >= 3.18.3

MinGW GCC >= 7.3.0

采坑经验:
1.第一次我选择的是CMake3.18.5+MinGW 8.0.0,但在之后编译失败了,如果要解决这个问题可能需要对代码进行对应修改。之后选择卸载了这两个版本,重新安装了CMake3.19。3和MinGW 7.3.0,成功编译。

2.使用源码1.1分支之后可以编译成功,但是转换模型会出错,使用master版本可以成功转换。

#使用git工具,从MindSpore代码仓下载源码
git clone https://gitee.com/mindspore/mindspore.git 
#以指定线程数8编译Windows版本
call build.bat lite 8

之后进入漫长的等待过程,我总从命令执行开始共用了3小时
在这里插入图片描述
在这里插入图片描述
终于成功了,一路绿时间虽慢但是还是很舒服的。

output目录得到4个文件:
在这里插入图片描述

解压得到的convert目录如下
在这里插入图片描述

├── mindspore-lite-1.1.0-converter-win-x64
│   └── converter # 模型转换工具
|       ├── converter_lite.exe # 可执行程序
|       ├── libglog.dll # Glog的动态库
|       ├── libmindspore_gvar.dll # 存储某些全局变量的动态库
|       ├── libgcc_s_seh-1.dll # MinGW动态库
|       ├── libssp-0.dll # MinGW动态库
|       ├── libstdc++-6.dll # MinGW动态库
|       ├── libwinpthread-1.dll # MinGW动态库

接着就可以进行模型转换了
把MINDIR文件复制到convert目录下,执行命令

call converter_lite --fmk=MINDIR --modelFile=mobilenetv2.mindir --outputFile=mobilenetv2

在这里插入图片描述

六.学习体会

当前的MindSpore对各种依赖的版本要求还是有一些要求的,如果没有去修改对应配置以及代码来适应不同版本依赖的能力的话,最好还是使用官方指定的版本,学习会比较顺利。
对于MindSpore的学习可以根据文档和视频进行反复学习实践,一步步对它进行掌握理解。
相信MindSpore会做的越来越好。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值