TinyMS使用体验

转载地址:TinyMS使用体验_MindSpore_昇腾论坛_华为云论坛

作者:我就灬是我

一、基础环境

硬件平台:CPU

操作系统:Windows-x64

安装方式:pip

二、版本号截图

三、体验内容

1、体验对比

对比MindSpore 1.1.1,MindSpore 1.2.0-rc1新增了很多新的特性,包括:动态图分布式训练效率的大幅提升、一键模型迁移、模型鲁棒性检测、深度分子模拟及量子机器学习等;使用起来也更加方便,大大的提升了效率。同时,还增加了TinyMS新工具,TinyMS是一款主要用PyThon语言编写的开源深度学习开发工具包,该工具包更好的为开发者使用MindSpore。

2、学习笔记

(1)效率提升:大幅提升动态图下分布式训练的效率、数据预处理加速Dvpp

(2)创新性:分子模拟库(SPONGE),来自社区分子动力学工作组、量子机器学习(MindQuantum),来自社区量子力学工作组、多跳知识推理问答(TPRR)

(3)易用性:一键模型迁移(MindConverter)

(4)可靠性:鲁棒性评测工具助力OCR服务达成首个AI C4鲁棒性标准要求

(5)TinyMS新工具:

TinyMS是一款主要用PyThon语言编写的开源深度学习开发工具包,基于以MindSpore为代表的新型开源深度学习框架,提供面向从数据准备到模型部署全流程的极简易用的高阶API封装,并通过易于扩展的模块化设计,提供覆盖多种业务场景的能力。

TinyMS主要由data, model, serving等模块组成,分场景分领域提供transform数据预处理算子,复用MindSpore原生数据集提供常用数据集,如:cifar-10等。data提供部分自定义数据集和常用的数据下载和解压等常用工具集,model提供常用的预置模型,并提供模型构建,模型编译,模型训练、验证与推理。serving通过搭建服务器来提供AI模型应用服务,为新手提供快速推理的体验。

TinyMS面向的主要用户群体为深度学习初学者、研究领域涉及深度学习结合的科研人员、以及深度学习相关业务应用开发的企业开发人员。

3、TinyMS使用笔记

实现图形分类应用(LeNet5模型)。

(1)先要做工作,是导入模块(TinyMS中的主要功能模块):

import json
import tinyms.optimizers as opt
from PIL import Image
from tinyms import context
from tinyms.data import MnistDataset, download_dataset
from tinyms.vision import mnist_transform, ImageViewer
from tinyms.model import Model, lenet5
from tinyms.serving import start_server, predict, list_servables, shutdown, server_started
from tinyms.metrics import Accuracy
from tinyms.losses import SoftmaxCrossEntropyWithLogits
from tinyms.callbacks import ModelCheckpoint, CheckpointConfig, LossMonitor

(2)接下来是构建模型,但听到这个环节不要打怵,并没有你印象中的那么多代码,现在只需要短短2行。

因为TinyMS封装了MindSpore LeNet5模型中的init和construct函数,所以代码量大幅减少:

# 构建网络
net = lenet5(class_num=10)
model = Model(net)

(3)构建完模型后,就是下载数据集 (TinyMS自带数据集):

# 下载数据集
mnist_path = '/root/mnist'
if not os.path.exists(mnist_path):
download_dataset('mnist', '/root')
print('************Download complete*************')
else:
print('************Dataset already exists.**************')

(4)在训练模型的过程当中,刚才下载的数据集,会被分为训练集和验证集。训练完成后会进行验证并输出 Accuracy 指标:

# 创建mnist路径
ckpt_folder = '
/etc/tinyms/serving/lenet5'
ckpt_path = '
/etc/tinyms/serving/lenet5/lenet5.ckpt'
if not os.path.exists(ckpt_folder):
!mkdir -p
/etc/tinyms/serving/lenet5
else:
print('lenet5 ckpt folder already exists')
# 设置环境参数
device_target = "CPU"
context.set_context(mode=context.GRAPH_MODE, device_target=device_target)
dataset_sink_mode = False
# 创建数据集
train_dataset = MnistDataset(os.path.join(mnist_path, "train"), shuffle=True)
train_dataset = mnist_transform.apply_ds(train_dataset)
eval_dataset = MnistDataset(os.path.join(mnist_path, "test"), shuffle=True)
eval_dataset = mnist_transform.apply_ds(eval_dataset)
# 设置训练参数
lr = 0.01
momentum = 0.9
epoch_size = 1
batch_size = 32
# 定义loss函数
net_loss =
SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean')
# 定义optimizer
net_opt = opt.Momentum(net.trainable_params(), lr, momentum)
net_metrics={"Accuracy": Accuracy()}
model.compile(loss_fn=net_loss, optimizer=net_opt, metrics=net_metrics)
print('************************Start training*************************')
ckpoint_cb = ModelCheckpoint(prefix="checkpoint_lenet", config=CheckpointConfig(save_checkpoint_steps=1875, keep_checkpoint_max=10))
model.train(epoch_size, train_dataset, callbacks=[ckpoint_cb, LossMonitor()],dataset_sink_mode=dataset_sink_mode)
print('************************Finished training*************************')
model.save_checkpoint(ckpt_path)
model.load_checkpoint(ckpt_path)
print('************************Start evaluation*************************')
acc = model.eval(eval_dataset, dataset_sink_mode=dataset_sink_mode)
print("============== Accuracy:{} ==============".format(acc))

(5)为了后续推理过程的需要,在训练模型后,需要定义一个lenet5 servable json文件。

该文件定义了servable名称,模型名称,模型格式和分类数量:

servable_json = [{'name': 'lenet5',
'description': 'This servable hosts a lenet5 model predicting numbers',
'model': {
"name": "lenet5",
"format": "ckpt",
"class_num": 10}}]
os.chdir("/etc/tinyms/serving")
json_data = json.dumps(servable_json, indent=4)
with open('servable.json', 'w') as json_file:
json_file.write(json_data)

(6)准备工作就绪,现在就要让“机器”运作起来(启动服务器):

start_server()

然后在命令行终端,用“scp”或者“wget”来获取一张图片作为输入(一张0~9之间的数字图片)。

使用list_servables函数检查当前后端的serving模型:

list_servables()

(7)如果输出的description字段显示这是一个lenet5的模型,那就可以顺利进入下一步——发送推理请求。

# 设置图片路径和输出策略(可以在TOP1和TOP5中选择)
image_path = "/root/7.png"
strategy = "TOP1_CLASS"
# predict(image_path, servable_name, dataset='mnist', strategy='TOP1_CLASS')
# predict方法的四个参数分别是图片路径、servable名称,数据集名称(默认MNIST)和输出策略(默认输出TOP1,可以选择TOP5)
if server_started() is True:
img_viewer = ImageViewer(Image.open(image_path), image_path)
img_viewer.show()
print(predict(image_path,'lenet5', 'mnist', strategy))
else:
print("Server not started")

如果最后你能看到这样的输出:

TOP1: 7, score: 0.99934917688369750977

恭喜你,一次成功的推理,就这么简单、顺利地完成了!

四、个人邮箱:1256494784@qq.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值