|一键启动在线推理服务,轻松实现在线部署,这有个「炼丹」利器( 四 )


1. 获取示例模型文件
使用 paddle-serving-app 下载图像分割模型示例文件 。
python -m paddle_serving_app.package --get_model senta_bilstmpython -m paddle_serving_app.package --get_model lactar -xzf senta_bilstm.tar.gztar -xzf lac.tar.gz
解压后将会生成 LAC 模型和 Senta 模型的服务端和客户端的部署文件 lac_model、lac_client、senta_bilstm_model 和 senta_bilstm_client 。
2. 启动推理服务
先在 9300 端口上启动预处理使用的 LAC 模型的推理服务 。
python -m paddle_serving_server.serve --model lac_model --port 9300
在 Senta 模型的推理服务中 , 会在预处理部分去访问本地的 9300 端口 , 获取 LAC 模型的推理结果再进一步处理成为 Senta 模型的输入数据 。 启动 Senta 服务的脚本(senta_web_service.py)如下所示:
from paddle_serving_server.web_service import WebServicefrom paddle_serving_client import Clientfrom paddle_serving_app.reader import LACReader, SentaReader
class SentaService(WebService): #初始化LAC模型预测服务 def init_lac_client(self, lac_port, lac_client_config): self.lac_reader = LACReader() self.senta_reader = SentaReader() # 创建LAC模型推理的客户端 self.lac_client = Client() # 加载LAC模型的配置文件 self.lac_client.load_client_config(lac_client_config) # 连接LAC服务 self.lac_client.connect([''X.X.X.X:{}''.format(lac_port)])
#定义Senta模型推理服务的预处理 , 调用顺序:lac reader->LAC模型推理->推理结果后处理->senta reader def preprocess(self, feed=[], fetch=[]): feed_data = http://news.hoteastday.com/a/[{''words'': self.lac_reader.process(x[''words'']) } for x in feed] lac_result = self.lac_client.predict( feed=feed_data, fetch=[''crf_decode'']) feed_batch = [] result_lod = lac_result[''crf_decode.lod''] for i in range(len(feed)): segs = self.lac_reader.parse_result( feed[i][''words''], lac_result[''crf_decode''][result_lod[i]:result_lod[i + 1]]) feed_data = http://news.hoteastday.com/a/self.senta_reader.process(segs) feed_batch.append({''words'': feed_data}) return feed_batch, fetch# Senta Service封装了启动Senta模型和对接Senta预处理的流程#声明推理服务 senta_service = SentaService(name=''senta'') #加载Senta模型的配置文件 senta_service.load_model_config(''senta_bilstm_model'') #配置推理服务的工作目录和端口 senta_service.prepare_server(workdir=''workdir'' ,port=9393) #初始化LAC分词推理服务的客户端 senta_service.init_lac_client( lac_port=9300, lac_client_config=''lac_model/serving_server_conf.prototxt'') #启动Senta模型推理服务的RPC服务部分 , Senta模型使用RPC协议和LAC模型通信senta_service.run_rpc_service() #启动Senta模型推理服务的http服务部分 senta_service.run_web_service()
用户可以在服务端上执行下面的命令来调用 senta_web_service.py 脚本来启动 Senta 推理服务 , 推理服务的端口为 9393 。
3. 通过客户端访问推理服务
通过 HTTP 请求来访问服务 , 其中 X.X.X.X 为服务端的地址 。
curl -H ''Content-Type:application/json'' -X POST -d '{''feed'':[{''words'': ''天气不错''}], ''fetch'':[''class_probs'']}' http://X.X.X.X:9393/senta/prediction
获取到的返回结果如下所示 , class_probs 中为样本的推理概率 , 分别为消极情绪的概率和积极情绪的概率 。
{''result'':{''class_probs'':[[0.0690595954656601,0.9309403896331787]]}}


推荐阅读