MindSpore Serving是一个轻量级、高性能的服务模块,旨在帮助MindSpore开发者在生产环境中高效部署在线推理服务。当用户使用MindSpore完成模型训练后,导出MindSpore模型,即可使用MindSpore Serving创建该模型的推理服务。
MindSpore Serving架构:
当前MindSpore Serving服务节点分为client,master和worker。client为用户节点,下发推理服务命令。执行机worker部署了模型服务。当前仅支持Ascend 310和Ascend 910,后续会逐步支持GPU和CPU场景。master节点用来管理所有的执行机worker及其部署的模型信息,并进行任务管理与分发。master和worker可以部署在一个进程中,也可以部署在不同进程中。

MindSpore Serving提供以下功能:
MindSpore Serving依赖MindSpore训练推理框架,安装完MindSpore ,再安装MindSpore Serving。
使用pip命令安装,安装方式如下:
1、请从MindSpore Serving下载页面下载并安装whl包。
pip install mindspore_serving-1.0.0-cp37-cp37m-linux_x86_64.whl
2、源码安装。
下载源码。
方式一,使用已安装或编译的MindSpore包:
sh build.sh -p $MINDSPORE_LIB_PATH
$MINDSPORE_LIB_PATH为mindspore软件包的安装路径下的lib路径,例:softwarepath/mindspore/lib,该路径包含mindspore运行依赖的库文件。
方式二,编译Serving时编译配套的MindSpore包,需要配置MindSpore编译时的环境变量 :
# ascend 310
sh build.sh -eacl
# ascend 910
sh build.sh -ed
编译完后,在output/目录下找到安装包进行安装:
pip install mindspore_serving-0.1.0-cp37-cp37m-linux_x86_64.whl
Asend 910环境上安装mindspore,需要完成环境变量配置。
运行MindSpore Serving,还需要增加额外mindspore软件包的安装路径下的lib路径到LD_LIBRARY_PATH。
export LD_LIBRARY_PATH=$MINDSPORE_LIB_PATH:${LD_LIBRARY_PATH}
MindSpore Serving提供两种部署方式,用户可根据需要进行选择部署。
轻量级部署:
服务端调用python接口直接启动推理进程(master和worker共进程),客户端直接连接推理服务后下发推理任务。
启动服务:
import os
from mindspore_serving import master
from mindspore_serving import worker
servable_dir = os.path.abspath(".")
worker.start_servable_in_master(servable_dir, "xxx", device_id=0)
master.start_grpc_server("127.0.0.1", 5500)
集群部署:
服务端由master进程和worker进程组成,master用来管理集群内所有的worker节点,并进行推理任务的分发。
启动worker:
import os
from mindspore_serving import worker
servable_dir = os.path.abspath(".")
worker.start_servable(servable_dir, "lenet", device_id=0,
master_ip="127.0.0.1", master_port=5500,
host_ip="127.0.0.1", host_port=5600)
启动master:
from mindspore_serving import master
master.start_grpc_server("127.0.0.1", 5500)
完成服务端部署后,即可启用客户端程序执行推理操作。
以一个简单的Add网络为例,演示MindSpore Serving如何使用。
使用add_model.py,构造一个只有Add算子的网络,并导出MindSpore推理部署模型。
python add_model.py
执行脚本,生成tensor_add.mindir文件,该模型的输入为两个shape为[2,2]的二维Tensor,输出结果是两个输入Tensor之和。
执行以下python程序,启动服务:
import os
from mindspore_serving import master
from mindspore_serving import worker
def start():
servable_dir = os.path.abspath(".")
worker.start_servable_in_master(servable_dir, "add", device_id=0)
master.start_grpc_server("127.0.0.1", 5500)
启动过程需要使用servable_dir路径下的模型文件和配置文件,文件目录结果如下图所示:
add/ ├── 1 │ └── tensor_add.mindir └── servable_config.py
其中,模型文件为上一步网络生成的,即tensor_add.mindir文件。配置文件为servable_config.py,其定义了模型的处理函数,包含前处理和后处理过程。
当服务端打印日志Serving gRPC start success, listening on 0.0.0.0:5500时,表示Serving服务已加载推理模型完毕。
使用client.py,启动Python客户端。
python client.py
显示如下返回值说明Serving服务已正确执行Add网络的推理。
[{'y': array([[2. , 2.],
[2., 2.]], dtype=float32)}]
[{'y': array([[2. , 2.],
[2., 2.]], dtype=float32)}]
有关安装指南、教程和API的更多详细信息,请参阅用户文档。
查看MindSpore如何进行开放治理。
#mindsporeIRC频道(仅用于会议记录)欢迎参与贡献。
版本说明请参阅RELEASE。