未验证 提交 8520cc79 编写于 作者: D Dong Daxiang 提交者: GitHub

Update README.md

上级 61504183
...@@ -2,7 +2,8 @@ ...@@ -2,7 +2,8 @@
Paddle Serving是PaddlePaddle的在线预估服务框架,能够帮助开发者轻松实现从移动端、服务器端调用深度学习模型的远程预测服务。当前Paddle Serving以支持PaddlePaddle训练的模型为主,可以与Paddle训练框架联合使用,快速部署预估服务。 Paddle Serving是PaddlePaddle的在线预估服务框架,能够帮助开发者轻松实现从移动端、服务器端调用深度学习模型的远程预测服务。当前Paddle Serving以支持PaddlePaddle训练的模型为主,可以与Paddle训练框架联合使用,快速部署预估服务。
## 快速上手 ## 快速上手
Paddle Serving当前的develop版本支持轻量级Python API进行快速预测,我们假设远程已经部署的Paddle Serving的文本分类模型,您可以在自己的服务器快速安装客户端并进行快速预测。
Paddle Serving当前的develop版本支持轻量级Python API进行快速预测,并且与Paddle的训练可以打通。我们以最经典的波士顿房价预测为示例,说明Paddle Serving的使用方法。
#### 安装 #### 安装
``` ```
...@@ -12,59 +13,42 @@ pip install paddle-serving-server ...@@ -12,59 +13,42 @@ pip install paddle-serving-server
#### 训练脚本 #### 训练脚本
``` python ``` python
import os
import sys import sys
import paddle import paddle
import logging
import paddle.fluid as fluid import paddle.fluid as fluid
def load_vocab(filename): train_reader = paddle.batch(paddle.reader.shuffle(
vocab = {} paddle.dataset.uci_housing.train(), buf_size=500), batch_size=16)
with open(filename) as f:
wid = 0 test_reader = paddle.batch(paddle.reader.shuffle(
for line in f: paddle.dataset.uci_housing.test(), buf_size=500), batch_size=16)
vocab[line.strip()] = wid
wid += 1 x = fluid.data(name='x', shape=[None, 13], dtype='float32')
vocab["<unk>"] = len(vocab) y = fluid.data(name='y', shape=[None, 1], dtype='float32')
return vocab
y_predict = fluid.layers.fc(input=x, size=1, act=None)
if __name__ == "__main__": cost = fluid.layers.square_error_cost(input=y_predict, label=y)
vocab = load_vocab('imdb.vocab') avg_loss = fluid.layers.mean(cost)
dict_dim = len(vocab) sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.01)
sgd_optimizer.minimize(avg_loss)
data = fluid.layers.data(name="words", shape=[1], dtype="int64", lod_level=1)
label = fluid.layers.data(name="label", shape=[1], dtype="int64") place = fluid.CPUPlace()
feeder = fluid.DataFeeder(place=place, feed_list=[x, y])
dataset = fluid.DatasetFactory().create_dataset() exe = fluid.Executor(place)
filelist = ["train_data/%s" % x for x in os.listdir("train_data")] exe.run(fluid.default_startup_program())
dataset.set_use_var([data, label])
pipe_command = "python imdb_reader.py" import paddle_serving_client.io as serving_io
dataset.set_pipe_command(pipe_command)
dataset.set_batch_size(4) for pass_id in range(30):
dataset.set_filelist(filelist) for data_train in train_reader():
dataset.set_thread(10) avg_loss_value, = exe.run(
from nets import cnn_net fluid.default_main_program(),
avg_cost, acc, prediction = cnn_net(data, label, dict_dim) feed=feeder.feed(data_train),
optimizer = fluid.optimizer.SGD(learning_rate=0.01) fetch_list=[avg_loss])
optimizer.minimize(avg_cost)
serving_io.save_model(
exe = fluid.Executor(fluid.CPUPlace()) "serving_server_model", "serving_client_conf",
exe.run(fluid.default_startup_program()) {"x": x}, {"y": y_predict}, fluid.default_main_program())
epochs = 30
import paddle_serving_client.io as serving_io
for i in range(epochs):
exe.train_from_dataset(program=fluid.default_main_program(),
dataset=dataset, debug=False)
logger.info("TRAIN --> pass: {}".format(i))
if i == 20:
serving_io.save_model("serving_server_model",
"serving_client_conf",
{"words": data, "label": label},
{"cost": avg_cost, "acc": acc,
"prediction": prediction},
fluid.default_main_program())
``` ```
#### 服务器端代码 #### 服务器端代码
...@@ -97,20 +81,19 @@ python test_server.py serving_server_model ...@@ -97,20 +81,19 @@ python test_server.py serving_server_model
#### 客户端预测 #### 客户端预测
``` python ``` python
from paddle_serving_client import Client from paddle_serving_client import Client
import paddle
import sys import sys
client = Client() client = Client()
client.load_client_config(sys.argv[1]) client.load_client_config(sys.argv[1])
client.connect(["127.0.0.1:9393"]) client.connect(["127.0.0.1:9292"])
for line in sys.stdin: test_reader = paddle.batch(paddle.reader.shuffle(
group = line.strip().split() paddle.dataset.uci_housing.test(), buf_size=500), batch_size=1)
words = [int(x) for x in group[1:int(group[0]) + 1]]
label = [int(group[-1])] for data in test_reader():
feed = {"words": words, "label": label} fetch_map = client.predict(feed={"x": data[0][0]}, fetch=["y"])
fetch = ["cost", "acc", "prediction"] print("{} {}".format(fetch_map["y"][0], data[0][1][0]))
fetch_map = client.predict(feed=feed, fetch=fetch)
print("{} {}".format(fetch_map["prediction"][1], label[0]))
``` ```
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册