追記(2020/11)
内容が古いです、こちらを見ましょう。
NVIDIA Docker って今どうなってるの? (20.09 版)
最初に
nvidia-docker2が非推奨になったそうなので新しく環境構築しました。
手元で上手くいった例を記録として残しているだけで、何が正しいか分かっていない(動けば正義)ので無駄な手順等を行なっている可能性があります、ご了承ください
またコマンドと出力が一緒になっている部分はコマンド前に$
を付けています
環境
試した環境
- Docker, nvidia-driver, CUDA未インストール
- GPUはGTX 1660Tiと1660の二枚刺し
- OSはUbuntu: 18.04 (詳しくは以下の通り)
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"
nvidia-driverとCUDAをインストールする
以下のサイトを参考にインストール
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
sudo add-apt-repository "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /"
sudo apt-get update
# 自動で合うdriverを入れてくれる
# sudo ubuntu-drivers autoinstallだと435, 以下コマンドだと418のインストールを確認
sudo apt-get -y install cuda-drivers
sudo apt-get -y install cuda
.bashrc
にパスを追加
# 以下を追記
export PATH="/usr/local/cuda/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"
sudo reboot
で再起動、以下で確認
$ nvidia-smi
Fri Nov 15 00:06:50 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.87.01 Driver Version: 418.87.01 CUDA Version: 10.1 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 166... On | 00000000:01:00.0 On | N/A |
| 29% 33C P8 5W / 120W | 110MiB / 5911MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 GeForce GTX 1660 On | 00000000:03:00.0 Off | N/A |
| 28% 31C P8 3W / 120W | 1MiB / 5914MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 953 G /usr/lib/xorg/Xorg 39MiB |
| 0 1011 G /usr/bin/gnome-shell 69MiB |
+-----------------------------------------------------------------------------+
$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:07:16_PDT_2019
Cuda compilation tools, release 10.1, V10.1.243
Dockerをインストールする
以下のサイトを参考にインストール
sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD8
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io -y
# 確認
sudo docker run hello-world
バージョンの確認(NVIDIA Container ToolkitはDockerが19.03以降でないとダメ)
$ docker -v
Docker version 19.03.4, build 9013bf583a
NVIDIA Container Toolkitをインストール
以下のサイトを参考にインストール
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
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-container-toolkit
sudo systemctl restart docker
動くか確認
$ nvidia-container-cli info
NVRM version: 418.87.01
CUDA version: 10.1
Device Index: 0
Device Minor: 0
Model: GeForce GTX 1660 Ti
Brand: GeForce
GPU UUID: GPU-4dd3cbbf-cb72-be49-a3d0-4625043ce50e
Bus Location: 00000000:01:00.0
Architecture: 7.5
Device Index: 1
Device Minor: 1
Model: GeForce GTX 1660
Brand: GeForce
GPU UUID: GPU-914b0174-e95d-0b8f-cf13-d20ed58f707e
Bus Location: 00000000:03:00.0
Architecture: 7.5
これでGPUコンテナを実行するとき(run)に--gpus
オプションを付ければ動く
メモ
dockerコマンドの際に一々sudoを打たなくていいようにする
この記事より以下コマンドを入力後、再起動
dockerコマンドをsudoの付与無しに実行できるようにする
sudo gpasswd -a "権限を付与するuser" docker
実際にpytorchを動かしてみる
閑話休題
今回はお手軽にpytorch公式のdockerhubからイメージを持ってくる(動くか確認もしたかった)
# 色々オプションをつけているが、最低限なら-pとか-vはいらない
# -vするなら適当に作業ディレクトリに移動してから行う
docker run -itd --name pytorch -p 8888:8888 -v $PWD/:/workspace --gpus all pytorch/pytorch:1.3-cuda10.1-cudnn7-devel
docker exec -it pytorch /bin/bash
nvidia-smi
もちゃんと動くことを確認
学習部分だけいい感じに切り取ってくれている記事があったので利用させてもらう
Docker(19.03)でgpu有効化してpytorchで訓練するまでやる(Ubuntu18.04)
無事動くことを確認
おまけ
この記事より丁寧でわかりやすい導入記事()
NVIDIA Container Toolkit を使って Docker コンテナで GPU を使う