Skip to content

Latest commit

 

History

History
246 lines (185 loc) · 10.4 KB

README_CN.md

File metadata and controls

246 lines (185 loc) · 10.4 KB

(简体中文|English)




Build Status Release Issues License Slack

动机

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

安装

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

# 启动 CPU Docker
docker pull hub.baidubce.com/paddlepaddle/serving:latest
docker run -p 9292:9292 --name test -dit hub.baidubce.com/paddlepaddle/serving:latest
docker exec -it test bash
# 启动 GPU Docker
nvidia-docker pull hub.baidubce.com/paddlepaddle/serving:latest-cuda9.0-cudnn7
nvidia-docker run -p 9292:9292 --name test -dit hub.baidubce.com/paddlepaddle/serving:latest-cuda9.0-cudnn7
nvidia-docker exec -it test bash
pip install paddle-serving-client==0.4.0
pip install paddle-serving-server==0.4.0 # CPU
pip install paddle-serving-app==0.2.0
pip install paddle-serving-server-gpu==0.4.0.post9 # GPU with CUDA9.0
pip install paddle-serving-server-gpu==0.4.0.post10 # GPU with CUDA10.0
pip install paddle-serving-server-gpu==0.4.0.100 # GPU with CUDA10.1+TensorRT

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

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

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仅支持python2.7/3.5/3.6。

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

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

Paddle Serving预装的服务

中文分词

> python -m paddle_serving_app.package --get_model lac
> tar -xzf lac.tar.gz
> python lac_web_service.py lac_model/ lac_workdir 9393 &
> curl -H "Content-Type:application/json" -X POST -d '{"feed":[{"words": "我爱北京天安门"}], "fetch":["word_seg"]}' http://127.0.0.1:9393/lac/prediction
{"result":[{"word_seg":"我|爱|北京|天安门"}]}

图像分类



> python -m paddle_serving_app.package --get_model resnet_v2_50_imagenet
> tar -xzf resnet_v2_50_imagenet.tar.gz
> python resnet50_imagenet_classify.py resnet50_serving_model &
> curl -H "Content-Type:application/json" -X POST -d '{"feed":[{"image": "https://paddle-serving.bj.bcebos.com/imagenet-example/daisy.jpg"}], "fetch": ["score"]}' http://127.0.0.1:9292/image/prediction
{"result":{"label":["daisy"],"prob":[0.9341403245925903]}}

快速开始示例

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

波士顿房价预测

wget --no-check-certificate https://paddle-serving.bj.bcebos.com/uci_housing.tar.gz
tar -xzf uci_housing.tar.gz

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

RPC服务

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

python -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 - - Enable analysis and optimization of calculation graph
use_mkl (Only for cpu version) - - Run inference with MKL
use_trt (Only for trt version) - - Run inference with TensorRT

我们使用 curl 命令来发送HTTP POST请求给刚刚启动的服务。用户也可以调用python库来发送HTTP POST请求,请参考英文文 档 requests

# 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`
from paddle_serving_server.web_service import WebService
import numpy as np

class UciService(WebService):
    def preprocess(self, feed=[], fetch=[]):
        feed_batch = []
        is_batch = True
        new_data = np.zeros((len(feed), 1, 13)).astype("float32")
        for i, ins in enumerate(feed):
            nums = np.array(ins["x"]).reshape(1, 1, 13)
            new_data[i] = nums
        feed = {"x": new_data}
        return feed, fetch, is_batch

uci_service = UciService(name="uci")
uci_service.load_model_config("uci_housing_model")
uci_service.prepare_server(workdir="workdir", port=9292)
uci_service.run_rpc_service()
uci_service.run_web_service()

客户端输入

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]]}}

Paddle Serving的核心功能

  • 与Paddle训练紧密连接,绝大部分Paddle模型可以 一键部署.
  • 支持 工业级的服务能力 例如模型管理,在线加载,在线A/B测试等.
  • 支持 分布式键值对索引 助力于大规模稀疏特征作为模型输入.
  • 支持客户端和服务端之间 高并发和高效通信.
  • 支持 多种编程语言 开发客户端,例如Golang,C++和Python.

文档

新手教程

AIStudio教程

开发者教程

关于Paddle Serving性能

FAQ

设计文档

社区

Slack

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

贡献代码

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

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

反馈

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

License

Apache 2.0 License