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镜像当中,获取镜像并进入开发环境的方式是

```
H
heya02 已提交
10 11
docker pull registry.baidubce.com/paddlepaddle/serving:0.5.0-java
docker run --rm -dit --name java_serving registry.baidubce.com/paddlepaddle/serving:0.5.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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
## 请求BRPC-Server

###服务端启动

以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
```

###客户端预测
客户端目前支持多种请求方式,目前支持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>
```
**注意  <configPath>为客户端配置文件,一般是名为serving_client_conf.prototxt的文件。**

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


## 请求Pipeline-Server

###服务端启动
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 83 84 85 86 87 88

对于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 &
```

客户端预测(同步)

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

客户端预测(异步)

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


对于input data type = INDArray类型,以Simple Pipeline WebService中的uci_housing_model模型为例,服务端启动

```
cd ../../python/examples/pipeline/simple_web_service
sh get_data.sh
89
python web_service_java.py &>log.txt &
90 91 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

T
123  
Thomas Young 已提交
103
2.目前Serving已推出Pipeline模式(原理详见[Pipeline Serving](../doc/PIPELINE_SERVING_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项。