NVIDIA DockerでコンテナからCUDAを使えるようにする
Posted Jun 04, 2017
1.Ubuntu 16.04 Serverをインストールする
OSとしては、情報の多さからUbuntu16.04を選択しました。
- Ubuntu自体、日本語での情報が多い
- 様々なアプリ、ライブラリのインストール、設定情報も多い
- CUDAを使ったDeepLearningの高速化の情報も多い
クライアントとして使っているThinkPad X240は、Ubuntu 16.04 Desktopです。2017年1月にWindows10を卒業してから、半年ほど利用していますが、不自由はありません。
今回は、ブラウザからJupyter経由、もしくはSSHで利用し、ディスプレイをつなぐことも無いため、Ubuntu 16.04 Serverを選択しました。
(インストールの流れ)
(1) ディスクイメージをダウンロード
Download Ubuntu Server
https://www.ubuntu.com/download/server
(2) インストールメディア(USB)作成
※よく忘れるのでメモ
GNOME Disks その30 - UbuntuのライブUSBメモリーを作成する
https://kledgeb.blogspot.jp/2016/04/gnome-disks-30-ubuntuusb.html
(3) インストールメディア(USB)接続
(4) BIOSから起動ディスクをUSBに設定
BIOS起動順位の変更
http://www.pc-master.jp/sousa/k-jyuni.html
(5) PCの電源をオン
(6) ウィザードに従って設定
Ubuntu 16.04 LTS インストール
https://www.server-world.info/query?os=Ubuntu_16.04&p=install
(7) 再起動
これでOSのインストールは完了です。
2.GTX1050Tiドライバをインストールする
前に書いた記事を参照してください。
Ubuntu 16.04 にGTX1050Tiドライバをインストール
GHOST_URL/2017/05/01/ubuntu-1604-gtx1050ti-driver/
3.Dockerをインストールする
言わずと知れたDockerを入れます。環境をまるごとコンテナとして定義しておけば、別のサーバに乗り換えるのも非常に簡単です。大もとであるホストOSの環境がごちゃごちゃしないのも良いですね。
手順は公式ドキュメント通りでOKです。すでにARM向けも公式から出てました。Raspberry Piでの環境構築が捗りそう。
Get Docker for Ubuntu
https://docs.docker.com/install/linux/ubuntu/
4.NVIDIA Dockerをインストールする
次にMVIDIA DockerというDockerプラグインをインストールして、コンテナでCUDA、cuDNNを使えるようにします。これをインストールすることで、TensorFlowをGPUで動かせるようになります。
コチラも公式ドキュメントに沿ってインストールすればOKです。
NVIDIA/nvidia-docker | README.md
https://github.com/NVIDIA/nvidia-docker#ubuntu-distributions
インストール後、DockerコンテナでGPUを利用する場合には、dockerコマンドの代わりにnvidia-dockerコマンドを利用する事になります。 ドキュメントに従って、以下のコマンドでnvidia-smiの結果が得られればコンテナからcudaが使える様になっています。
nvidia-docker run --rm nvidia/cuda nvidia-smi
5.コンテナをビルドする
コンテナをビルドするときは、nvidiaのcudaイメージからビルドするようにします。Dockerfileにこんな感じでベースのイメージを定義します。
FROM nvidia/cuda:8.0-cudnn5-devel
あとは自分の好きなライブラリを入れていくだけです。
ちなみに私の場合、主に以下の3つのイメージを使い分けています。
- base:コンテナのOSを管理するためのイメージ
(FROM nvidia/cuda:8.0-cudnn5-devel
) - ap_base:Pythonを実行するためのイメージ
(FROM xxx/base
) - jupyter:Jupyterを実行するためのイメージ
(FROM xxx/ap_base
)
Jupyterは常に動かし続けるため、別イメージに切り出していますが、その他のスクリプトはすべてap_baseで動かしています。tensorflow-gpuをインストールしていますので、ap_baseを基にしているJupyterでも使えるはずです。
さいごに
nvidia-docker
で起動すればいつものJupyterからもスクリプトからも使えるようになります。あとは、好きなだけアプリ開発に集中するだけですね。
さて、がんばりましょう!