提交 28c11848 编写于 作者: B barrierye

Merge branch 'develop' of https://github.com/PaddlePaddle/Serving into pyserving

([简体中文](./README_CN.md)|English)
<p align="center"> <p align="center">
<br> <br>
<img src='doc/serving_logo.png' width = "600" height = "130"> <img src='doc/serving_logo.png' width = "600" height = "130">
<br> <br>
<p> <p>
<p align="center"> <p align="center">
<br> <br>
<a href="https://travis-ci.com/PaddlePaddle/Serving"> <a href="https://travis-ci.com/PaddlePaddle/Serving">
......
(简体中文|[English](./README.md))
<p align="center"> <p align="center">
<br> <br>
<img src='https://paddle-serving.bj.bcebos.com/imdb-demo%2FLogoMakr-3Bd2NM-300dpi.png' width = "600" height = "130"> <img src='https://paddle-serving.bj.bcebos.com/imdb-demo%2FLogoMakr-3Bd2NM-300dpi.png' width = "600" height = "130">
<br> <br>
<p> <p>
<p align="center"> <p align="center">
<br> <br>
<a href="https://travis-ci.com/PaddlePaddle/Serving"> <a href="https://travis-ci.com/PaddlePaddle/Serving">
......
...@@ -21,7 +21,10 @@ import os ...@@ -21,7 +21,10 @@ import os
class BertService(WebService): class BertService(WebService):
def load(self): def load(self):
self.reader = ChineseBertReader(vocab_file="vocab.txt", max_seq_len=128) self.reader = ChineseBertReader({
"vocab_file": "vocab.txt",
"max_seq_len": 128
})
def preprocess(self, feed=[], fetch=[]): def preprocess(self, feed=[], fetch=[]):
feed_res = [ feed_res = [
......
# Image Segmentation
## Get Model
```
python -m paddle_serving_app.package --get_model deeplabv3
tar -xzvf deeplabv3.tar.gz
```
## RPC Service
### Start Service
```
python -m paddle_serving_server_gpu.serve --model deeplabv3_server --gpu_ids 0 --port 9494
```
### Client Prediction
```
python deeplabv3_client.py
```
# 图像分割
## 获取模型
```
python -m paddle_serving_app.package --get_model deeplabv3
tar -xzvf deeplabv3.tar.gz
```
## RPC 服务
### 启动服务端
```
python -m paddle_serving_server_gpu.serve --model deeplabv3_server --gpu_ids 0 --port 9494
```
### 客户端预测
```
python deeplabv3_client.py
...@@ -18,7 +18,7 @@ import sys ...@@ -18,7 +18,7 @@ import sys
import cv2 import cv2
client = Client() client = Client()
client.load_client_config("seg_client/serving_client_conf.prototxt") client.load_client_config("deeplabv3_client/serving_client_conf.prototxt")
client.connect(["127.0.0.1:9494"]) client.connect(["127.0.0.1:9494"])
preprocess = Sequential( preprocess = Sequential(
......
...@@ -12,8 +12,8 @@ If you want to have more detection models, please refer to [Paddle Detection Mod ...@@ -12,8 +12,8 @@ If you want to have more detection models, please refer to [Paddle Detection Mod
### Start the service ### Start the service
``` ```
tar xf faster_rcnn_model.tar.gz tar xf faster_rcnn_model.tar.gz
mv faster_rcnn_model/pddet *. mv faster_rcnn_model/pddet* .
GLOG_v=2 python -m paddle_serving_server_gpu.serve --model pddet_serving_model --port 9494 --gpu_id 0 GLOG_v=2 python -m paddle_serving_server_gpu.serve --model pddet_serving_model --port 9494 --gpu_ids 0
``` ```
### Perform prediction ### Perform prediction
......
...@@ -13,7 +13,7 @@ wget https://paddle-serving.bj.bcebos.com/pddet_demo/infer_cfg.yml ...@@ -13,7 +13,7 @@ wget https://paddle-serving.bj.bcebos.com/pddet_demo/infer_cfg.yml
``` ```
tar xf faster_rcnn_model.tar.gz tar xf faster_rcnn_model.tar.gz
mv faster_rcnn_model/pddet* ./ mv faster_rcnn_model/pddet* ./
GLOG_v=2 python -m paddle_serving_server_gpu.serve --model pddet_serving_model --port 9494 --gpu_id 0 GLOG_v=2 python -m paddle_serving_server_gpu.serve --model pddet_serving_model --port 9494 --gpu_ids 0
``` ```
### 执行预测 ### 执行预测
......
...@@ -19,10 +19,10 @@ pip install paddle_serving_app ...@@ -19,10 +19,10 @@ pip install paddle_serving_app
启动server端 启动server端
``` ```
python image_classification_service.py ResNet50_vd_model cpu 9696 #cpu预测服务 python resnet50_web_service.py ResNet50_vd_model cpu 9696 #cpu预测服务
``` ```
``` ```
python image_classification_service.py ResNet50_vd_model gpu 9696 #gpu预测服务 python resnet50_web_service.py ResNet50_vd_model gpu 9696 #gpu预测服务
``` ```
......
# Image Classification
## Get Model
```
python -m paddle_serving_app.package --get_model mobilenet_v2_imagenet
tar -xzvf mobilenet_v2_imagenet.tar.gz
```
## RPC Service
### Start Service
```
python -m paddle_serving_server_gpu.serve --model mobilenet_v2_imagenet_model --gpu_ids 0 --port 9393
```
### Client Prediction
```
python mobilenet_tutorial.py
```
# 图像分类
## 获取模型
```
python -m paddle_serving_app.package --get_model mobilenet_v2_imagenet
tar -xzvf mobilenet_v2_imagenet.tar.gz
```
## RPC 服务
### 启动服务端
```
python -m paddle_serving_server_gpu.serve --model mobilenet_v2_imagenet_model --gpu_ids 0 --port 9393
```
### 客户端预测
```
python mobilenet_tutorial.py
```
# Image Classification
## Get Model
```
python -m paddle_serving_app.package --get_model resnet_v2_50_imagenet
tar -xzvf resnet_v2_50_imagenet.tar.gz
```
## RPC Service
### Start Service
```
python -m paddle_serving_server_gpu.serve --model resnet_v2_50_imagenet_model --gpu_ids 0 --port 9393
```
### Client Prediction
```
python resnet50_v2_tutorial.py
```
# 图像分类
## 获取模型
```
python -m paddle_serving_app.package --get_model resnet_v2_50_imagenet
tar -xzvf resnet_v2_50_imagenet.tar.gz
```
## RPC 服务
### 启动服务端
```
python -m paddle_serving_server_gpu.serve --model resnet_v2_50_imagenet_model --gpu_ids 0 --port 9393
```
### 客户端预测
```
python resnet50_v2_tutorial.py
```
# Image Segmentation
## Get Model
```
python -m paddle_serving_app.package --get_model unet
tar -xzvf unet.tar.gz
```
## RPC Service
### Start Service
```
python -m paddle_serving_server_gpu.serve --model unet_model --gpu_ids 0 --port 9494
```
### Client Prediction
```
python seg_client.py
```
# 图像分割
## 获取模型
```
python -m paddle_serving_app.package --get_model unet
tar -xzvf unet.tar.gz
```
## RPC 服务
### 启动服务端
```
python -m paddle_serving_server_gpu.serve --model unet_model --gpu_ids 0 --port 9494
```
### 客户端预测
```
python seg_client.py
```
...@@ -12,7 +12,7 @@ pip install paddle_serving_app ...@@ -12,7 +12,7 @@ pip install paddle_serving_app
## Get model list ## Get model list
```shell ```shell
python -m paddle_serving_app.package --model_list python -m paddle_serving_app.package --list_model
``` ```
## Download pre-training model ## Download pre-training model
......
...@@ -11,7 +11,7 @@ pip install paddle_serving_app ...@@ -11,7 +11,7 @@ pip install paddle_serving_app
## 获取模型列表 ## 获取模型列表
```shell ```shell
python -m paddle_serving_app.package --model_list python -m paddle_serving_app.package --list_model
``` ```
## 下载预训练模型 ## 下载预训练模型
......
...@@ -296,7 +296,10 @@ class File2Image(object): ...@@ -296,7 +296,10 @@ class File2Image(object):
pass pass
def __call__(self, img_path): def __call__(self, img_path):
if py_version == 2:
fin = open(img_path) fin = open(img_path)
else:
fin = open(img_path, "rb")
sample = fin.read() sample = fin.read()
data = np.fromstring(sample, np.uint8) data = np.fromstring(sample, np.uint8)
img = cv2.imdecode(data, cv2.IMREAD_COLOR) img = cv2.imdecode(data, cv2.IMREAD_COLOR)
......
...@@ -61,13 +61,18 @@ class SDKConfig(object): ...@@ -61,13 +61,18 @@ class SDKConfig(object):
self.tag_list = [] self.tag_list = []
self.cluster_list = [] self.cluster_list = []
self.variant_weight_list = [] self.variant_weight_list = []
self.rpc_timeout_ms = 20000
self.load_balance_strategy = "la"
def add_server_variant(self, tag, cluster, variant_weight): def add_server_variant(self, tag, cluster, variant_weight):
self.tag_list.append(tag) self.tag_list.append(tag)
self.cluster_list.append(cluster) self.cluster_list.append(cluster)
self.variant_weight_list.append(variant_weight) self.variant_weight_list.append(variant_weight)
def gen_desc(self): def set_load_banlance_strategy(self, strategy):
self.load_balance_strategy = strategy
def gen_desc(self, rpc_timeout_ms):
predictor_desc = sdk.Predictor() predictor_desc = sdk.Predictor()
predictor_desc.name = "general_model" predictor_desc.name = "general_model"
predictor_desc.service_name = \ predictor_desc.service_name = \
...@@ -86,7 +91,7 @@ class SDKConfig(object): ...@@ -86,7 +91,7 @@ class SDKConfig(object):
self.sdk_desc.predictors.extend([predictor_desc]) self.sdk_desc.predictors.extend([predictor_desc])
self.sdk_desc.default_variant_conf.tag = "default" self.sdk_desc.default_variant_conf.tag = "default"
self.sdk_desc.default_variant_conf.connection_conf.connect_timeout_ms = 2000 self.sdk_desc.default_variant_conf.connection_conf.connect_timeout_ms = 2000
self.sdk_desc.default_variant_conf.connection_conf.rpc_timeout_ms = 20000 self.sdk_desc.default_variant_conf.connection_conf.rpc_timeout_ms = rpc_timeout_ms
self.sdk_desc.default_variant_conf.connection_conf.connect_retry_count = 2 self.sdk_desc.default_variant_conf.connection_conf.connect_retry_count = 2
self.sdk_desc.default_variant_conf.connection_conf.max_connection_per_host = 100 self.sdk_desc.default_variant_conf.connection_conf.max_connection_per_host = 100
self.sdk_desc.default_variant_conf.connection_conf.hedge_request_timeout_ms = -1 self.sdk_desc.default_variant_conf.connection_conf.hedge_request_timeout_ms = -1
...@@ -119,6 +124,7 @@ class Client(object): ...@@ -119,6 +124,7 @@ class Client(object):
self.profile_ = _Profiler() self.profile_ = _Profiler()
self.all_numpy_input = True self.all_numpy_input = True
self.has_numpy_input = False self.has_numpy_input = False
self.rpc_timeout_ms = 20000
def load_client_config(self, path): def load_client_config(self, path):
from .serving_client import PredictorClient from .serving_client import PredictorClient
...@@ -171,6 +177,12 @@ class Client(object): ...@@ -171,6 +177,12 @@ class Client(object):
self.predictor_sdk_.add_server_variant(tag, cluster, self.predictor_sdk_.add_server_variant(tag, cluster,
str(variant_weight)) str(variant_weight))
def set_rpc_timeout_ms(self, rpc_timeout):
if not isinstance(rpc_timeout, int):
raise ValueError("rpc_timeout must be int type.")
else:
self.rpc_timeout_ms = rpc_timeout
def connect(self, endpoints=None): def connect(self, endpoints=None):
# check whether current endpoint is available # check whether current endpoint is available
# init from client config # init from client config
...@@ -188,7 +200,7 @@ class Client(object): ...@@ -188,7 +200,7 @@ class Client(object):
print( print(
"parameter endpoints({}) will not take effect, because you use the add_variant function.". "parameter endpoints({}) will not take effect, because you use the add_variant function.".
format(endpoints)) format(endpoints))
sdk_desc = self.predictor_sdk_.gen_desc() sdk_desc = self.predictor_sdk_.gen_desc(self.rpc_timeout_ms)
self.client_handle_.create_predictor_by_desc(sdk_desc.SerializeToString( self.client_handle_.create_predictor_by_desc(sdk_desc.SerializeToString(
)) ))
......
...@@ -23,6 +23,7 @@ import paddle_serving_server as paddle_serving_server ...@@ -23,6 +23,7 @@ import paddle_serving_server as paddle_serving_server
from .version import serving_server_version from .version import serving_server_version
from contextlib import closing from contextlib import closing
import collections import collections
import fcntl
class OpMaker(object): class OpMaker(object):
...@@ -322,6 +323,10 @@ class Server(object): ...@@ -322,6 +323,10 @@ class Server(object):
bin_url = "https://paddle-serving.bj.bcebos.com/bin/" + tar_name bin_url = "https://paddle-serving.bj.bcebos.com/bin/" + tar_name
self.server_path = os.path.join(self.module_path, floder_name) self.server_path = os.path.join(self.module_path, floder_name)
#acquire lock
version_file = open("{}/version.py".format(self.module_path), "r")
fcntl.flock(version_file, fcntl.LOCK_EX)
if not os.path.exists(self.server_path): if not os.path.exists(self.server_path):
print('Frist time run, downloading PaddleServing components ...') print('Frist time run, downloading PaddleServing components ...')
r = os.system('wget ' + bin_url + ' --no-check-certificate') r = os.system('wget ' + bin_url + ' --no-check-certificate')
...@@ -345,6 +350,8 @@ class Server(object): ...@@ -345,6 +350,8 @@ class Server(object):
foemat(self.module_path)) foemat(self.module_path))
finally: finally:
os.remove(tar_name) os.remove(tar_name)
#release lock
version_file.close()
os.chdir(self.cur_path) os.chdir(self.cur_path)
self.bin_path = self.server_path + "/serving" self.bin_path = self.server_path + "/serving"
......
...@@ -25,6 +25,7 @@ from .version import serving_server_version ...@@ -25,6 +25,7 @@ from .version import serving_server_version
from contextlib import closing from contextlib import closing
import argparse import argparse
import collections import collections
import fcntl
def serve_args(): def serve_args():
...@@ -347,6 +348,11 @@ class Server(object): ...@@ -347,6 +348,11 @@ class Server(object):
download_flag = "{}/{}.is_download".format(self.module_path, download_flag = "{}/{}.is_download".format(self.module_path,
folder_name) folder_name)
#acquire lock
version_file = open("{}/version.py".format(self.module_path), "r")
fcntl.flock(version_file, fcntl.LOCK_EX)
if os.path.exists(download_flag): if os.path.exists(download_flag):
os.chdir(self.cur_path) os.chdir(self.cur_path)
self.bin_path = self.server_path + "/serving" self.bin_path = self.server_path + "/serving"
...@@ -377,6 +383,8 @@ class Server(object): ...@@ -377,6 +383,8 @@ class Server(object):
format(self.module_path)) format(self.module_path))
finally: finally:
os.remove(tar_name) os.remove(tar_name)
#release lock
version_file.cloes()
os.chdir(self.cur_path) os.chdir(self.cur_path)
self.bin_path = self.server_path + "/serving" self.bin_path = self.server_path + "/serving"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册