https://www.yasunaga-lab.bio.kyutech.ac.jp/EosJ/index.php?title=NVIDIA_Docker%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB&feed=atom&action=history
NVIDIA Dockerのインストール - 変更履歴
2024-03-29T14:46:47Z
このウィキのこのページに関する変更履歴
MediaWiki 1.23.6
https://www.yasunaga-lab.bio.kyutech.ac.jp/EosJ/index.php?title=NVIDIA_Docker%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB&diff=15892&oldid=prev
Kttn: ページの作成:「* https://github.com/NVIDIA/nvidia-docker ** ホストマシンのNvidia GPUデバイスとGPUドライバをDockerコンテナ内から使える様にする。 ** Docker...」
2019-05-14T05:33:57Z
<p>ページの作成:「* https://github.com/NVIDIA/nvidia-docker ** ホストマシンのNvidia GPUデバイスとGPUドライバをDockerコンテナ内から使える様にする。 ** Docker...」</p>
<p><b>新規ページ</b></p><div>* https://github.com/NVIDIA/nvidia-docker<br />
** ホストマシンのNvidia GPUデバイスとGPUドライバをDockerコンテナ内から使える様にする。<br />
** Dockerコンテナの"ランタイム"の一種のようだが、ランタイムとは何なのかがよくわからない。Dockerの拡張機能的なものだと(勝手に)思って使っている。<br />
** GPUドライバはホストマシンのものに限定されるが、CUDAやcuDNNなどのライブラリはコンテナ内で好き勝手使えるため、CUDAバージョンごとでコンテナを分けて開発、作業したりできる。<br />
<br />
<br />
* インストール方法<br />
** Dockerをインストールした後で行う。<br />
** 方法は https://github.com/NVIDIA/nvidia-docker のQuickstartに全部書いてある。<br />
** 一応打ったコマンドを以下に載せる。(2019/5/14)<br />
<br />
<br />
* GPG鍵の登録<br />
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -<br />
<br />
<br />
* リポジトリを追加<br />
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)<br />
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \<br />
sudo tee /etc/apt/sources.list.d/nvidia-docker.list<br />
<br />
/etc/apt/sources.list.d/nvidia-docker.listの中身はこんな感じ<br />
deb https://nvidia.github.io/libnvidia-container/ubuntu16.04/$(ARCH) /<br />
deb https://nvidia.github.io/nvidia-container-runtime/ubuntu16.04/$(ARCH) /<br />
deb https://nvidia.github.io/nvidia-docker/ubuntu16.04/$(ARCH) /<br />
<br />
<br />
* パッケージインデックスの取得<br />
$ sudo apt update<br />
<br />
上記登録したリポジトリからインデックスを取得できています。<br />
ヒット:1 http://jp.archive.ubuntu.com/ubuntu xenial InRelease<br />
取得:2 http://jp.archive.ubuntu.com/ubuntu xenial-updates InRelease [109 kB] <br />
取得:3 http://jp.archive.ubuntu.com/ubuntu xenial-backports InRelease [107 kB] <br />
取得:4 https://nvidia.github.io/libnvidia-container/ubuntu16.04/amd64 InRelease [1,139 B] <br />
取得:5 https://nvidia.github.io/nvidia-container-runtime/ubuntu16.04/amd64 InRelease [1,136 B] <br />
取得:6 https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64 InRelease [1,129 B] <br />
ヒット:7 https://download.docker.com/linux/ubuntu xenial InRelease <br />
取得:8 https://nvidia.github.io/libnvidia-container/ubuntu16.04/amd64 Packages [6,712 B]<br />
取得:9 https://nvidia.github.io/nvidia-container-runtime/ubuntu16.04/amd64 Packages [7,588 B]<br />
ヒット:10 http://ppa.launchpad.net/graphics-drivers/ppa/ubuntu xenial InRelease <br />
取得:11 https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64 Packages [7,684 B] <br />
取得:12 http://security.ubuntu.com/ubuntu xenial-security InRelease [109 kB]<br />
取得:13 http://security.ubuntu.com/ubuntu xenial-security/main amd64 DEP-11 Metadata [68.0 kB]<br />
取得:14 http://security.ubuntu.com/ubuntu xenial-security/main DEP-11 64x64 Icons [67.0 kB]<br />
取得:15 http://security.ubuntu.com/ubuntu xenial-security/universe amd64 DEP-11 Metadata [116 kB]<br />
取得:16 http://security.ubuntu.com/ubuntu xenial-security/universe DEP-11 64x64 Icons [173 kB]<br />
取得:17 http://security.ubuntu.com/ubuntu xenial-security/multiverse amd64 DEP-11 Metadata [2,464 B]<br />
<br />
<br />
* NVIDIA Dockerのインストール<br />
$ sudo apt install -y nvidia-docker2<br />
<br />
<br />
* 一旦Dockerデーモンを停止。次回起動する時に新しい設定を読み込ませるための処置みたい。<br />
$ sudo pkill -SIGHUP dockerd<br />
<br />
<br />
* 動作テスト -NVIDIA Dockerを使ってDockerコンテナを起動し、その中でnvidia-smiコマンドを起動し、出力をホストマシンのコンソールへ戻す-<br />
$ docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi<br />
<br />
出力<br />
Unable to find image 'nvidia/cuda:9.0-base' locally<br />
9.0-base: Pulling from nvidia/cuda<br />
34667c7e4631: Pull complete <br />
d18d76a881a4: Pull complete <br />
119c7358fbfc: Pull complete <br />
2aaf13f3eff0: Pull complete <br />
4d96b2dafaa5: Pull complete <br />
f8c41b380cab: Pull complete <br />
d2c1b4858446: Pull complete <br />
Digest: sha256:0afacc402b0eb2333d1075d051e237710483b29cdd51c4e7de5d60be4cb1468f<br />
Status: Downloaded newer image for nvidia/cuda:9.0-base<br />
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.<br />
えー...<br />
<br />
<br />
* 対処<br />
** VirtualGLのせいらしい ([https://github.com/NVIDIA/libnvidia-container/issues/37 参考1]、[https://qiita.com/exthnet/items/f56a404002eb02cae5f2 参考2])<br />
$ ls -l /dev/nvidia*<br />
crw-rw---- 1 root vglusers 195, 254 5月 12 21:24 /dev/nvidia-modeset<br />
crw-rw-rw- 1 root root 241, 0 5月 14 14:03 /dev/nvidia-uvm<br />
crw-rw-rw- 1 root root 241, 1 5月 14 14:03 /dev/nvidia-uvm-tools<br />
crw-rw---- 1 root vglusers 195, 0 5月 12 21:24 /dev/nvidia0<br />
crw-rw---- 1 root vglusers 195, 1 5月 12 21:24 /dev/nvidia1<br />
crw-rw---- 1 root vglusers 195, 2 5月 12 21:24 /dev/nvidia2<br />
crw-rw---- 1 root vglusers 195, 3 5月 12 21:24 /dev/nvidia3<br />
crw-rw---- 1 root vglusers 195, 255 5月 12 21:24 /dev/nvidiactl<br />
GPUデバイスの所有者はrootだが、グループがvglusersになっていることが問題の様。<br />
<br />
<br />
Nvidia Dockerの設定ファイル /etc/nvidia-container-runtime/config.toml に、以下の行を追加すればいい様。<br />
user = "root:vglusers"<br />
<br />
<br />
再度実行してみる<br />
$ docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi<br />
Tue May 14 05:19:30 2019 <br />
+-----------------------------------------------------------------------------+<br />
| NVIDIA-SMI 418.74 Driver Version: 418.74 CUDA Version: 10.1 |<br />
|-------------------------------+----------------------+----------------------+<br />
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |<br />
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |<br />
|===============================+======================+======================|<br />
| 0 GeForce GTX 1080 Off | 00000000:05:00.0 On | N/A |<br />
| 29% 44C P8 7W / 180W | 37MiB / 8119MiB | 1% Default | <br />
+-------------------------------+----------------------+----------------------+<br />
| 1 GeForce GTX 1080 Off | 00000000:06:00.0 Off | N/A |<br />
| 28% 41C P8 6W / 180W | 2MiB / 8119MiB | 1% Default | <br />
+-------------------------------+----------------------+----------------------+<br />
| 2 GeForce GTX 1080 Off | 00000000:09:00.0 Off | N/A |<br />
| 27% 36C P8 6W / 180W | 2MiB / 8119MiB | 1% Default |<br />
+-------------------------------+----------------------+----------------------+<br />
| 3 GeForce GTX 1080 Off | 00000000:0A:00.0 Off | N/A |<br />
| 27% 37C P8 6W / 180W | 2MiB / 8119MiB | 0% Default |<br />
+-------------------------------+----------------------+----------------------+<br />
<br />
+-----------------------------------------------------------------------------+<br />
| Processes: GPU Memory |<br />
| GPU PID Type Process name Usage |<br />
|=============================================================================| <br />
+-----------------------------------------------------------------------------+<br />
<br />
はい、動きました。</div>
Kttn