LoginSignup
49
48

More than 5 years have passed since last update.

Chainer開発用のDocker環境を整備する

Last updated at Posted at 2015-11-10

この情報は古いです。現状では、手で環境整備せずにnvidia-dockerを利用したほうが簡単・安全・確実です

ローカル環境に複数バージョンのCUDAを入れるのができるのかできないのかよくわからないが、少なくともあまりやりたくない。そこで、Dockerを利用して、希望のバージョンのCUDAがはいった環境を作ることで、様々なCUDA環境での開発をやりやすくする。

また、Jenkins上ではここに書かれた手順を利用することで、複数バージョンのCUDAやcudnnのテストを行っている。

Dockerをインストールする

手順に従って、dockerをインストールする。公式のインストール手順は度々変わるので注意する。

ホスト側にcuda7.5をインストールする

chainer-testは、ホスト側にcuda7.5が入っていることを仮定している(cuda7.5同梱のドライバを利用している)。古いと動かない。
aptで完結するので、CUDAはdebファイルから入れる方がお薦め。

それから、Dockerのインストールなどでカーネルバージョンが上がると、ドライバが認識されなくなったりするので、Dockerのバージョンをあげたときはdriverも入れ直す(?)必要があったりする。この辺はちゃんと理解していない。

nvidia-uvmを作る

Docker越しにCUDAを実行するには、/dev/nvidia-uvm が見えている必要がある。起動時にこのデバイスは見えない。以下のコマンドを実行するとこのデバイスができる。理由はよくわからない。

$ /usr/local/cuda/samples/1_Utilities/deviceQuery/deviceQuery

nvidia-docker内では、以下のコマンドを実行している。こちらでも/dev/nvidia-uvmができる。仕組みはよくわからない。

$ nvidia-modprobe -u -c=0

Jenkins環境内では、毎ビルドごとにこのコマンドを実行してからdocker runしている。

Chainer用のDockerfileを作る

chainer-testプロジェクトには、環境に合わせたDockerfileを生成するスクリプトがある。これを利用して、テストしたい環境用のDockerfileを作成する。

$ git clone https://github.com/pfnet/chainer-test.git
$ ./make_docker.py --base=ubuntu14_py2 --numpy=numpy19 --cuda=cuda65 --cudnn=none

以前は、あらゆる組合せのDockerfileを作っておいたが、流石に組合せが100通りくらいになってきたので、生成することにした。これで指定した環境用のDockerfileができる。
このDockerイメージを作成するためには、カレントディレクトリにインストール対象のCUDAのbinファイルとcudnnが必要。上記の設定ならcuda_6.5.19_linux_64.runchainer-testディレクトリにコピーしてくる。持っていない場合は、CUDAのサイトに行ってダウンロードする。
Dockerfile中でダウンロードしたほうがいいのだが、ネットワーク帯域が極めて下がることがあり、テストが何時になっても実行できないことがあったのでこうした。

あとは、普通にDockerを起動すれば良い。--device引き数で、GPUを見えるようにしているのが重要。

$ docker build -t chainer
$ docker run --device /dev/nvidia0:/dev/nvidia0 --device /dev/nvidiactl:/dev/nvidiactl --device /dev/nvidia-uvm:/dev/nvidia-uvm -it chainer /bin/bash

これでDocker環境下のbashに入れる。あとはふつうにソースをとってきて開発するだけ。

49
48
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
49
48