RUN_IN_DOCKER_CN.md 5.4 KB
Newer Older
1 2
# 如何在Docker中运行PaddleServing

J
Jiawei Wang 已提交
3
(简体中文|[English](RUN_IN_DOCKER.md))
B
fix doc  
barrierye 已提交
4

T
TeslaZhao 已提交
5 6
Docker最大的好处之一就是可移植性,可在多种操作系统和主流的云计算平台部署。使用Paddle Serving Docker镜像可在Linux、Mac和Windows平台部署。

7 8 9 10
## 环境要求

Docker(GPU版本需要在GPU机器上安装nvidia-docker)

B
barrierye 已提交
11 12
该文档以Python2为例展示如何在Docker中运行Paddle Serving,您也可以通过将`python`更换成`python3`来用Python3运行相关命令。

13 14 15 16
## CPU版本

### 获取镜像

B
barrierye 已提交
17
参考[该文档](DOCKER_IMAGES_CN.md)获取镜像:
18

B
barrierye 已提交
19 20 21
```shell
docker pull hub.baidubce.com/paddlepaddle/serving:latest
```
22

B
barrierye 已提交
23

24 25 26
### 创建容器并进入

```bash
B
barrierye 已提交
27
docker run -p 9292:9292 --name test -dit hub.baidubce.com/paddlepaddle/serving:latest
28 29 30 31 32 33 34
docker exec -it test bash
```

`-p`选项是为了将容器的`9292`端口映射到宿主机的`9292`端口。

### 安装PaddleServing

35
为了减小镜像的体积,镜像中没有安装Serving包,要执行下面命令进行安装。
36 37 38 39 40

```bash
pip install paddle-serving-server
```

41 42 43 44 45 46
您可能需要使用国内镜像源(例如清华源)来加速下载。

```shell
pip install paddle-serving-server -i https://pypi.tuna.tsinghua.edu.cn/simple
```

47 48 49 50 51 52 53 54 55 56 57 58 59 60
### 测试example

通过下面命令获取训练好的Boston房价预估模型:

```bash
wget --no-check-certificate https://paddle-serving.bj.bcebos.com/uci_housing.tar.gz
tar -xzf uci_housing.tar.gz
```

- 测试HTTP服务

  在Server端(容器内)运行:

  ```bash
B
barrierye 已提交
61
  python -m paddle_serving_server.serve --model uci_housing_model --thread 10 --port 9292 --name uci >std.log 2>err.log &
62 63 64 65 66
  ```

  在Client端(容器内或容器外)运行:

  ```bash
B
barrierye 已提交
67
  curl -H "Content-Type:application/json" -X POST -d '{"feed":{"x": [0.0137, -0.1136, 0.2553, -0.0692, 0.0582, -0.0727, -0.1583, -0.0584, 0.6283, 0.4919, 0.1856, 0.0795, -0.0332]}, "fetch":["price"]}' http://127.0.0.1:9292/uci/prediction
68 69 70 71 72 73 74
  ```

- 测试RPC服务

  在Server端(容器内)运行:

  ```bash
B
barrierye 已提交
75
  python -m paddle_serving_server.serve --model uci_housing_model --thread 10 --port 9292 >std.log 2>err.log &
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
  ```

  在Client端(容器内或容器外,需要安装`paddle-serving-client`包)运行下面Python代码:

  ```python
  from paddle_serving_client import Client
  
  client = Client()
  client.load_client_config("uci_housing_client/serving_client_conf.prototxt")
  client.connect(["127.0.0.1:9292"])
  data = [0.0137, -0.1136, 0.2553, -0.0692, 0.0582, -0.0727,
          -0.1583, -0.0584, 0.6283, 0.4919, 0.1856, 0.0795, -0.0332]
  fetch_map = client.predict(feed={"x": data}, fetch=["price"])
  print(fetch_map)
  ```

## GPU版本

GPU版本与CPU版本基本一致,只有部分接口命名的差别(GPU版本需要在GPU机器上安装nvidia-docker)。

### 获取镜像

B
barrierye 已提交
98
参考[该文档](DOCKER_IMAGES_CN.md)获取镜像,这里以 `cuda9.0-cudnn7` 的镜像为例:
99

B
barrierye 已提交
100 101 102
```shell
nvidia-docker pull hub.baidubce.com/paddlepaddle/serving:latest-cuda9.0-cudnn7
```
103 104 105 106

### 创建容器并进入

```bash
B
barrierye 已提交
107
nvidia-docker run -p 9292:9292 --name test -dit hub.baidubce.com/paddlepaddle/serving:latest-cuda9.0-cudnn7
108 109 110 111 112 113 114
nvidia-docker exec -it test bash
```

`-p`选项是为了将容器的`9292`端口映射到宿主机的`9292`端口。

### 安装PaddleServing

115
为了减小镜像的体积,镜像中没有安装Serving包,要执行下面命令进行安装。
116 117 118 119 120

```bash
pip install paddle-serving-server-gpu
```

121 122 123
您可能需要使用国内镜像源(例如清华源)来加速下载。

```shell
B
barrierye 已提交
124
pip install paddle-serving-server-gpu -i https://pypi.tuna.tsinghua.edu.cn/simple
125 126
```

127 128
### 测试example

B
barrierye 已提交
129 130 131 132 133
在运行GPU版Server时需要通过`--gpu_ids`选项设置预测服务使用的GPU,缺省状态默认使用CPU。当设置的`--gpu_ids`超出环境变量`CUDA_VISIBLE_DEVICES`时会报错。下面的示例为指定使用索引为0的GPU:
```shell
export CUDA_VISIBLE_DEVICES=0,1
python -m paddle_serving_server_gpu.serve --model uci_housing_model --port 9292 --gpu_ids 0
```
B
barrierye 已提交
134 135


136 137 138 139 140 141 142 143 144 145 146 147
通过下面命令获取训练好的Boston房价预估模型:

```bash
wget --no-check-certificate https://paddle-serving.bj.bcebos.com/uci_housing.tar.gz
tar -xzf uci_housing.tar.gz
```

- 测试HTTP服务

  在Server端(容器内)运行:

  ```bash
B
barrierye 已提交
148
  python -m paddle_serving_server_gpu.serve --model uci_housing_model --thread 10 --port 9292 --name uci --gpu_ids 0
149 150 151 152 153
  ```

  在Client端(容器内或容器外)运行:

  ```bash
B
barrierye 已提交
154
  curl -H "Content-Type:application/json" -X POST -d '{"feed":{"x": [0.0137, -0.1136, 0.2553, -0.0692, 0.0582, -0.0727, -0.1583, -0.0584, 0.6283, 0.4919, 0.1856, 0.0795, -0.0332]}, "fetch":["price"]}' http://127.0.0.1:9292/uci/prediction
155 156 157 158 159 160 161
  ```

- 测试RPC服务

  在Server端(容器内)运行:

  ```bash
B
barrierye 已提交
162
  python -m paddle_serving_server_gpu.serve --model uci_housing_model --thread 10 --port 9292 --gpu_ids 0
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
  ```

  在Client端(容器内或容器外,需要安装`paddle-serving-client`包)运行下面Python代码:

  ```bash
  from paddle_serving_client import Client
  
  client = Client()
  client.load_client_config("uci_housing_client/serving_client_conf.prototxt")
  client.connect(["127.0.0.1:9292"])
  data = [0.0137, -0.1136, 0.2553, -0.0692, 0.0582, -0.0727,
          -0.1583, -0.0584, 0.6283, 0.4919, 0.1856, 0.0795, -0.0332]
  fetch_map = client.predict(feed={"x": data}, fetch=["price"])
  print(fetch_map)
  ```
B
barrierye 已提交
178 179 180

## 注意事项

B
barrierye 已提交
181
运行时镜像不能用于开发编译。如果想要从源码编译,请查看[如何编译PaddleServing](COMPILE.md)