README.md 3.7 KB
Newer Older
G
guru4elephant 已提交
1
# Paddle Serving
D
Dong Daxiang 已提交
2

D
Dong Daxiang 已提交
3
Paddle Serving是PaddlePaddle的在线预估服务框架,能够帮助开发者轻松实现从移动端、服务器端调用深度学习模型的远程预测服务。当前Paddle Serving以支持PaddlePaddle训练的模型为主,可以与Paddle训练框架联合使用,快速部署预估服务。Paddle Serving围绕常见的工业级深度学习模型部署场景进行设计,一些常见的功能包括多模型管理、模型热加载、基于[Baidu-rpc](https://github.com/apache/incubator-brpc)的高并发低延迟响应能力、在线模型A/B实验等。与Paddle训练框架想配合的API可以使用户在训练与远程部署之间无缝过度,提升深度学习模型的落地效率。
D
Dong Daxiang 已提交
4 5

------------
D
Dong Daxiang 已提交
6

D
Dong Daxiang 已提交
7
## 快速上手指南
D
Dong Daxiang 已提交
8

D
Dong Daxiang 已提交
9
Paddle Serving当前的develop版本支持轻量级Python API进行快速预测,并且与Paddle的训练可以打通。我们以最经典的波士顿房价预测为示例,完整说明在单机进行模型训练以及使用Paddle Serving进行模型部署的过程。
D
Dong Daxiang 已提交
10

D
Dong Daxiang 已提交
11
#### 安装
G
guru4elephant 已提交
12 13
```
pip install paddle-serving-client
D
Dong Daxiang 已提交
14
pip install paddle-serving-server
G
guru4elephant 已提交
15
```
D
Dong Daxiang 已提交
16

D
Dong Daxiang 已提交
17
#### 训练脚本
G
guru4elephant 已提交
18
``` python
G
guru4elephant 已提交
19 20 21 22
import sys
import paddle
import paddle.fluid as fluid

D
Dong Daxiang 已提交
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
train_reader = paddle.batch(paddle.reader.shuffle(
    paddle.dataset.uci_housing.train(), buf_size=500), batch_size=16)

test_reader = paddle.batch(paddle.reader.shuffle(
    paddle.dataset.uci_housing.test(), buf_size=500), batch_size=16)

x = fluid.data(name='x', shape=[None, 13], dtype='float32')
y = fluid.data(name='y', shape=[None, 1], dtype='float32')

y_predict = fluid.layers.fc(input=x, size=1, act=None)
cost = fluid.layers.square_error_cost(input=y_predict, label=y)
avg_loss = fluid.layers.mean(cost)
sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.01)
sgd_optimizer.minimize(avg_loss)

place = fluid.CPUPlace()
feeder = fluid.DataFeeder(place=place, feed_list=[x, y])
exe = fluid.Executor(place)
exe.run(fluid.default_startup_program())

import paddle_serving_client.io as serving_io

for pass_id in range(30):
    for data_train in train_reader():
        avg_loss_value, = exe.run(
            fluid.default_main_program(),
            feed=feeder.feed(data_train),
            fetch_list=[avg_loss])

serving_io.save_model(
    "serving_server_model", "serving_client_conf",
    {"x": x}, {"y": y_predict}, fluid.default_main_program())
G
guru4elephant 已提交
55
```
D
Dong Daxiang 已提交
56

D
Dong Daxiang 已提交
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
#### 服务器端代码
``` python
import sys
from paddle_serving.serving_server import OpMaker
from paddle_serving.serving_server import OpSeqMaker
from paddle_serving.serving_server import Server

op_maker = OpMaker()
read_op = op_maker.create('general_reader')
general_infer_op = op_maker.create('general_infer')

op_seq_maker = OpSeqMaker()
op_seq_maker.add_op(read_op)
op_seq_maker.add_op(general_infer_op)

server = Server()
server.set_op_sequence(op_seq_maker.get_op_sequence())
server.load_model_config(sys.argv[1])
server.prepare_server(workdir="work_dir1", port=9393, device="cpu")
server.run_server()
```

#### 服务器端启动
``` shell
python test_server.py serving_server_model
```
D
Dong Daxiang 已提交
83

D
Dong Daxiang 已提交
84
#### 客户端预测
G
guru4elephant 已提交
85
``` python
D
Dong Daxiang 已提交
86
from paddle_serving_client import Client
D
Dong Daxiang 已提交
87
import paddle
G
guru4elephant 已提交
88
import sys
D
Dong Daxiang 已提交
89

G
guru4elephant 已提交
90 91
client = Client()
client.load_client_config(sys.argv[1])
D
Dong Daxiang 已提交
92 93 94 95 96 97 98 99
client.connect(["127.0.0.1:9292"])

test_reader = paddle.batch(paddle.reader.shuffle(
    paddle.dataset.uci_housing.test(), buf_size=500), batch_size=1)

for data in test_reader():
    fetch_map = client.predict(feed={"x": data[0][0]}, fetch=["y"])
    print("{} {}".format(fetch_map["y"][0], data[0][1][0]))
W
wangguibao 已提交
100

G
guru4elephant 已提交
101
```
W
wangguibao 已提交
102

G
guru4elephant 已提交
103
### 文档
W
wangguibao 已提交
104

G
guru4elephant 已提交
105
[设计文档](doc/DESIGN.md)
W
wangguibao 已提交
106

D
Dong Daxiang 已提交
107
[FAQ](doc/FAQ.md)
W
wangguibao 已提交
108

D
Dong Daxiang 已提交
109
### 资深开发者使用指南
W
wangguibao 已提交
110

D
Dong Daxiang 已提交
111 112 113
[基于C++核心从零开始写一个预测服务](doc/CREATING.md)

[编译指南](doc/INSTALL.md)
W
wangguibao 已提交
114

D
Dong Daxiang 已提交
115
## 贡献
D
Dong Daxiang 已提交
116
如果你想要给Paddle Serving做贡献,请参考[贡献指南](doc/CONTRIBUTE.md)
D
Dong Daxiang 已提交
117