Docker 内 で GPUが使えない (Failed to initialize NVML: Unknown Error) 場合の対応

# 前提

前提1: こちらの記事のように、通常のDeep Learning環境がホストマシン内に構築されている
https://qiita.com/k_ikasumipowder/items/14a7976f12c0b8c55dd3

前提2: docker, nvidia-container toolkit がインストールされていて、かつては、通常通りGPUが使えていた

前提3: ホストマシン上では、通常のDeep Learningを利用した学習 / 推論が行える

通常のCUDAバージョンや、 nvidia-driver のバージョン周り、パス周り以外で、  `Failed to initialize NVML: Unknown Error` がでて対応に手間取ったので備忘録として投稿。

# 発生していた現象
ホストマシンでは、 `nvidia-smi` が通る。

```
$ nvidia-smi 
Fri Mar  4 23:00:31 2022       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.47.03    Driver Version: 510.47.03    CUDA Version: 11.6     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  On   | 00000000:19:00.0 Off |                  N/A |
| 27%   21C    P8    19W / 250W |      1MiB / 11264MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   1  NVIDIA GeForce ...  On   | 00000000:1A:00.0 Off |                  N/A |
| 27%   22C    P8    19W / 250W |      1MiB / 11264MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   2  NVIDIA GeForce ...  On   | 00000000:67:00.0 Off |                  N/A |
| 27%   23C    P8    19W / 250W |      1MiB / 11264MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
|   3  NVIDIA GeForce ...  On   | 00000000:68:00.0  On |                  N/A |
| 27%   28C    P8    16W / 250W |    133MiB / 11264MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    3   N/A  N/A      1699      G   /usr/lib/xorg/Xorg                 72MiB |
|    3   N/A  N/A      2192      G   /usr/bin/gnome-shell               58MiB |
+-----------------------------------------------------------------------------+

```

コンテナ内では、 `nvidia-smi` が通らない
```
$ sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
Failed to initialize NVML: Unknown Error
```

効果がなかったこと
- ホストマシンの再起動
- docker の再起動
- nvidia-driver-510 (その時点の最新版) に更新
- CUDA 11.5 系をインストール

---
# 結論

こちらにならって、
https://bbs.archlinux.org/viewtopic.php?id=266915

```
/etc/nvidia-container-runtime/config.toml
```
内で

```
no-cgroups = false
```

に書き換えて、 docker を 再起動したら動くようになった。
```
sudo systemctl restart docker
sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
```



# 効果がなかった対応
```
sudo aptitude nvidia-driver-510
```

apt-cache madison [パッケージ名] で あるバージョンを検索
※ cuda関係 は 互換性が厳しいので注意


こちらで指定バージョンを検索
```
apt-cache madison cuda
apt-cache madison libcudnn8
apt-cache madison libcudnn8-dev
```

```
sudo apt-get install -y --no-install-recommends \
    cuda=11.5.2-1 \
    libcudnn8=8.3.2.44-1+cuda11.5  \
    libcudnn8-dev=8.3.2.44-1+cuda11.5
```