RUN_IN_DOCKER.md 6.1 KB
Newer Older
1 2
# How to run PaddleServing in Docker

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

5 6
One of the biggest benefits of Docker is portability, which can be deployed on multiple operating systems and mainstream cloud computing platforms. The Paddle Serving Docker image can be deployed on Linux, Mac and Windows platforms.

7 8 9 10
## Requirements

Docker (GPU version requires nvidia-docker to be installed on the GPU machine)

B
barrierye 已提交
11 12
This document takes Python2 as an example to show how to run Paddle Serving in docker. You can also use Python3 to run related commands by replacing `python` with `python3`.

13 14 15 16
## CPU

### Get docker image

B
barrierye 已提交
17
Refer to [this document](DOCKER_IMAGES.md) for a docker image:
18

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

B
barrierye 已提交
23

24 25 26
### Create container

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

The `-p` option is to map the `9292` port of the container to the `9292` port of the host.

### Install PaddleServing

35
In order to make the image smaller, the PaddleServing package is not installed in the image. You can run the following command to install it:
36 37 38 39 40

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

41 42 43 44 45 46
You may need to use a domestic mirror source (in China, you can use the Tsinghua mirror source of the following example) to speed up the download:

```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
### Test example

Get the trained Boston house price prediction model by the following command:

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

- Test HTTP service

  Running on the Server side (inside the container):

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

  Running on the Client side (inside or outside the container):

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

- Test RPC service

  Running on the Server side (inside the container):

  ```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 98 99
  ```

  Running following Python code on the Client side (inside or outside the container, The `paddle-serving-client` package needs to be installed):

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

  

## GPU

The GPU version is basically the same as the CPU version, with only some differences in interface naming (GPU version requires nvidia-docker to be installed on the GPU machine).

### Get docker image

B
barrierye 已提交
100
Refer to [this document](DOCKER_IMAGES.md) for a docker image, the following is an example of an `cuda9.0-cudnn7` image:
101

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

### Create container

```bash
B
barrierye 已提交
109
nvidia-docker run -p 9292:9292 --name test -dit hub.baidubce.com/paddlepaddle/serving:latest-cuda9.0-cudnn7
110 111 112 113 114 115 116 117 118 119 120 121 122
nvidia-docker exec -it test bash
```

The `-p` option is to map the `9292` port of the container to the `9292` port of the host.

### Install PaddleServing

In order to make the image smaller, the PaddleServing package is not installed in the image. You can run the following command to install it:

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

123 124 125
You may need to use a domestic mirror source (in China, you can use the Tsinghua mirror source of the following example) to speed up the download:

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

129 130
### Test example

B
barrierye 已提交
131 132 133 134 135
When running the GPU Server, you need to set the GPUs used by the prediction service through the `--gpu_ids` option, and the CPU is used by default. An error will be reported when the value of `--gpu_ids` exceeds the environment variable `CUDA_VISIBLE_DEVICES`. The following example specifies to use a GPU with index 0:
```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 已提交
136 137


138 139 140 141 142 143 144 145 146 147 148 149
Get the trained Boston house price prediction model by the following command:

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

- Test HTTP service

  Running on the Server side (inside the container):

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

  Running on the Client side (inside or outside the container):

  ```bash
B
barrierye 已提交
156
  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
157 158 159 160 161 162 163
  ```

- Test RPC service

  Running on the Server side (inside the container):

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

  Running following Python code on the Client side (inside or outside the container, The `paddle-serving-client` package needs to be installed):

  ```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 已提交
181 182 183 184 185



## Attention

B
barrierye 已提交
186
Runtime images cannot be used for compilation. If you want to compile from source, refer to [COMPILE](COMPILE.md).