こんにちは。
今日は研究でGPUを使うことになったので、Dockerでやるかと思い、この記事を作業メモとして残す意味を込めて書こうと思います。
○なぜDockerでGPUを動かすのか
- ガチでやると設定が面倒な記憶しかない。
- ミスって時間を潰している人生の余裕がない。
○環境
DISTRIB_ID=Ubuntu DISTRIB_RELEASE=16.04 DISTRIB_DESCRIPTION="Ubuntu 16.04.2 LTS"
Docker CEのインストール
○Prerequisites
Ubuntuの要件はかわっているかもしれませんが、Ubuntuの16を使っている人は、以下の要件を満たす必要があります。
- Ubuntu 16.04(LTS)
- 64bit
64bitじゃないと行けないンゴです。
○Dockerのインストール
■Update the apt package index
sudo apt-get update
■Install packages to allow apt to use a repository over HTTPS:
sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common
■Add Docker’s official GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
key fingerprintが「9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88」であることを確認します。
sudo apt-key fingerprint 0EBFCD88
■install stable docker ce
今回は、「x86_64」の環境なので、以下のコマンドを使用して、まずはstableなレポジトリをセットアップします。他の環境を使用する場合は公式ドキュメントを参照すること。
sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
正直にいうと上のコマンドでは私はなんかうまくいかなかったので、「$(lsb_release -cs)」を普通にターミナル上から動かして、その出力結果を代わりに入れました。そしたら動きました。
その後、Docker CEをインストールします。
sudo apt-get update sudo apt-get install docker-ce
○Dockerがインストールされたかどうかの確認
sudo docker run hello-world
NVIDIAのDriverインストール
○手動でドライバをインストール
以下のページから手動でダウンロードして、インストールしていく。
これは、もしかしたらいらないかもしれないが、私はこれをインストールしてやったので、一応書いておきます。
# lightdmを止める sudo systemctl stop lightdm
これで、ディスプレイが消えるので、仮想コンソールから実行するために「Ctrl + Alt + F1」を入力する。
入力したあとに、もしnvidia-dockerを先にインストールしていた人は、こちらも実行します。ちなみに、私はこれで若干はまりました(笑)
sudo systemctl stop nvidia-docker
ダウンロードしたnvidiaのドライバを実行する。
cd /path/to/download/directory chmod +x NVIDIA-Linux-x86_64-384.69.run sudo ./NVIDIA-Linux-x86_64-384.69.run
実行したら、画面に出てくる質問に適当に答えてインストールをしていきます。インストール後、再起動します。
sudo reboot
○ "Proprietary GPU Drivers" PPAに存在するドライバをapt-getでインストール
# リポジトリを追加、アップデート sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt-get update # インストール可能なドライバ一覧を取得 sudo apt-cache search nvidia-\d+ # ドライバをインストール。今回は手動でインストールしたドライバと同じものをいれた。 sudo apt-get install nvidia-384 # reboot sudo reboot
NVIDIA Docker
○Install
以下のコマンドを実行するのみ。
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 /tmp/nvidia-docker*.deb
ちゃんとNVIDIA Dockerがenableになっているかの確認は以下の通り。
systemctl is-enabled nvidia-docker
○動作確認
以下のコマンドから、動作確認を行います。
nvidia-docker run --rm nvidia/cuda nvidia-smi
○nvidia-modprobeがインストールされてないっぽい。
本来であれば動作確認コマンドを実行して、「はい、これでおわり」となるのですが、私の場合は、以下のようなエラーがでました。
Error: Could not load UVM kernel module. Is nvidia-modprobe installed?
なので、以下のコマンドでインストールします。
sudo apt-get install nvidia-modprobe
その後、テスト実行をしてみます。
nvidia-docker run --rm nvidia/cuda nvidia-smi
これでうまく行けば実行できているはずです。
これで環境が整いました。まぁ、結構はまりましたね、、、。