背景
Ubuntuアップデートしたらログインできなくなった(nvidia GPU使用)
のような症状にハマって、上記サイトやそのリンク先に書いてあるようなことを色々やるも改善しないのでUbuntuを再インストールした。CUDAとcuDNNのバージョンの呪いから開放されるためにDockerを導入したい。
構成
- OS:Ubuntu 16.04
- GPU:GeForce GTX TITAN X
- ドライバ:nvidia-361
Dockerのインストール
https://docs.docker.com/engine/installation/linux/ubuntulinux/
に従ってインストール:
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
$ sudo sh -c "echo 'deb https://apt.dockerproject.org/repo ubuntu-xenial main' > /etc/apt/sources.list.d/docker.list"
$ sudo apt-get update
$ sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
$ sudo apt-get update
$ sudo apt-get install docker-engine
$ sudo service docker start
$ sudo docker run hello-world
NVIDIA Dockerのインストール
https://github.com/NVIDIA/nvidia-docker#quick-start
に従ってインストール:
# 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
# Test nvidia-smi
$ sudo nvidia-docker run --rm nvidia/cuda nvidia-smi
TensorFlowのDockerイメージを作成
http://blog.engineer.adways.net/archives/49085521.html
こちらを参考に、Dockerファイルを作成。
上記のサイトでは、nvidia/cuda:7.5-cudnn4-devel
をベースにしていたが、GPUを使いたいのでnvidia/cuda:7.5-cudnn4-devel
をベースに変更する。この場合、上記サイトに記載のlibcudnn.so
のシンボリックリンクは最初からあるので不要。
FROM nvidia/cuda:7.5-cudnn4-devel
RUN apt-get update
RUN apt-get install -y --no-install-recommends python-pip python-dev build-essential git
RUN pip install --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.9.0-cp27-none-linux_x86_64.whl
# コンテナ容量節約のため
RUN rm -rf /var/lib/apt/lists/*
ENV LD_LIBRARY_PATH /usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
ENTRYPOINT ["/bin/bash"]
上記をDockerfile
という名前で保存して、保存したフォルダで下記のようにビルドしてイメージを作成する。
$ sudo nvidia-docker build -t cuda:7.5-cudnn4-devel-tf0.9 .
イメージができたら、必要なデータセットとかのパスをマウントしながら起動してサンプルが動けばOK。
$ sudo nvidia-docker run -it -v ~:/share:rw cuda:7.5-cudnn4-devel-tf0.9
しかし、下記を見る限りリポジトリには、Ubuntu 16.04向けはCUDA8.0RC+cuDNN5.1の組み合わせしかないようなので、Ubuntu 14.04向けのコンテナをベースにしてしまっていて、Ubuntu 14.04のパッケージを持ってきているように見える。
https://github.com/NVIDIA/nvidia-docker
まぁNVIDIAの人が大丈夫って言っているからいいか…
https://github.com/NVIDIA/nvidia-docker/issues/81
And yes, having a 16.04 host with 14.04 containers should work just fine.