paddleserving模型部署,⼯业级落地部署,⾼可⽤、⾼并发、⾼吞吐、低延时
获取模型的⽅式
训练过程直接保存可部署的模型
”通常训练过程是使⽤的save_inference_model接⼝保存模型的,但是这样保存的模型⽂件中缺少Paddle Serving部署所需要的配置⽂件。当前Paddle Serving提供了⼀个save_model的API接⼝,⽤于帮助⽤户在训练过程中保存模型,即将Paddle Serving在部署阶段需要⽤到的参数与配置⽂件统⼀保存打包。相关API接⼝的应⽤⽰例代码如下所⽰,只要参考下⾯两⾏代码将训练程序中的
save_inference_model替换为save_model,就可以训练出供Paddle Serving使⽤的模型⽂件了。⽰例中,{“words”: data}和{“prediction”: prediction}分别指定了模型的输⼊和输出,"words"和"prediction"输⼊和输出变量的别名,设计别名的⽬的是为了便于开发者能够记忆⾃⼰训练模型的输⼊输出对应的字段。
静态图
import paddle_serving_client.io as serving_io
serving_io.save_model("serving_model","client_conf",
{"words": data},{"prediction": prediction},
paddle.static.default_main_program())
动态图
import paddle_serving_client.io as serving_io
serving_io.save_dygraph_model("serving_model","client_conf", model)
训练完后进⾏转换
如果⽤户已使⽤paddlejit.save(动态图) 或者 save_inference_model接⼝(静态图)保存出可⽤于推理的模型,Paddle Serving为⼤家提供了paddle_vert接⼝,该接⼝可以把已保存的模型转换成可⽤于Paddle Serving使⽤的模型⽂件。相关API接⼝的应⽤⽰例代码如下所⽰,
graphics 610python -m paddle_vert --dirname $MODEL_DIR --model_filename $MODEL_FILENAME --params_filename PARAMS_FILENAME --servi ng_server $SERVING_SERVER_DIR --serving_client $SERVING_CLIENT_D
其中各个参数解释如下所⽰:机械手编程教程视频
dirname (str) – 需要转换的模型⽂件存储路径,Program结构⽂件和参数⽂件均保存在此⽬录。
serving_server (str, 可选) - 转换后的模型⽂件和配置⽂件的存储路径。默认值为serving_server。
serving_client (str, 可选) - 转换后的客户端配置⽂件存储路径。默认值为serving_client。
大数据管理与应用学什么model_filename (str,可选) – 存储需要转换的模型Inference Program结构的⽂件名称。如果设置为None,则使⽤ model 作为默认的⽂件名。默认值为None。
params_filename (str,可选) – 存储需要转换的模型所有参数的⽂件名称。当且仅当所有模型参数被保存在⼀个单独的⼆进制⽂件中,它才需要被指定。如果模型参数是存储在各⾃分离的⽂件中,设置它的值为None。默认值为None。
上⾯介绍了两种获取可⽤于部署在线服务的模型的⽅法,根据上⾯的两个例⼦,新模型保存成功后,飞桨都会按照⽤户指定
的"serving_model和"client_conf""⽣成两个⽬录,如下所⽰:
.
├── client_conf
│ ├── serving_client_conf.prototxt
│ └── serving_client_conf.stream.prototxt
└── serving_model
├── params
python基础教程电子书百度云├── model
├── serving_server_conf.prototxt
└── serving_server_conf.stream.prototxt
其中,"serving_client_conf.prototxt"和"serving_server_conf.prototxt"是Paddle Serving的客户端和服务端需要加载的配置,"serving_client_conf.stream.prototxt"和"serving_server_conf.stream.prototxt"是配置⽂件的⼆进制形式。"serving_model"下保存的其它内容和原先的save_inference_model接⼝保存的模型⽂件是⼀致的。未来我们会考虑在Paddle框架中直接保存可服务的配置,实现配置保存对⽤户⽆感,提升⽤户体验。
四种部署应⽤⽅式
常见的深度学习模型开发流程需要经过问题定义、数据准备、特征提取、建模、训练过程,以及最后⼀个环——将训练出来的模型部署应⽤到实际业务中。如图1所⽰,当前⽤户在训练出⼀个可⽤的模型后,可以选择如下四种部署应⽤⽅式:
服务器端⾼性能部署:将模型部署在服务器上,利⽤服务器的⾼性能帮助⽤户处理推理业务。
就是吧静态图的前向推理,从本地搬到服务器上⽽已,模型本⾝没有服务化,没有体现分布式部署
模型服务化部署:将模型以线上服务的形式部署在服务器或者云端,⽤户通过客户端请求发送需要推理的输⼊内容,服务器或者云通过响应报⽂将推理结果返回给⽤户。
这种⽅式与其它⽅式相⽐,对于使⽤者来说,最⼤的特点就是“独乐乐不如众乐乐”。也就是说,在模型部署成功后,不同⽤户都可以通过客户端以发送⽹络请求的⽅式获得推理服务。如图2所⽰,通过建模、训练获得的模型在部署到云端后形成云服务,例如百度云,百度云会和负载均衡的模块连接,其中负载均衡模块的作⽤是防⽌访问流量过⼤。⽤户可以通过⼿机、电脑等设备访问云上的推理服务。
web是一种什么文件BS:(Browser/Server,浏览器/服务器模式),web应⽤ 可以实现跨平台,客户端零维护,但是个性化能⼒低,响应速度较慢。
CS:(Client/Server,客户端/服务器模式),桌⾯级应⽤ 响应速度快,安全性强,个性化能⼒强,响应数据较快
RPC 服务(C/S 结构)(c/c++,客户端类似app )
⼀⾏命令启动RPC⽅式的推理服务的原理是什么呢?如下图所⽰,该图为RPC推理服务的流程图。Paddle Serving使⽤了百度开源的PRC 通信库,该通信库使⽤可兼容多种语⾔的Protobuf格式的报⽂
来封装请求或响应字段。
在推理过程中,Client端把⽤户的输⼊数据,例如⼀条或多条电影评论打包到Protobuf报⽂中并发送给服务端。服务端内部有多个算⼦,通过这些算⼦服务端在收到Protobuf报⽂后,可以从Protobuf报⽂中解析出飞桨推理库可以读取的输⼊数据格式,然后由推理库做推理,推理结果将被重新封装为Protobuf格式返回给客户端。显⽽易见,通过使⽤Paddle Serving,⽤户将不需要去了解飞桨的推理库的输⼊输出格式,整个从读取输⼊数据到返回推理结果都将由Paddle Serving服务端内部的算⼦完成。Paddle Serving通过
paddle_serving_server_gpu.serve(paddle_serving_server.serve)这个服务模块将这些算⼦串联到⼀起,完成整个在线推理的服务流程。因此⽤户仅需要⼀条命令调⽤这个服务模块,并设定好推理使⽤的模型以及服务端⼝等信息,即可完成在线推理服务启动⼯作。
服务端没有逻辑,客户端编写预处理和后处理逻辑db2数据库日志满了怎么清理
RPC服务是CS架构,⽤户使⽤客户端来访问服务端获取推理结果,客户端和服务端之间的通信使⽤的是百度开源的⼀款RPC通信库来完成的。RPC具有⾼并发、低延时等特点,已经⽀持了包括百度在内上百万在线推理实例、上千个在线推理服务,稳定可靠,其整体性能要优于HTTP,但是只能适⽤于Linux操作系统,⽽且需要编写Client端的代码。如果⽤户的推理业务需要数据前后处理,例如训练图⽚的归⼀化,⽂本的ID化等等,这部分代码也需要包含在客户端中。
⽤户还可以使⽤paddle_serving_server.serve启动RPC服务。 尽管⽤户需要基于Paddle Serving的python客户端API进⾏⼀些开发,但是RPC服务通常⽐HTTP服务更快。需要指出的是这⾥我们没有指定–name。
HTTP服务(Web服务)(B/S架构)
服务端直接包含了逻辑处理部分
⽤户可以将数据格式处理逻辑放在服务器端进⾏,这样就可以直接⽤curl去访问服务
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论