提交 6f96fc8a 编写于 作者: D Dong Daxiang 提交者: GitHub

Update README.md

update readme content
上级 091adb96
......@@ -7,9 +7,14 @@ An easy-to-use Machine Learning Model Inference Service Deployment Tool
[中文](./doc/README_CN.md)
Paddle Serving is the online inference service framework of [Paddle](https://github.com/PaddlePaddle/Paddle) that can help developers easily deploy a deep learning model service on server side and send request from mobile devices, edge devices as well as data centers. Currently, Paddle Serving supports the deep learning models produced by Paddle althought it can be very easy to support other deep learning framework's model inference. Paddle Serving is designed oriented from industrial practice. For example, multiple models management for online service, double buffers model loading, models online A/B testing are supported. Highly concurrent [Baidu-rpc](https://github.com/apache/incubator-brpc) is used as the underlying communication library which is also from industry practice. Paddle Serving provides user-friendly API that can integrate with Paddle training code seamlessly, and users can finish model training and model serving in an end-to-end fasion.
Paddle Serving helps deep learning developers deploy an online inference service without much effort. Currently, Paddle Serving supports the deep learning models produced by [Paddle](https://github.com/PaddlePaddle/Paddle) althought it can be very easy to support other deep learning framework's model inference engine.
## Key Features
- Integrate with Paddle training pipeline seemlessly, most paddle models can be deployed with one line command.
- Industrial serving features supported, such as multiple models management, model online loading, online A/B testing etc.
- Distributed Key-Value indexing supported that is especially useful for large scale sparse features as model inputs.
- Highly concurrent and efficient communication, with [Baidu-rpc](https://github.com/apache/incubator-brpc) supported.
- Multiple programming language supported on client side, such as Golang, C++ and python
## Quick Start
......@@ -22,73 +27,21 @@ pip install paddle-serving-client
pip install paddle-serving-server
```
### Training Scripts
### Save Model with Paddle
``` python
import paddle
train_reader = paddle.batch(paddle.reader.shuffle(
paddle.dataset.uci_housing.train(), buf_size=500), batch_size=16)
x = paddle.fluid.data(name='x', shape=[None, 13], dtype='float32')
y = paddle.fluid.data(name='y', shape=[None, 1], dtype='float32')
y_predict = paddle.fluid.layers.fc(input=x, size=1, act=None)
cost = paddle.fluid.layers.square_error_cost(input=y_predict, label=y)
avg_loss = paddle.fluid.layers.mean(cost)
sgd_optimizer = paddle.fluid.optimizer.SGD(learning_rate=0.01)
sgd_optimizer.minimize(avg_loss)
place = paddle.fluid.CPUPlace()
feeder = paddle.fluid.DataFeeder(place=place, feed_list=[x, y])
exe = paddle.fluid.Executor(place)
exe.run(paddle.fluid.default_startup_program())
# training scripts for uci housing price regression
# after training, save model with serving client API
# we are working on integrate this API with Paddle API
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(
paddle.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}, paddle.fluid.default_main_program())
"uci_housing_model", "uci_housing_client",
{"x": x}, {"price": y_predict}, fluid.default_main_program())
```
### Server side launch command
### Server Side Scripts
```
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')
infer_op = op_maker.create('general_infer')
response_op = op_maker.create('general_response')
op_seq_maker = OpSeqMaker()
op_seq_maker.add_op(read_op)
op_seq_maker.add_op(infer_op)
op_seq_maker.add_op(response_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")
```
### Start Server
```
python test_server.py serving_server_model
``` shell
python -m paddle_serving_server.serve --model uci_housing_model --thread 10 --port 9292
```
### Client Side Scripts
......@@ -109,7 +62,6 @@ 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]))
```
......@@ -118,6 +70,12 @@ for data in test_reader():
[Design Doc(Chinese)](doc/DESIGN.md)
[How to config Serving native operators on server side?](doc/SERVER_OP.md)
[How to develop a new Serving operator](doc/OPERATOR.md)
[Client API for other programming languages](doc/CLIENT_API.md)
[FAQ(Chinese)](doc/FAQ.md)
### Advanced features and development
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册