Tea break

ちょっとした息抜きに

Ubuntu18.04にNVIDIA Container Toolkitをインストールする

最初に

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 を使う