Ubuntu14.04で深層学習を行うべく、NVIDIAドライバを入れたり、CUDAを入れたりとしていましたが、事あるごとにトラブルに見舞われていました。
ubuntuにてNVIDIAドライバが認識されない
http://qiita.com/moroku0519/items/234f1c53a3187e32bae5
UbuntuでNICを認識しない場合の対処法
http://qiita.com/moroku0519/items/06ac708f08d9570f2b93
最終的にCUDAがうまくインストールできなくなり、OSを再インストールしたのですが、ついでに16.04アップグレードしました。
その際、以前nvidia-docker使うといいよと教えてもらったことがあるので、試しに導入することにしました。
#Dockerとは
まず、Dockerについて整理します。
Dockerはいわゆるコンテナという軽量な仮想環境です。
仮想環境というと、VertualBoxやVMWareなどがありますが、より軽量なので起動が早いのが特徴です。
仮想環境なのでうまくいかなくなったら気軽に破棄してやり直しが効きます。
(詳しいことは割愛します)
#nvidia-dockerとは
dockerは仮想環境ですが、ゲストOSからホストOSのGPUにアクセスできるようにしてくれるのがnvidia-dockerです。
つまり、仮想環境下でGPUが利用できるので、nvidiaドライバ関係でx serverが起動しなくなってしまった!というトラブルが起きても、またイメージを引っ張ってきてやり直すことができます。(そもそもCUIなので関係ないですが)
#インストール方法
GitHubに書いてあるとおりです。
https://github.com/NVIDIA/nvidia-docker
# Install nvidia-docker and nvidia-docker-plugin
wget -P /tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.0-rc.3/nvidia-docker_1.0.0.rc.3-1_amd64.deb
sudo dpkg -i /tmp/nvidia-docker*.deb && rm /tmp/nvidia-docker*.deb
その後、次のコマンドで動作確認
Using default tag: latest
latest: Pulling from nvidia/cuda
16da43b30d89: Pull complete
1840843dafed: Pull complete
91246eb75b7d: Pull complete
7faa681b41d7: Pull complete
97b84c64d426: Pull complete
c9e83805074f: Pull complete
d6df64031bb5: Pull complete
6708c6ed44a1: Pull complete
e18866fd24c5: Pull complete
13a64a148a09: Pull complete
Digest: sha256:ba934c84905ac5f7f678cbe8dc359996e3897f9618028631b9da2f066da74e31
Status: Downloaded newer image for nvidia/cuda:latest
Mon Jan 16 10:22:12 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 367.57 Driver Version: 367.57 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 750 Ti Off | 0000:01:00.0 On | N/A |
| 30% 25C P8 1W / 38W | 287MiB / 1997MiB | 1% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
+-----------------------------------------------------------------------------+
なお、ホスト側にはNVIDIAドライバとCUDAを予めインストールしておく必要があります。
※訂正(2016/01/19)
入れておくのはドライバとDockerのみで,CUDAはコンテナで管理します.(コンテナごとにCUDAやcuDNNのバージョンを管理できるのが売りなのにホストにCUDAが入っている前提なのはおかしいですね,普通に考えて)
ちなみにNVIDIAドライバだけは仕様なのでホストに入れなければいけません.
以上です。
#参考
https://github.com/NVIDIA/nvidia-docker
http://blog.engineer.adways.net/entry/2016/09/03/012940