この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
ども、大瀧です。
PaintsChainerはディープラーニング技術であるニューラルネットワークのフレームワークChainerを利用した、線画像を着色するWebサービスです。ソース自体は公開されているので、NVIDIA製GPUを搭載した自前のマシンで手軽に試すことができます。
今回は、NVIDIA Tesla K80 GPUが使えるAmazon EC2 P2インスタンスのDockerコンテナ上で実行してみました。
動作確認環境
- AWSリージョン : オレゴン
- EC2インスタンスタイプ : p2.xlarge
- AMI : amzn-ami-hvm-2016.09.1.20170119-x86_64-gp2 (ami-f173cc91)
- Docker バージョン : 1.12.6
- NVIDIA Driver バージョン : 375.26
1. ドライバとDockerのインストール
まずは、EC2からGPUを利用するためのNVIDIA Driverをインストールします。
ドライバのダウンロードページからx86_64向け最新バージョンのインストーラのリンクを確認し、EC2からwget
コマンドでダウンロード、インストーラを実行します。内部でドライバのビルドが走るため、あらかじめgccなどの開発ツールをインストールしておきましょう。
$ sudo yum groupinstall -y "Development Tools"
$ wget http://us.download.nvidia.com/XFree86/Linux-x86_64/375.26/NVIDIA-Linux-x86_64-375.26.run
$ chmod +x NVIDIA-Linux-x86_64-375.26.run
$ sudo ./NVIDIA-Linux-x86_64-375.26.run
(端末のウィザードに従って操作)
$
Dockerもインストールしておきます。
$ sudo yum install -y docker
$ sudo service docker start
DockerからNVIDIA Driverを利用する方法はいくつかあるようですが、今回は手軽に試すことのできるNVIDIA Dockerを利用します。READMEのQuick Startに従い、nvidia-docker
コマンドをインストールします。
$ wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.0/nvidia-docker_1.0.0_amd64.tar.xz
$ sudo tar --strip-components=1 -C /usr/bin -xvf /tmp/nvidia-docker*.tar.xz && rm /tmp/nvidia-docker*.tar.xz
$ sudo -b nohup nvidia-docker-plugin > /tmp/nvidia-docker.log
nvidia/cuda
コンテナに含まれ、GPUの使用状況を表示するnvidia-smi
コマンドで動作確認してみます。
$ sudo nvidia-docker run --rm nvidia/cuda nvidia-smi
Using default tag: latest
latest: Pulling from nvidia/cuda
8aec416115fd: Pull complete
695f074e24e3: Pull complete
946d6c48c2a7: Pull complete
bc7277e579f0: Pull complete
2508cbcde94b: Pull complete
d5b3e99be78e: Pull complete
e1529bc8530d: Pull complete
b897e7b9b2c4: Pull complete
26139eb8a024: Pull complete
1a30613688a9: Pull complete
Digest: sha256:70eaf7c73a95cc3d29e73d73e470d8e44a3d6d6f639968ab86a1584cbb1d9fad
Status: Downloaded newer image for nvidia/cuda:latest
Thu Feb 2 05:30:03 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.26 Driver Version: 375.26 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla K80 Off | 0000:00:1E.0 Off | 0 |
| N/A 28C P8 29W / 149W | 0MiB / 11439MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
$
Tesla K80がきちんと認識されていることがわかりますね。DockerからGPUにアクセスできることを確認できました。
2. PaintsChainerの実行
PaintsChainerのGitHubページで紹介されている、非公式のDockerイメージliamjones/paintschainer-dockerを利用してみます。コンテナの実行はシンプルで、ポートバインドを指定すればOKです。今回は80番ポートにしました。
$ sudo nvidia-docker run -d -p 80:8000 liamjones/paintschainer-docker
Using default tag: latest
latest: Pulling from liamjones/paintschainer-docker
8aec416115fd: Already exists
695f074e24e3: Already exists
946d6c48c2a7: Already exists
bc7277e579f0: Already exists
2508cbcde94b: Already exists
d5b3e99be78e: Already exists
e1529bc8530d: Already exists
b897e7b9b2c4: Already exists
26139eb8a024: Already exists
1a30613688a9: Already exists
a673c64a1d72: Pull complete
6fa5e57a6535: Pull complete
fd671dce7f19: Pull complete
ad65100ed1af: Pull complete
0b9380920d3f: Pull complete
1e343c17d15d: Pull complete
821f43587c58: Pull complete
0ff90f8450b7: Pull complete
Digest: sha256:9ad2b5af060eef2242cdc76c452d1afc8429dc0ebdb5f398a3eb3c9fc77f2e10
Status: Downloaded newer image for liamjones/paintschainer-docker:latest
faf60c16121ce4682f4ca3cabdc14487b0cce3f92b3f3571f165a2f03c584479
$
WebブラウザでEC2のグローバルIPにアクセスしてみると。。。
PaintsChainerの画面が表示されました。Set sketchから線画をアップロードし、[Colorize]をクリックすると。。。
めそ子さんが着色されました!
端末側で以下のようにnvidia-smi
コマンドを実行すると、GPUが使用される様子を確認することもできます。
$ sudo nvidia-docker run --rm nvidia/cuda nvidia-smi -l 10
Thu Feb 2 06:02:38 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.26 Driver Version: 375.26 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla K80 Off | 0000:00:1E.0 Off | 0 |
| N/A 37C P0 68W / 149W | 903MiB / 11439MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
+-----------------------------------------------------------------------------+
Thu Feb 2 06:02:48 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.26 Driver Version: 375.26 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla K80 Off | 0000:00:1E.0 Off | 0 |
| N/A 37C P0 96W / 149W | 903MiB / 11439MiB | 73% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
+-----------------------------------------------------------------------------+
:
まとめ
PaintsChainerをGPUを搭載するEC2のP2インスタンスで実行する様子をご紹介しました。ディープラーニングは用途やその凄さが実感しずらい技術だと思いますが、画像解析のようなわかりやすいユースケースが示され、しかもハードウェアを購入することなくクラウドで手軽に試せるのは素晴らしいですね。