NVIDIA DockerでコンテナからCUDAを使えるようにする
2 min read

NVIDIA DockerでコンテナからCUDAを使えるようにする

NVIDIA DockerでコンテナからCUDAを使えるようにする

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ドライバをインストール

https://blog.mockun.com/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からもスクリプトからも使えるようになります。あとは、好きなだけアプリ開発に集中するだけですね。

さて、がんばりましょう!