FAQ

查看源文件

Q:MindSpore Serving是否支持热更新,避免推理服务中断?

A:MindSpore Serving当前不支持热更新,需要用户重启;当前建议跑多个Serving服务,升级模型版本时,重启部分服务以避免服务中断。


Q:MindSpore Serving是否支持一个模型启动多个Worker,以支持多卡单模型并发?

A:MindSpore Serving1.3版本后支持一个模型在多卡部署多个副本,实现多卡单模型并发执行。详细可以参考Add样例


Q:MindSpore Serving的版本和MindSpore的版本如何配套?

A:MindSpore Serving配套相同版本号的MindSpore的版本,比如Serving 1.1.1版本配套 MindSpore 1.1.1版本。


Q:编译时使用bash -p方式和 bash -e方式有什么区别?

A:MindSpore Serving的编译和运行依赖MindSpore,Serving提供两种编译方式:一种指定已安装的MindSpore路径,即bash -p {python site-packages}/mindspore/lib,避免编译Serving时再编译MindSpore;另一种,编译Serving时,编译配套的MindSpore,Serving会将-e-V-j选项透传给MindSpore。 比如,在Serving目录下,bash -e ascend -V 910 -j32

  • 首先将会以bash -e ascend -V 910 -j32方式编译third_party/mindspore目录下的MindSpore;

  • 其次,编译脚本将MindSpore编译结果作为Serving的编译依赖。


Q:运行应用时报错libmindspore.so: cannot open shared object file: No such file or directory怎么办?

A:首先,需要确认是否安装MindSpore Serving所依赖的MindSpore;其次,Serving 1.1需要配置LD_LIBRARY_PATH,显式指定libmindspore.so所在路径,libmindspore.so当前在MindSpore Python安装路径的lib目录下;Serving 1.2后不再需要显示指定libmindspore.so所在路径,Serving会基于MindSpore安装路径查找并追加配置LD_LIBRARY_PATH,用户不再需要感知。


Q:如何控制Serving日志输出?

A:MindSpore Serving采用glog来输出日志,详细可参考日志相关的环境变量和配置,在此基础上,额外补充的内容:

  • MS_SUBMODULE_LOG_v

该环境变量除了指定MindSpore C++各子模块日志级别,也可用于控制MindSpore Serving的日志级别。

可以通过GLOG_v=2 MS_SUBMODULE_LOG_v=”{SERVING:1}”把Serving模块的日志级别设为INFO,其他模块的日志级别设为WARNING。


Q: 通过MindSpore Serving gRPC客户端发送超大消息报’assertion failed: slice_buffer->length <= UINT32_MAX’,什么原因?

具体报错信息:

test_serving_client_grpc.py::test_serving_grpc_pressure_big_message E0413 20:03:08.764913058 122601 byte_stream.cc:40] assertion failed: slice_buffer->length <= UINT32_MAX
Fatal Python error: Aborted
Current thread 0x0000ffffb4884010 (most recent call first):
File ".../python3.7/site-packages/grpc/_channel.py", line 909 in _blocking
File ".../python3.7/site-packages/grpc/_channel.py", line 922 in call
File ".../python3.7/site-packages/mindspore_serving/client/python/client.py", line 217 in infer

A: MindSpore Serving提供Python Client封装gRPC消息通信,根据报错信息可知,gRPC底层校验发现消息大小大于4G(UINT32_MAX)。

进一步,MindSpore Serving默认设置了服务器接受消息大小为100MB,在接口def start_grpc_server(address, max_msg_mb_size=100, ssl_config=None)def start_restful_server(address, max_msg_mb_size=100, ssl_config=None)可配置max_msg_mb_size参数设置服务器可接受的最大消息。

max_msg_mb_size接受[1,512]范围的整数数值,即可控制最大接收到的消息大小为1~512MB。如果超过了服务器的限定值,客户端将报类似以下错误,其中104857600即是服务器默认的限定100MB:

Received message larger than max (419429033 vs. 104857600)
RESOURCE_EXHAUSTED
(8, 'resource exhausted')

客户端已通过参数限定最大发送消息大小为512MB。如果超过这个数值,客户端将会报类似这个错误:

Sent message larger than max (838858033 vs. 536870912)
RESOURCE_EXHAUSTED
(8, 'resource exhausted')