RUN_IN_DOCKER_CN.md 4.8 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# 如何在Docker中运行PaddleServing

## 环境要求

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

## CPU版本

### 获取镜像

可以通过两种方式获取镜像。

1. 直接拉取镜像

   ```bash
B
barrierye 已提交
16
   docker pull hub.baidubce.com/paddlepaddle/serving:0.1.3
17 18 19 20
   ```

2. 基于Dockerfile构建镜像

B
barrierye 已提交
21
   建立新目录,复制[Dockerfile](../tools/Dockerfile)内容到该目录下Dockerfile文件。执行
22 23

   ```bash
B
barrierye 已提交
24
   docker build -t hub.baidubce.com/paddlepaddle/serving:0.1.3 .
25 26 27 28 29
   ```

### 创建容器并进入

```bash
B
barrierye 已提交
30
docker run -p 9292:9292 --name test -dit hub.baidubce.com/paddlepaddle/serving:0.1.3
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
docker exec -it test bash
```

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

### 安装PaddleServing

为了减小镜像的体积,镜像中没有安装Serving包,要执行下面命令进行安装

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

### 测试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
fix doc  
barrierye 已提交
58
  python -m paddle_serving_server.serve --model uci_housing_model --thread 10 --port 9292 --name uci &>std.log 2>err.log &
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 89 90 91 92 93 94 95 96 97 98 99
  ```

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

  ```bash
  curl -H "Content-Type:application/json" -X POST -d '{"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
  ```

- 测试RPC服务

  在Server端(容器内)运行:

  ```bash
  python -m paddle_serving_server.serve --model uci_housing_model --thread 10 --port 9292 &>std.log 2>err.log &
  ```

  在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)。

### 获取镜像

可以通过两种方式获取镜像。

1. 直接拉取镜像

   ```bash
B
barrierye 已提交
100
   nvidia-docker pull hub.baidubce.com/paddlepaddle/serving:0.1.3-gpu
101 102 103 104
   ```

2. 基于Dockerfile构建镜像

B
barrierye 已提交
105
   建立新目录,复制[Dockerfile.gpu](../tools/Dockerfile.gpu)内容到该目录下Dockerfile文件。执行
106 107

   ```bash
B
barrierye 已提交
108
   nvidia-docker build -t hub.baidubce.com/paddlepaddle/serving:0.1.3-gpu .
109 110 111 112 113
   ```

### 创建容器并进入

```bash
B
barrierye 已提交
114
nvidia-docker run -p 9292:9292 --name test -dit hub.baidubce.com/paddlepaddle/serving:0.1.3-gpu
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
nvidia-docker exec -it test bash
```

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

### 安装PaddleServing

为了减小镜像的体积,镜像中没有安装Serving包,要执行下面命令进行安装

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

### 测试example

B
barrierye 已提交
130 131 132 133 134 135
GPU版本在运行Server端代码前需要设置`CUDA_VISIBLE_DEVICES`环境变量来指定预测服务使用的GPU,下面的示例为指定索引为0和1两块GPU:

```bash
 export CUDA_VISIBLE_DEVICES=0,1
```

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
fix doc  
barrierye 已提交
148
  python -m paddle_serving_server_gpu.serve --model uci_housing_model --thread 10 --port 9292 --name uci 
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
  ```

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

  ```bash
  curl -H "Content-Type:application/json" -X POST -d '{"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
  ```

- 测试RPC服务

  在Server端(容器内)运行:

  ```bash
  python -m paddle_serving_server_gpu.serve --model uci_housing_model --thread 10 --port 9292
  ```

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