Skip to content

Latest commit

 

History

History
304 lines (229 loc) · 13.8 KB

README_CN.md

File metadata and controls

304 lines (229 loc) · 13.8 KB

(简体中文|English)




Build Status Release Issues License Slack

动机

Paddle Serving 旨在帮助深度学习开发者轻易部署在线预测服务。 本项目目标: 当用户使用 Paddle 训练了一个深度神经网络,就同时拥有了该模型的预测服务。

Paddle Serving的核心功能

  • 与Paddle训练紧密连接,绝大部分Paddle模型可以 一键部署.
  • 支持 工业级的服务能力 例如模型管理,在线加载,在线A/B测试等.
  • 支持客户端和服务端之间 高并发和高效通信.
  • 支持 多种编程语言 开发客户端,例如C++, Python和Java.

教程

Paddle Serving开发者为您提供了简单易用的AIStudio教程-Paddle Serving服务化部署框架

教程提供了如下内容

  • Paddle Serving环境安装
    • Docker镜像启动方式
    • pip安装Paddle Serving
  • 快速体验部署在线推理服务
  • 部署在线推理服务进阶流程
    • 获取可用于部署在线服务的模型
    • 启动推理服务
  • Paddle Serving在线部署实例
    • 使用Paddle Serving部署图像检测服务
    • 使用Paddle Serving部署OCR Pipeline在线服务

安装

强烈建议您在Docker内构建Paddle Serving,请查看如何在Docker中运行PaddleServing。更多镜像请查看Docker镜像列表

提示:目前paddlepaddle 2.1版本的默认GPU环境是Cuda 10.2,因此GPU Docker的示例代码以Cuda 10.2为准。镜像和pip安装包也提供了其余GPU环境,用户如果使用其他环境,需要仔细甄别并选择合适的版本。

提示:本项目仅支持Python3.6/3.7/3.8,接下来所有的与Python/Pip相关的操作都需要选择正确的Python版本。

# 启动 CPU Docker
docker pull registry.baidubce.com/paddlepaddle/serving:0.6.0-devel
docker run -p 9292:9292 --name test -dit registry.baidubce.com/paddlepaddle/serving:0.6.0-devel bash
docker exec -it test bash
git clone https://github.com/PaddlePaddle/Serving
# 启动 GPU Docker
nvidia-docker pull registry.baidubce.com/paddlepaddle/serving:0.6.0-cuda10.2-cudnn8-devel
nvidia-docker run -p 9292:9292 --name test -dit registry.baidubce.com/paddlepaddle/serving:0.6.0-cuda10.2-cudnn8-devel bash
nvidia-docker exec -it test bash
git clone https://github.com/PaddlePaddle/Serving

安装所需的pip依赖

cd Serving
pip3 install -r python/requirements.txt
pip3 install paddle-serving-client==0.6.0
pip3 install paddle-serving-server==0.6.0 # CPU
pip3 install paddle-serving-app==0.6.0
pip3 install paddle-serving-server-gpu==0.6.0.post102 #GPU with CUDA10.2 + TensorRT7
# 其他GPU环境需要确认环境再选择执行哪一条
pip3 install paddle-serving-server-gpu==0.6.0.post101 # GPU with CUDA10.1 + TensorRT6
pip3 install paddle-serving-server-gpu==0.6.0.post11 # GPU with CUDA10.1 + TensorRT7

您可能需要使用国内镜像源(例如清华源, 在pip命令中添加-i https://pypi.tuna.tsinghua.edu.cn/simple)来加速下载。

如果需要使用develop分支编译的安装包,请从最新安装包列表中获取下载地址进行下载,使用pip install命令进行安装。如果您想自行编译,请参照Paddle Serving编译文档

paddle-serving-server和paddle-serving-server-gpu安装包支持Centos 6/7, Ubuntu 16/18和Windows 10。

paddle-serving-client和paddle-serving-app安装包支持Linux和Windows,其中paddle-serving-client仅支持python3.6/3.7/3.8。

最新的0.6.0的版本,已经不支持Cuda 9.0和Cuda 10.0,Python已不支持2.7和3.5。

推荐安装2.1.0及以上版本的paddle

# CPU环境请执行
pip3 install paddlepaddle==2.1.0

# GPU Cuda10.2环境请执行
pip3 install paddlepaddle-gpu==2.1.0

注意: 如果您的Cuda版本不是10.2,请勿直接执行上述命令,需要参考Paddle官方文档-多版本whl包列表

选择相应的GPU环境的url链接并进行安装,例如Cuda 10.1的Python3.6用户,请选择表格当中的cp36-cp36mcuda10.1-cudnn7-mkl-gcc8.2-avx-trt6.0.1.5对应的url,复制下来并执行

pip3 install https://paddle-wheel.bj.bcebos.com/with-trt/2.1.0-gpu-cuda10.1-cudnn7-mkl-gcc8.2/paddlepaddle_gpu-2.1.0.post101-cp36-cp36m-linux_x86_64.whl

由于默认的paddlepaddle-gpu==2.1.0是Cuda 10.2,并没有联编TensorRT,因此如果需要和在paddlepaddle-gpu上使用TensorRT,需要在上述多版本whl包列表当中,找到cuda10.2-cudnn8.0-trt7.1.3,下载对应的Python版本。更多信息请参考如何使用TensorRT?

如果是其他环境和Python版本,请在表格中找到对应的链接并用pip安装。

对于Windows 10 用户,请参考文档Windows平台使用Paddle Serving指导

快速开始示例

这个快速开始示例主要是为了给那些已经有一个要部署的模型的用户准备的,而且我们也提供了一个可以用来部署的模型。如果您想知道如何从离线训练到在线服务走完全流程,请参考前文的AiStudio教程。

波士顿房价预测

进入到Serving的git目录下,进入到fit_a_line例子

cd Serving/python/examples/fit_a_line
sh get_data.sh

Paddle Serving 为用户提供了基于 HTTP 和 RPC 的服务

RPC服务

用户还可以使用paddle_serving_server.serve启动RPC服务。 尽管用户需要基于Paddle Serving的python客户端API进行一些开发,但是RPC服务通常比HTTP服务更快。需要指出的是这里我们没有指定--name

python3 -m paddle_serving_server.serve --model uci_housing_model --thread 10 --port 9292
Argument Type Default Description
thread int 4 Concurrency of current service
port int 9292 Exposed port of current service to users
name str "" Service name, can be used to generate HTTP request url
model str "" Path of paddle model directory to be served
mem_optim_off - - Disable memory optimization
ir_optim bool False Enable analysis and optimization of calculation graph
use_mkl (Only for cpu version) - - Run inference with MKL
use_trt (Only for Cuda>=10.1 version) - - Run inference with TensorRT
use_lite (Only for Intel x86 CPU or ARM CPU) - - Run PaddleLite inference
use_xpu - - Run PaddleLite inference with Baidu Kunlun XPU
precision str FP32 Precision Mode, support FP32, FP16, INT8
# A user can visit rpc service through paddle_serving_client API
from paddle_serving_client import Client

client = Client()
client.load_client_config("uci_housing_client/serving_client_conf.prototxt")
client.connect(["127.0.0.1:9292"])
data = [0.0137, -0.1136, 0.2553, -0.0692, 0.0582, -0.0727,
        -0.1583, -0.0584, 0.6283, 0.4919, 0.1856, 0.0795, -0.0332]
fetch_map = client.predict(feed={"x": np.array(data).reshape(1,13,1)}, fetch=["price"])
print(fetch_map)

在这里,client.predict函数具有两个参数。 feed是带有模型输入变量别名和值的python dictfetch被要从服务器返回的预测变量赋值。 在该示例中,在训练过程中保存可服务模型时,被赋值的tensor名为"x""price"

HTTP服务

用户也可以将数据格式处理逻辑放在服务器端进行,这样就可以直接用curl去访问服务,参考如下案例,在目录python/examples/fit_a_line.

python3 -m paddle_serving_server.serve --model uci_housing_model --thread 10 --port 9292 --name uci

客户端输入

curl -H "Content-Type:application/json" -X POST -d '{"feed":[{"x": [0.0137, -0.1136, 0.2553, -0.0692, 0.0582, -0.0727, -0.1583, -0.0584, 0.6283, 0.4919, 0.1856, 0.0795, -0.0332]}], "fetch":["price"]}' http://127.0.0.1:9292/uci/prediction

返回结果

{"result":{"price":[[18.901151657104492]]}}

Pipeline服务

Paddle Serving提供业界领先的多模型串联服务,强力支持各大公司实际运行的业务场景,参考 OCR文字识别案例,在目录python/examples/pipeline/ocr

我们先获取两个模型

python3 -m paddle_serving_app.package --get_model ocr_rec
tar -xzvf ocr_rec.tar.gz
python3 -m paddle_serving_app.package --get_model ocr_det
tar -xzvf ocr_det.tar.gz

然后启动服务端程序,将两个串联的模型作为一个整体的服务。

python3 web_service.py

最终使用http的方式请求

python3 pipeline_http_client.py

也支持rpc的方式

python3 pipeline_rpc_client.py

输出

{'err_no': 0, 'err_msg': '', 'key': ['res'], 'value': ["['土地整治与土壤修复研究中心', '华南农业大学1素图']"]}

文档

新手教程

开发者教程

关于Paddle Serving性能

设计文档

FAQ

社区

Slack

想要同开发者和其他用户沟通吗?欢迎加入我们的 Slack channel

贡献代码

如果您想为Paddle Serving贡献代码,请参考 Contribution Guidelines

  • 特别感谢 @BeyondYourself 提供grpc教程,更新FAQ教程,整理文件目录。
  • 特别感谢 @mcl-stone 提供faster rcnn benchmark脚本
  • 特别感谢 @cg82616424 提供unet benchmark脚本和修改部分注释错误
  • 特别感谢 @cuicheng01 提供PaddleClas的11个模型

反馈

如有任何反馈或是bug,请在 GitHub Issue提交

License

Apache 2.0 License