README_CN.md 4.6 KB
Newer Older
W
wangjiawei04 已提交
1 2 3 4
## 用于Paddle Serving的Java客户端

([English](./README.md)|简体中文)

H
HexToString 已提交
5
## 开发环境
W
wangjiawei04 已提交
6 7 8 9

为了方便用户使用java进行开发,我们提供了编译好的Serving工程放置在java镜像当中,获取镜像并进入开发环境的方式是

```
T
Thomas Young 已提交
10 11
docker pull registry.baidubce.com/paddlepaddle/serving:0.6.0-java
docker run --rm -dit --name java_serving registry.baidubce.com/paddlepaddle/serving:0.6.0-java
W
wangjiawei04 已提交
12 13 14 15 16
docker exec -it java_serving bash
cd Serving/java
```

Serving文件夹是镜像生成时的develop分支工程目录,需要git pull 到最新版本,或者git checkout 到想要的分支。
M
MRXLT 已提交
17

H
HexToString 已提交
18
## 安装客户端依赖
W
wangjiawei04 已提交
19 20 21

由于依赖库数量庞大,因此镜像已经在生成时编译过一次,用户执行以下操作即可

M
MRXLT 已提交
22 23 24 25 26 27 28 29
```
mvn compile
mvn install
cd examples
mvn compile
mvn install
```

H
HexToString 已提交
30 31
## 请求BRPC-Server

T
Thomas Young 已提交
32
### 服务端启动
H
HexToString 已提交
33 34 35 36 37 38 39 40 41

以fit_a_line模型为例,服务端启动与常规BRPC-Server端启动命令一样。

```
cd ../../python/examples/fit_a_line
sh get_data.sh
python -m paddle_serving_server.serve --model uci_housing_model --thread 10 --port 9393
```

T
Thomas Young 已提交
42
### 客户端预测
H
HexToString 已提交
43 44 45 46 47 48 49
客户端目前支持多种请求方式,目前支持HTTP(数据为JSON格式)、HTTP(数据为PROTO格式)、GRPC

推荐您使用HTTP(数据为PROTO格式),此时数据体为PROTO格式,传输的数据量小,速度快,目前已经帮用户实现了HTTP/GRPC的数据体(JSON/PROTO)的封装函数,详见[Client.java](./src/main/java/io/paddle/serving/client/Client.java)
```
cd ../../../java/examples/target
java -cp paddle-serving-sdk-java-examples-0.0.1-jar-with-dependencies.jar PaddleServingClientExample http_proto <configPath>
```
T
Thomas Young 已提交
50
**注意  `<configPath>`为客户端配置文件,一般是名为serving_client_conf.prototxt的文件。**
H
HexToString 已提交
51 52 53 54 55 56

更多示例详见[PaddleServingClientExample.java](./examples/src/main/java/PaddleServingClientExample.java)


## 请求Pipeline-Server

T
Thomas Young 已提交
57
### 服务端启动
58 59 60 61 62 63 64 65 66 67 68

对于input data type = string类型,以IMDB model ensemble模型为例,服务端启动

```
cd ../../python/examples/pipeline/imdb_model_ensemble
sh get_data.sh
python -m paddle_serving_server.serve --model imdb_cnn_model --port 9292 &> cnn.log &
python -m paddle_serving_server.serve --model imdb_bow_model --port 9393 &> bow.log &
python test_pipeline_server.py &>pipeline.log &
```

T
Thomas Young 已提交
69
### 客户端预测(同步)
70 71 72 73 74 75

```
cd ../../../java/examples/target
java -cp paddle-serving-sdk-java-examples-0.0.1-jar-with-dependencies.jar PipelineClientExample string_imdb_predict
```

T
Thomas Young 已提交
76
### 客户端预测(异步)
77 78 79 80 81 82 83

```
cd ../../../java/examples/target
java -cp paddle-serving-sdk-java-examples-0.0.1-jar-with-dependencies.jar PipelineClientExample asyn_predict
```


T
Thomas Young 已提交
84
### 对于input data type = INDArray类型,以Simple Pipeline WebService中的uci_housing_model模型为例,服务端启动
85 86 87 88

```
cd ../../python/examples/pipeline/simple_web_service
sh get_data.sh
89
python web_service_java.py &>log.txt &
90 91
```

T
Thomas Young 已提交
92
### 客户端预测(同步)
93 94 95 96

```
cd ../../../java/examples/target
java -cp paddle-serving-sdk-java-examples-0.0.1-jar-with-dependencies.jar PipelineClientExample indarray_predict
W
wangjiawei04 已提交
97 98
```

T
fix doc  
Thomas Young 已提交
99
### 注意事项
W
wangjiawei04 已提交
100

H
HexToString 已提交
101
1.在示例中,端口号都是9393,ip默认设置为了127.0.0.1表示本机,注意ip和port需要与Server端对应。
W
wangjiawei04 已提交
102

S
ShiningZhang 已提交
103
2.目前Serving已推出Pipeline模式(原理详见[Pipeline Serving](../doc/Python_Pipeline/Pipeline_Design_CN.md)),面向Java的Pipeline Serving Client已发布。
W
wangjiawei04 已提交
104

T
123  
Thomas Young 已提交
105
3.注意PipelineClientExample.java中的ip和port(位于java/examples/src/main/java/[PipelineClientExample.java](./examples/src/main/java/PipelineClientExample.java)),需要与对应Pipeline server的config.yaml文件中配置的ip和port相对应。(以IMDB model ensemble模型为例,位于python/examples/pipeline/imdb_model_ensemble/[config.yaml](../python/examples/pipeline/imdb_model_ensemble/config.yml)
W
wangjiawei04 已提交
106

T
fix doc  
Thomas Young 已提交
107 108
### 开发部署指导

T
ff  
Thomas Young 已提交
109
由于Java的docker镜像中不含有Serving需要的编译开发环境,Serving的常规docker镜像中也不包含Java所需要的编译开发环境,对GPU Serving端和Java Client端的二次编译开发需要在各自的docker镜像下完成,下面以GPU模式为例,讲解开发部署的两种形式。
T
fix doc  
Thomas Young 已提交
110

T
ff  
Thomas Young 已提交
111
第一种是GPU Serving和Java Client在运行在同一个GPU镜像中,需要用户在启动GPU镜像后,把在java镜像中编译完成后的文件(位于/Serving/java目录下)拷贝到GPU镜像中的/Serving/java目录下。
T
fix doc  
Thomas Young 已提交
112

T
ff  
Thomas Young 已提交
113
第二种是GPU Serving和Java Client分别在各自的docker镜像中(或具备编译开发环境的不同主机上)部署,此时仅需注意Java Client端与GPU Serving端的ip和port需要对应,详见上述注意事项中的第3项。