资讯 社区 文档
PaddleVideo最新发布:支持3000种短视频分类,搞定足球精彩动作定位等
发布日期:2021-02-01 14:07浏览量:682次

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

飞桨支持多种部署方式,包括高性能的服务器部署、多平台的端侧部署、网页端的web部署以及快捷的服务化部署,企业可以根据业务需求灵活选择。
Paddle Serving是飞桨服务化部署框架,为AI+落地的最后一公里提供专业、可靠、易用的服务。Paddle Serving 秉承模型即服务(Model As A ServiceMAAS)的理念,让用户在使用飞桨框架成功完成模型训练的那一刻,收获的不再只是模型,而是同时拥有了该模型的推理服务。用户可以在短短的几分钟内,将模型迅速的转化为一个可以在服务器端部署的远程服务。
对企业而言,如果业务场景复杂,需要灵活的按需扩展,选择Paddle Serving进行部署就再正确不过。比如在IFAW与百度合作开发的濒危动物AI守护者项目中,利用AI技术升级传统的检测手段,模型的输入和输出更新频繁,使用Paddle Serving进行部署,短时间完成了从模型到远程服务的转化过程。
在全新的飞桨框架2.0 RC下,Paddle Serving 0.4.0版本有如下三点核心升级。
支持Pipeline Serving全异步设计的推理服务部署框架,实验证明,OCR任务的吞吐量提升1.5倍,GPU利用率提升1倍。
支持NVIDIA TensorRT高性能推理库,实现模型推理低延迟、高吞吐。
支持多系统、多语言客户端,覆盖更多的部署场景。

 

亮点一:支持Pipeline Serving全异步设计的的推理服务部署框架
AI工业落地时,多个深度学习模型组合使用是解决现实问题的常规手段。以卡证识别任务为例,图文识别需要图像预处理、图像表示计算、文本切词、语义表示计算和匹配计算等多个模型共同使用。但多模型应用设计复杂,为了降低开发和维护难度,同时保证服务高可用,通常会采用串行或简单的并行方式,但此时延时仅达到可用状态,而GPU利用率偏低。
Pipeline Serving是一个全异步设计的推理服务部署框架,其Server端基于图执行引擎设计,能够并行处理同一阶段模型的计算,从而大大提升了GPU利用率,加快推理的效率。
如下图所示,图执行引擎由 OP Channel 两部分构成,相连接的 OP 之间会共享一个 ChannelRequest通过RPC方式将数据输入到图执行引擎(默认支持auto-batching),执行结果会返回给请求端。
默认情况下,OP根据输入的Channel数据,访问Paddle Serving 的单模型服务,并将结果存在输出的Channel中;OP也支持用户自定义,包括 preprocessprocesspostprocess 三个函数都可以由用户继承和实现;RequestOp ResponseOp是用于处理 Pipeline Server RPC请求和返回结果的特殊OP 
Channel 是 OP 之间共享数据的数据结构,负责共享数据或者共享数据状态信息,可以理解为一个缓冲队列。用户只需要定义 OP 间的关系,在编译期,图引擎负责分析整个图的依赖关系,并自动生成Channel
下图为图执行引擎中 Channel 的设计,采用 input buffer output buffer 进行多 OP 输入或多 OP 输出的数据对齐,中间采用一个 Queue 进行缓冲。


图执行引擎采用异步IO的方式,能够支持大量并发的请求。在每个请求过程中,由于OP之间采用Channel共享数据,各个OP可以异步多线程/多进程并行处理请求。
以下图为例,用户的请求Request-1Request-2可以由不同的入口OP实例OP-1 InstanceAOP-1 InstanceB并行处理。OP-1节点处理完成后将数据输出到Channel中,OP-2节点(实例A/B)异步从Channel中获取数据处理后输出Response-1Response-2。由于OP-1OP-2并不是串行在一个进程/线程中,在OP-2节点还在处理时,OP-1的节点可同时处理新来的请求Request-3Request-4,这样的设计大大提高了GPU利用率,使得推理的效率有一个大幅度的提升。
Pipeline Serving实验结论
OCR任务的实际推理效果如下图所示,在非Pipeline模式下,QPS最大为12GPU利用率为30%Pipeline模式下,在单GPU卡、进程Det=4Rec=2batch =1的情况下,QPS29.6,吞吐量约为非Pipeline模式的 2.5倍,GPU利用率为60%,约为非Pipeline模式的2。后续随着batch、进程数量的逐步增加,吞吐量和GPU利用率还会有更大提升。
图片

Pipeline Serving

Paddle Serving编译部署相关环境配置和操作请参见:
https://github.com/PaddlePaddle/Serving
本文默认在docker运行环境下,以IMDB模型的部署为例。用户可以通过修改Pipeline配置文件config.yml,设置DAG图引擎结构、OP节点和Channel等基本信息,相关示例在python/examples/pipeline
目前Pipeline模型的部署支持两种模式:远端模式(RPCHTTP)和本地模式(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
2Windows
受限第三方库的支持,目前原生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之后启动dockerlinux 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

3Mac
Mac系统目前需要使用Docker for Mac来模拟Linux的运行环境,部署步骤与Windows系统一致
支持C++PythonJavaGo多语言客户端

Paddle Serving支持包括C++PythonJavaGo等多种语言。需要注意的是,多语言客户端要与多语言服务端配套使用,当前版本下(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
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术