NVIDIA Dockerのインストール

提供: Eospedia
移動: 案内検索
  • https://github.com/NVIDIA/nvidia-docker
    • ホストマシンのNvidia GPUデバイスとGPUドライバをDockerコンテナ内から使える様にする。
    • Dockerコンテナの"ランタイム"の一種のようだが、ランタイムとは何なのかがよくわからない。Dockerの拡張機能的なものだと(勝手に)思って使っている。
    • GPUドライバはホストマシンのものに限定されるが、CUDAやcuDNNなどのライブラリはコンテナ内で好き勝手使えるため、CUDAバージョンごとでコンテナを分けて開発、作業したりできる。


  • インストール方法
    • Dockerをインストールした後で行う。
    • 方法は https://github.com/NVIDIA/nvidia-docker のQuickstartに全部書いてある。
    • 一応打ったコマンドを以下に載せる。(2019/5/14)


  • GPG鍵の登録
$ 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

/etc/apt/sources.list.d/nvidia-docker.listの中身はこんな感じ

deb https://nvidia.github.io/libnvidia-container/ubuntu16.04/$(ARCH) /
deb https://nvidia.github.io/nvidia-container-runtime/ubuntu16.04/$(ARCH) /
deb https://nvidia.github.io/nvidia-docker/ubuntu16.04/$(ARCH) /


  • パッケージインデックスの取得
$ sudo apt update

上記登録したリポジトリからインデックスを取得できています。

ヒット:1 http://jp.archive.ubuntu.com/ubuntu xenial InRelease
取得:2 http://jp.archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB]                                     
取得:3 http://jp.archive.ubuntu.com/ubuntu xenial-backports InRelease [107 kB]                                   
取得:4 https://nvidia.github.io/libnvidia-container/ubuntu16.04/amd64  InRelease [1,139 B]                       
取得:5 https://nvidia.github.io/nvidia-container-runtime/ubuntu16.04/amd64  InRelease [1,136 B]                  
取得:6 https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64  InRelease [1,129 B]                             
ヒット:7 https://download.docker.com/linux/ubuntu xenial InRelease                                               
取得:8 https://nvidia.github.io/libnvidia-container/ubuntu16.04/amd64  Packages [6,712 B]
取得:9 https://nvidia.github.io/nvidia-container-runtime/ubuntu16.04/amd64  Packages [7,588 B]
ヒット:10 http://ppa.launchpad.net/graphics-drivers/ppa/ubuntu xenial InRelease                
取得:11 https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64  Packages [7,684 B] 
取得:12 http://security.ubuntu.com/ubuntu xenial-security InRelease [109 kB]
取得:13 http://security.ubuntu.com/ubuntu xenial-security/main amd64 DEP-11 Metadata [68.0 kB]
取得:14 http://security.ubuntu.com/ubuntu xenial-security/main DEP-11 64x64 Icons [67.0 kB]
取得:15 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 DEP-11 Metadata [116 kB]
取得:16 http://security.ubuntu.com/ubuntu xenial-security/universe DEP-11 64x64 Icons [173 kB]
取得:17 http://security.ubuntu.com/ubuntu xenial-security/multiverse amd64 DEP-11 Metadata [2,464 B]


  • NVIDIA Dockerのインストール
$ sudo apt install -y nvidia-docker2


  • 一旦Dockerデーモンを停止。次回起動する時に新しい設定を読み込ませるための処置みたい。
$ sudo pkill -SIGHUP dockerd


  • 動作テスト -NVIDIA Dockerを使ってDockerコンテナを起動し、その中でnvidia-smiコマンドを起動し、出力をホストマシンのコンソールへ戻す-
$ docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi

出力

Unable to find image 'nvidia/cuda:9.0-base' locally
9.0-base: Pulling from nvidia/cuda
34667c7e4631: Pull complete 
d18d76a881a4: Pull complete 
119c7358fbfc: Pull complete 
2aaf13f3eff0: Pull complete 
4d96b2dafaa5: Pull complete 
f8c41b380cab: Pull complete 
d2c1b4858446: Pull complete 
Digest: sha256:0afacc402b0eb2333d1075d051e237710483b29cdd51c4e7de5d60be4cb1468f
Status: Downloaded newer image for nvidia/cuda:9.0-base
docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "process_linux.go:424: container init caused \"process_linux.go:407: running prestart hook 1 caused \\\"error running hook: exit status 1, stdout: , stderr: exec command: [/usr/bin/nvidia-container-cli --load-kmods configure --ldconfig=@/sbin/ldconfig.real --device=all --compute --utility --require=cuda>=9.0 --pid=12852  /var/lib/docker/aufs/mnt/7ebf9cc5554558f39056930a1eeb8e5a5751db71c5db608960e4bf4a9ee10921]\\\\nnvidia-container-cli: initialization error: cuda error: no cuda-capable device is detected\\\\n\\\"\"": unknown.

えー...


$ ls -l /dev/nvidia*
crw-rw---- 1 root vglusers 195, 254  5月 12 21:24 /dev/nvidia-modeset
crw-rw-rw- 1 root root     241,   0  5月 14 14:03 /dev/nvidia-uvm
crw-rw-rw- 1 root root     241,   1  5月 14 14:03 /dev/nvidia-uvm-tools
crw-rw---- 1 root vglusers 195,   0  5月 12 21:24 /dev/nvidia0
crw-rw---- 1 root vglusers 195,   1  5月 12 21:24 /dev/nvidia1
crw-rw---- 1 root vglusers 195,   2  5月 12 21:24 /dev/nvidia2
crw-rw---- 1 root vglusers 195,   3  5月 12 21:24 /dev/nvidia3
crw-rw---- 1 root vglusers 195, 255  5月 12 21:24 /dev/nvidiactl

GPUデバイスの所有者はrootだが、グループがvglusersになっていることが問題の様。


Nvidia Dockerの設定ファイル /etc/nvidia-container-runtime/config.toml に、以下の行を追加すればいい様。

user = "root:vglusers"


再度実行してみる

$ docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi
Tue May 14 05:19:30 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.74       Driver Version: 418.74       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 1080    Off  | 00000000:05:00.0  On |                  N/A |
| 29%   44C    P8     7W / 180W |     37MiB /  8119MiB |      1%      Default | 
+-------------------------------+----------------------+----------------------+
|   1  GeForce GTX 1080    Off  | 00000000:06:00.0 Off |                  N/A |
| 28%   41C    P8     6W / 180W |      2MiB /  8119MiB |      1%      Default | 
+-------------------------------+----------------------+----------------------+
|   2  GeForce GTX 1080    Off  | 00000000:09:00.0 Off |                  N/A |
| 27%   36C    P8     6W / 180W |      2MiB /  8119MiB |      1%      Default |
+-------------------------------+----------------------+----------------------+
|   3  GeForce GTX 1080    Off  | 00000000:0A:00.0 Off |                  N/A |
| 27%   37C    P8     6W / 180W |      2MiB /  8119MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================| 
+-----------------------------------------------------------------------------+

はい、動きました。