GPU REST Engine のセットアップと動作確認


Chromeで見ると画像の色合いが変なのでSafariやFirefoxで見てください。

全体の流れ
=============

- [GPU REST Engine]のインストール
- [GPU REST Engine]の動作確認

0. 前提条件
=================

- [g2.2xlargeのインスタンスにログインしていること。リージョンはどこでもOK](http://qiita.com/daikumatan/items/58daff99250d4698d659)
- [K520 用の NVIDIA DriverとCUDAがインストールされていること](http://qiita.com/daikumatan/items/26039fc23edabf76a9c4)
- [nvidia docker がインストールされていること](http://qiita.com/daikumatan/items/c0951a02e70fd2449b8f)



1. Download GRE (GPU REST Engine)
===================================

```bash:Download
git clone https://github.com/NVIDIA/gpu-rest-engine ${HOME}
```

2. 推論サーバの構築/起動
=====================

2.1 推論サーバの構築
-----------------------------

buildに15分程度必要です。

```bash:ダウンロードしたディレクトリーへ移動
cd ${HOME}/gpu-rest-engine
```

```bash:推論サーバの構築
sudo docker build -t inference_server -f Dockerfile.inference_server .
```


2.2 推論サーバの起動
-----------------------------

```bash:推論サーバの起動
sudo nvidia-docker run --name=server --net=host --rm inference_server
```

```bash:result-example
2016/05/06 04:30:51 Initializing Caffe classifiers
2016/05/06 04:30:54 Adding REST endpoint /api/classify
2016/05/06 04:30:54 Starting server listening on :8000
```


3. 動作確認
==============

ここでの動作確認は推論サーバと同じマシンから、画像をアップロードして、その画像に写っている
動物を推測します。

サンプルイメージ images/1.jpg の動物を推論する
------------------------------------------


![Kobito.G6nOer.png](https://qiita-image-store.s3.amazonaws.com/0/73207/311cfb8c-92b5-7cd9-6a4a-3ac915fabb85.png "Kobito.G6nOer.png")


```bash:イメージ画像のPATHを決定
IMAGE="${HOME}/gpu-rest-engine/images/1.jpg"
```

```bash:endpointの指定
ENDPOINT="http://127.0.0.1:8000/api/classify"
```

```bash:変数の確認
cat << ETX

IMAGE_NAME : ${IMAGE} 
END_POINT : ${ENDPOINT}

ETX
```

```bash:推論サーバのAPIをキック
curl -XPOST --data-binary @${IMAGE} ${ENDPOINT} | jq .
```

```json:result
[
  {
    "label": "n02328150 Angora, Angora rabbit",
    "confidence": 0.9998
  },
  {
    "label": "n02325366 wood rabbit, cottontail, cottontail rabbit",
    "confidence": 0.0001
  },
  {
    "label": "n02326432 hare",
    "confidence": 0.0001
  },
  {
    "label": "n02085936 Maltese dog, Maltese terrier, Maltese",
    "confidence": 0
  },
  {
    "label": "n02342885 hamster",
    "confidence": 0
  }
]
```

インターネット上の画像を推論する
----------------------------------

![うさぎ](http://sozaing.com/wp-content/uploads/IMG_29451-540x360.jpg)

```bash:画像のDownload
wget http://sozaing.com/wp-content/uploads/IMG_29451-540x360.jpg -P ${HOME}/gpu-rest-engine/images
```

```bash:イメージ画像のPATHを決定
IMAGE="${HOME}/gpu-rest-engine/images/IMG_29451-540x360.jpg"
```

```bash:変数の確認
cat << ETX

IMAGE_NAME : ${IMAGE} 
END_POINT : ${ENDPOINT}

ETX
```

```bash:推論サーバのAPIをキック
curl -XPOST --data-binary @${IMAGE} ${ENDPOINT} | jq .
```


```json:result
[
  {
    "label": "n02325366 wood rabbit, cottontail, cottontail rabbit",
    "confidence": 0.6424
  },
  {
    "label": "n02326432 hare",
    "confidence": 0.1461
  },
  {
    "label": "n02095889 Sealyham terrier, Sealyham",
    "confidence": 0.0929
  },
  {
    "label": "n02437616 llama",
    "confidence": 0.0161
  },
  {
    "label": "n02328150 Angora, Angora rabbit",
    "confidence": 0.0149
  }
]
```

4. Benchmarking
==========================

4.1 テスト用 docker container の構築
-------------------------------

```bash:ダウンロードしたディレクトリーへ移動
cd ${HOME}/gpu-rest-engine
```

```bash:command
sudo docker build -t inference_client -f Dockerfile.inference_client .
```

4.2 テストの実行
-----------------------------------

```bash:benchmark-test
sudo docker run -e CONCURRENCY=8 -e REQUESTS=20000 --net=host inference_client
```

```bash:result-example
Summary:
  Total:	153.6530 secs
  Slowest:	0.0992 secs
  Fastest:	0.0198 secs
  Average:	0.0614 secs
  Requests/sec:	130.1634
  Total data:	6880000 bytes
  Size/request:	344 bytes

Status code distribution:
  [200]	20000 responses

Response time histogram:
  0.020 [1]		|
  0.028 [0]		|
  0.036 [2]		|
  0.044 [5]		|
  0.052 [2]		|
  0.060 [548]	|∎
  0.067 [19139]	|∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
  0.075 [297]	|
  0.083 [3]		|
  0.091 [2]		|
  0.099 [1]		|

Latency distribution:
  10% in 0.0610 secs
  25% in 0.0612 secs
  50% in 0.0614 secs
  75% in 0.0616 secs
  90% in 0.0619 secs
  95% in 0.0623 secs
  99% in 0.0691 secs
```


[GPU REST Engine]:https://github.com/NVIDIA/gpu-rest-engine


------

__このQiitaの情報は、おいらがプライベートで作っているもので、NVIDIAとは無関係です。個人責任でお試しください。インスタンス等の消し忘れ等ご注意ください。__