研究で使うGPU環境をサクッと使えるDocker Imageを作った

研究を進めるにあたって便利だと感じたのでDocker環境下で実験をすることにした.
その際に作成した,Docker環境を公開します.

3行

  • DeepLearningに必要なGPUの環境を構築済みのDocker Imageを作成した
  • docker pullしてくるだけでGPU環境を作れる(nvidia-dockerさえあれば)
  • 研究の引き継ぎ&公開をうまくやろう!

作ったもの

github.com

メリット

Dockerを利用して研究を進めるメリットは以下の2点
- ゼロからGPU環境を作るのが楽になる
- 研究成果の引き継ぎ&公開が簡単

ゼロからGPU環境を作るのが楽になる

私は初めてGPU環境を構築したときに,かなり苦戦して,数日戦ったことがある.
また,なぜか起動しなくなったことがあり,再インストールする機会が何度かあり,毎度苦戦していた.(そのおかげで今はなんとかなるようにはなったが...)

Dockerを利用することで,いくつかのコマンドを叩くだけで,簡単にGPU環境が構築できるので,もう辛い思いはしなくていい!

研究成果の引き継ぎ&公開が簡単

研究を引き継ぐ際に,PCごと引き継げは簡単なのだが,実際はそうはいかず,スクリプトだけ引き継ぐことが多いと思う.
その際に問題になるのが,環境の問題で実行できないことである.
(例えばMecabopencvGPU環境のセットアップができていないなど)

そこで,Dockerを使うことで,環境の差異による実行できない問題は解決され,引き継ぎが楽になる!
さらに,研究成果を公開する際に,最近はgithub repositoryも一緒に論文に載せることが多いと思うが,Dockerfileを添えてあげるだけで,再現実験の環境が一発で整うので,再現実験のハードルが下がり,citation数の増加にも繋がる!!というお得しかない状況が発生する(かもしれない).

ということで

研究はDocker環境下でやることが個人的におすすめなので,ぜひ今回作成したツールを使って,快適な研究生活を送っていただけると幸いです!!
まだ,作って間もないので,不具合等あればご一報いただけると幸いです.

使い方

Dockerfileを作って,自分の環境用にbuildするとGPU環境が出来上がる.

例:サンプルのDockerfileを用意した

$ wget https://raw.githubusercontent.com/johshisha/docker_for_research/master/sample/Dockerfile # Dockerfileのサンプルを取ってくる
$ touch requirements.txt # 必要なら編集して自分の必要なライブラリを書く
$ docker build -t sample/sample . # 自分用の名前をつけてbuildする
$ nvidia-docker run --rm -it -p 8888:8888 -v "$PWD":/home/docker/work sample/sample jupyter-notebook --ip=0.0.0.0 # docker内のjupyter-notebookを起動
# `http://0.0.0.0:8888/?token=~~~`にアクセス

ちなみにDocker Imageに以下のライブラリはデフォルトでインストールしてあります.

cupy
pandas
jupyter
matplotlib
keras
tensorflow-gpu
chainer
sklearn

使う前の準備

使う際には,以下のインストールが必要です.

インストール方法

(動作の検証はubuntu16.04でしましたが,クリーンインストールはしていないので,多少違いがあるかもしれないです..)

github.com

  • dockerのインストール
    dockerのインストールは簡単です
$ sudo su
root# curl -fsSL https://get.docker.com/ | sh
root# gpasswd -a [username] docker
root# exit
-- logout user
$ docker run hello-world # 動作確認
  • nvidia-dockerのインストール
    これは地味に詰まりました(環境によって少し違うかもしれません)
$ wget -P ./tmp https://github.com/NVIDIA/nvidia-docker/releases/download/v1.0.1/nvidia-docker_1.0.1-1_amd64.deb
$ sudo dpkg -i ./tmp/nvidia-docker*.deb && rm -f ./tmp/nvidia-docker*.deb
$ nvidia-docker run --rm nvidia/cuda:8.0 nvidia-smi # 動作確認

↑基本はこれだけ

でも私の環境ではいろいろとエラーがでました

  • Error1: libcuda.soのファイルが既にある
$ nvidia-docker run --rm nvidia/cuda:8.0 nvidia-smi
docker: Error response from daemon: create nvidia_driver_375.82: VolumeDriver.Create: internal error, check logs for details.
See 'docker run --help’.

$ systemctl status nvidia-docker
…
Error: link /usr/local/cuda-8.0/targets/x86_64-linux/lib/stubs/libcuda.so /var/lib/nvidia-docker/volumes/nvidia_driver/375.82/lib64/libcuda.so: file exists
$ sudo mv /usr/local/cuda-8.0/lib64/stubs/libcuda.so /usr/local/cuda-8.0/lib64/stubs/libcuda.so.backup

$ nvidia-docker run --rm nvidia/cuda:8.0 nvidia-smi
 Tue Oct 17 11:44:46 2017
 +-----------------------------------------------------------------------------+
 | NVIDIA-SMI 375.82                 Driver Version: 375.82                    |
 |-------------------------------+----------------------+———————————+
 …
  • Error2: nvidia-modprobeがインストールされてないんじゃない?
$ nvidia-docker run --rm nvidia/cuda:8.1 nvidia-smi
...
Error: Could not load UVM kernel module. Is nvidia-modprobe installed?
$ sudo apt-get install nvidia-modprobe
$ nvidia-docker run --rm nvidia/cuda:8.0 nvidia-smi
 Tue Oct 17 11:44:46 2017
 +-----------------------------------------------------------------------------+
 | NVIDIA-SMI 375.82                 Driver Version: 375.82                    |
 |-------------------------------+----------------------+———————————+
 …

まとめ

研究はDocker環境下でやるとみんな幸せになれる!(はず)