Paddle Serving全新设计Pipeline Serving!带来更高吞吐量、更高GPU利用率

点击左上方蓝字关注我们

在深度学习的产业应用中,千万不要认为炼制出神丹就万事大吉了,企业还需要面临一个挑战,那就是大规模推理部署。对工业级部署而言,要求的条件往往非常繁多且苛刻,模型大小、业务应用、硬件性能等条件的差异,都会影响模型部署的方式。而理想的部署方式,往往会让推理的效率更高,AI赋能产业的落地更加事半功倍。

Paddle Serving全新设计Pipeline Serving!带来更高吞吐量、更高GPU利用率_第1张图片

飞桨支持多种部署方式,包括高性能的服务器部署、多平台的端侧部署、网页端的web部署以及快捷的服务化部署,企业可以根据业务需求灵活选择。

Paddle Serving是飞桨服务化部署框架,为AI+落地的最后一公里提供专业、可靠、易用的服务。Paddle Serving 秉承模型即服务(Model As A Service,MAAS)的理念,让用户在使用飞桨框架成功完成模型训练的那一刻,收获的不再只是模型,而是同时拥有了该模型的推理服务。用户可以在短短的几分钟内,将模型迅速的转化为一个可以在服务器端部署的远程服务。

对企业而言,如果业务场景复杂,需要灵活的按需扩展,选择Paddle Serving进行部署就再正确不过。比如在IFAW与百度合作开发的“濒危动物AI守护者”项目中,利用AI技术升级传统的检测手段,模型的输入和输出更新频繁,使用Paddle Serving进行部署,短时间完成了从模型到远程服务的转化过程。

Paddle Serving全新设计Pipeline Serving!带来更高吞吐量、更高GPU利用率_第2张图片      Paddle Serving全新设计Pipeline Serving!带来更高吞吐量、更高GPU利用率_第3张图片

在全新的飞桨框架2.0 RC下,Paddle Serving 0.4.0版本有如下三点核心升级。

Paddle Serving全新设计Pipeline Serving!带来更高吞吐量、更高GPU利用率_第4张图片

  • 支持Pipeline Serving全异步设计的推理服务部署框架,实验证明,OCR任务的吞吐量提升1.5倍,GPU利用率提升1倍。

  • 支持NVIDIA TensorRT高性能推理库,实现模型推理低延迟、高吞吐。

  • 支持多系统、多语言客户端,覆盖更多的部署场景。


亮点一:支持Pipeline Serving全异步设计的的推理服务部署框架

在AI工业落地时,多个深度学习模型组合使用是解决现实问题的常规手段。以卡证识别任务为例,图文识别需要图像预处理、图像表示计算、文本切词、语义表示计算和匹配计算等多个模型共同使用。但多模型应用设计复杂,为了降低开发和维护难度,同时保证服务高可用,通常会采用串行或简单的并行方式,但此时延时仅达到可用状态,而GPU利用率偏低。

Pipeline Serving是一个全异步设计的推理服务部署框架,其Server端基于图执行引擎设计,能够并行处理同一阶段模型的计算,从而大大提升了GPU利用率,加快推理的效率。

如下图所示,图执行引擎由 OP 和 Channel 两部分构成,相连接的 OP 之间会共享一个 Channel。Request通过RPC方式将数据输入到图执行引擎(默认支持auto-batching),执行结果会返回给请求端。

Paddle Serving全新设计Pipeline Serving!带来更高吞吐量、更高GPU利用率_第5张图片

  • 默认情况下,OP根据输入的Channel数据,访问Paddle Serving 的单模型服务,并将结果存在输出的Channel中;OP也支持用户自定义,包括 preprocess,process,postprocess 三个函数都可以由用户继承和实现;RequestOp 和ResponseOp是用于处理 Pipeline Server RPC请求和返回结果的特殊OP。

  • Channel 是 OP 之间共享数据的数据结构,负责共享数据或者共享数据状态信息,可以理解为一个缓冲队列。用户只需要定义 OP 间的关系,在编译期,图引擎负责分析整个图的依赖关系,并自动生成Channel。

  • 下图为图执行引擎中 Channel 的设计,采用 input buffer 和 output buffer 进行多 OP 输入或多 OP 输出的数据对齐,中间采用一个 Queue 进行缓冲。

Paddle Serving全新设计Pipeline Serving!带来更高吞吐量、更高GPU利用率_第6张图片

图执行引擎采用异步IO的方式,能够支持大量并发的请求。在每个请求过程中,由于OP之间采用Channel共享数据,各个OP可以异步多线程/多进程并行处理请求。

以下图为例,用户的请求Request-1和Request-2可以由不同的入口OP实例OP-1 InstanceA和OP-1 InstanceB并行处理。OP-1节点处理完成后将数据输出到Channel中,OP-2节点(实例A/B)异步从Channel中获取数据处理后输出Response-1和Response-2。由于OP-1和OP-2并不是串行在一个进程/线程中,在OP-2节点还在处理时,OP-1的节点可同时处理新来的请求Request-3和Request-4,这样的设计大大提高了GPU利用率,使得推理的效率有一个大幅度的提升。

Paddle Serving全新设计Pipeline Serving!带来更高吞吐量、更高GPU利用率_第7张图片


Pipeline Serving实验结论

OCR任务的实际推理效果如下图所示,在非Pipeline模式下,QPS最大为12,GPU利用率为30%;Pipeline模式下,在单GPU卡、进程Det=4、Rec=2、batch =1的情况下,QPS为29.6,吞吐量约为非Pipeline模式的 2.5倍,GPU利用率为60%,约为非Pipeline模式的2倍。后续随着batch、进程数量的逐步增加,吞吐量和GPU利用率还会有更大提升。

Paddle Serving全新设计Pipeline Serving!带来更高吞吐量、更高GPU利用率_第8张图片


Pipeline Serving使用示例

Paddle Serving编译部署相关环境配置和操作请参见:

https://github.com/PaddlePaddle/Serving

本文默认在docker运行环境下,以IMDB模型的部署为例。用户可以通过修改Pipeline配置文件config.yml,设置DAG图引擎结构、OP节点和Channel等基本信息,相关示例在python/examples/pipeline。

目前Pipeline模型的部署支持两种模式:远端模式(RPC和HTTP)和本地模式(Local_Predictor)。

  • 远端模式(RPC/HTTP)

1. 获取模型

cd python/examples/pipeline/imdb_model_ensemble
sh get_data.sh

2. 启动服务端

python -m paddle_serving_server_gpu.serve --model imdb_cnn_model --port 9292 &> cnn.log &
python -m paddle_serving_server_gpu.serve --model imdb_bow_model --port 9393 &> bow.log &
python test_pipeline_server.py &>pipeline.log &

3. 启动RPC客户端

python test_pipeline_client.py

4. HTTP推理

curl -X POST -k http://localhost:9999/prediction -d '{"key": ["words"], "value": ["i am very sad | 0"]}'

  • 本地模式(Local_Predictor)

通过修改

python/examples/pipeline/imdb_model_ensemble/config.yml

文件中的“client_type”字段,切换本地和rpc模式,参考

python/examples/pipeline/ocr/config.yml的配置。

  • client_type: local_predictor

  • client_type: brpc

注意:本地推理方式config.yml文件中OP配置不能包含server_endpoints节点,且本地推理方式无须启动服务端。


亮点二:支持NVIDIA TensorRT高性能推理库,实现模型推理低延迟、高吞吐

在全新版本中,Paddle Serving支持使用NVIDIA TensorRT对模型推理进行加速。NVIDIA TensorRT是高性能的深度学习推理库,可为深度学习的推理应用程序提供低延迟、高吞吐量。飞桨采用子图的形式对TensorRT进行集成,从而提升模型的推理性能。

集成TensorRT版本编译方法请参见:

https://github.com/PaddlePaddle/Serving/blob/v0.4.0/doc/COMPILE_CN.md

使用TensorRT进行推理时,只需要启动PaddleServing服务时添加命令行参数--use_trt即可。以波士顿房价预测任务为例,使用TensorRT启动RPC推理服务的命令如下所示:

python -m paddle_serving_server.serve --model uci_housing_model --thread 10 --port 9292 –use_trt


亮点三:支持多平台、多语言客户端,提升使用便捷性

  • 支持Linux/Windows/Mac多系统编译部署

Paddle Serving目前支持在Linux/Windows/Mac上编译部署:

1) Linux

在原生Linux系统配置编译部署环境的详细步骤请参见:

https://github.com/PaddlePaddle/Serving/blob/develop/doc/COMPILE_CN.md

但飞桨更推荐开发者使用Docker编译,因为Docker中已经集成了Paddle Serving的编译环境。在Docker中运行的详细步骤请参见:

https://github.com/PaddlePaddle/Serving/blob/develop/doc/RUN_IN_DOCKER_CN.md

2)Windows

受限第三方库的支持,目前原生Windows系统只支持用web service的方式搭建local predictor推理服务,相关步骤请参考:

https://github.com/PaddlePaddle/Serving/blob/develop/doc/WINDOWS_TUTORIAL_CN.md

如果想体验全部的服务,需要使用Docker for Windows来模拟Linux的运行环境,部署步骤如下:

1. 安装Docker for Windows之后启动docker的linux engine,下载相关镜像。

docker pull hub.baidubce.com/paddlepaddle/serving:latest-devel

2. 启动docker。

docker run --rm -dit --name serving_devel -v $PWD:/Serving 
hub.baidubce.com/paddlepaddle/serving:latest-devel

3. 进入docker环境。

其余操作与Linux系统下使用Docker编译部署方法完全一致。

docker exec -it serving_devel bash
cd /Serving

3)Mac

Mac系统目前需要使用Docker for Mac来模拟Linux的运行环境,部署步骤与Windows系统一致。

  • 支持C++、Python、Java、Go多语言客户端

Paddle Serving支持包括C++、Python、Java、Go等多种语言。需要注意的是,多语言客户端要与多语言服务端配套使用,当前版本下(0.4.0),服务端需要将Server改为MultiLangServer(如果是以命令行启动的话,只需要添加--use_multilang参数)。

Java客户端参考文档:

https://github.com/PaddlePaddle/Serving/blob/develop/doc/JAVA_SDK_CN.md

Go客户端参考文档:

https://github.com/PaddlePaddle/Serving/blob/develop/doc/IMDB_GO_CLIENT_CN.md

以上三点就是Paddle Serving 0.4.0版本给开发者带来的全新升级。飞桨部署的研发工程师们期望能给开发者带来更加易用、更加丰富的部署方案,如果各位开发者对于飞桨部署有任何意见或建议,欢迎Issue联系我们,也可以STAR给我们多一些鼓励和支持。

Paddle Serving github地址:

https://github.com/PaddlePaddle/Serving

Paddle Serving全新设计Pipeline Serving!带来更高吞吐量、更高GPU利用率_第9张图片

如在使用过程中有问题,可加入官方QQ群进行交流:1108045677。

如果您想详细了解更多飞桨的相关内容,请参阅以下文档。

·飞桨官网地址·

https://www.paddlepaddle.org.cn/

·飞桨开源框架项目地址·

GitHub: https://github.com/PaddlePaddle/Paddle 

Gitee: https://gitee.com/paddlepaddle/Paddle

Paddle Serving全新设计Pipeline Serving!带来更高吞吐量、更高GPU利用率_第10张图片

微信号 : PaddleOpenSource

飞桨(PaddlePaddle)以百度多年的深度学习技术研究和业务应用为基础,是中国首个开源开放、技术领先、功能完备的产业级深度学习平台,包括飞桨开源平台和飞桨企业版。飞桨开源平台包含核心框架、基础模型库、端到端开发套件与工具组件,持续开源核心能力,为产业、学术、科研创新提供基础底座。飞桨企业版基于飞桨开源平台,针对企业级需求增强了相应特性,包含零门槛AI开发平台EasyDL和全功能AI开发平台BML。EasyDL主要面向中小企业,提供零门槛、预置丰富网络和模型、便捷高效的开发平台;BML是为大型企业提供的功能全面、可灵活定制和被深度集成的开发平台。

你可能感兴趣的:(docker,大数据,编程语言,python,人工智能)