##結論
UbuntuとNvidia-docker2を使うことで、GPU付きPCにおいて、Keras(Tensorflow)を利用可能なPythonプログラム環境を超簡単に構築できる!
##環境
・Ubuntu 18.04
・GeForce GTX1080
##すること
・NVIDIAドライバのインストール
・docker-ceのインストール
・Nvidia-docker2のインストール
・コンテナ内で、GPUを使って、Kerasでプログラムを動かす。
(ネットの記事によっては、ホスト側にCUDAをインストールしているが、コンテナ内で実行するにあたって必要ないようだ。)
##はじめに
CentOS7にTensorflow-gpuを使える環境を構築したことがあるものの、そのときはドライバーを入れたり、CUDAを入れたりで1日を費やした。ネットの情報を見ると、UbuntuとNvidia-dockerで簡単に環境構築できそうだったので、今回、チャレンジしてみた。その過程をここで共有する。
#NVIDIAドライバのインストール
多くのネット記事にあるのは、手動でNvidiaドライバをダウンロードして、既存のnouveauドライバを無効化して、、、という手順だが、以下のように、aptで一気にインストールすることもできる。
まずは、aptのリポジトリに Geforce GTX1080 で利用できる NVIDIA ドライバがあるか確認する。
https://www.nvidia.co.jp/Download/index.aspx?lang=jp にて、GPU情報等を入力して、必要なドライバのバージョンを調べる。私の環境では以下であった。
Linux x64 (AMD64/EM64T) Display Driver
バージョン: 390.77
リリース日: 2018.7.16
オペレーティングシステム: Linux 64-bit
言語: Japanese
ファイルサイズ: 78.89 MB
次に、NVIDIA ドライバを提供している xorg-edgers レポジトリを追加する。
$ sudo add-apt-repository ppa:xorg-edgers/ppa -y
$ sudo apt-get update
$ sudo apt-get upgrade
apt-get でインストールできるドライバ一覧を検索する。
$ sudo apt-cache search "^nvidia-[0-9]{3}$"
バージョン390があるから、aptでinstallできる!
(手動インストールに比べて、nouveauの無効化とかが必要なく、かなり楽になる)
以下で、nvidia-driverのインストール
$ sudo apt install nvidia-driver-390
$ sudo reboot
CentOS7のときに、何度もリブートして、失敗して、を繰り返したことを思うと、これだけでも、ただただ感動 (T T)
##docker-ceのインストール
ネットの記事によっては、nvidia-dockerをインストールしたら、docker-ceもインストールされる的なことが書いてあった。私も次に書くnvidia-dockerだけをインストールして試したものの、うまくいかなかった。なので、docker-ceのインストールも必要で、先に書いておく。
$ sudo apt-get remove docker docker-engine docker.io
$ sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
OK
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce
##Nvidia-docker2のインストール
続いて、以下でnvidia-docker2をインストールする。
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add -
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
$ sudo apt-get update
$ sudo apt-get install -y nvidia-docker2
以下で、動作確認。
$ sudo pkill -SIGHUP dockerd
$ docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi
##コンテナ内で、GPUを使って、Kerasでプログラムを動かす。
以下で、tensorflow-gpuのイメージをとってきて動かして、コンテナに入る。
$ sudo nvidia-docker run -it tensorflow/tensorflow:latest-gpu-py3 bash
コンテナ内で以下を実行。
$ pip3 install keras
$ apt-get update
$ apt-get install wget
$ wget https://raw.githubusercontent.com/fchollet/keras/master/examples/mnist_cnn.py
$ python3 mnist_cnn.py
これで、MNISTがGPUを使いながら実行される!! なんてお手軽に構築できたことか。。。