はじめに
機械学習でGPUを使いたいときにタイトルのエラーで詰まったので、解決までの道のりを書き残します。
OS は Ubuntu 18.04 または 16.04 です。
症状
$ nvidia-smi
```
を行うと、
```text
Failed to initialize NVML: Driver/library version mismatch
```
と言われたときの話です。
```shell:
$ sudo reboot
```
で再起動するのが一番手っ取り早いようなのですが、できれば再起動したくなかったり、それでも直らなかったりした時のための記事です。
# ドライバーのアンロード
エラーを解決するためにLinuxカーネルのnvidia関連のドライバーを一度アンロードします。まずは、
```shell
$ lsmod | grep nvidia
```
で現在使用されているドライバーを確認します。おそらく、
```text
nvidia_uvm 634880 8
nvidia_drm 53248 0
nvidia_modeset 790528 1 nvidia_drm
nvidia 12312576 86 nvidia_modeset,nvidia_uvm
```
のように表示されるはずです。
最終的に`nvidia`をアンロードするために、それぞれを順番にアンロードしていきます。
```shell
$ sudo rmmod nvidia_drm
$ sudo rmmod nvidia_modeset
$ sudo rmmod nvidia_uvm
```
ここで、`nvidia_drm`がアンロードできなかった方はDisplay Manegerをkillする必要があるため次の章を見てください。特に何も言われなかった方は飛ばしてください。
## `nvidia_drm`のアンロード
`nvidia_drm`をアンロードするために、Display Managerを`kill`します。
具体的には以下のコマンドを順番に実行します。途中で選択肢が出てきたら適当に選択してください。
```shell
$ systemctl stop gdm
$ systemctl isolate multi-user.target
$ systemctl stop systemd-logind
$ killall gdm-x-session
```
ここまでできたらもう一度
```shell
$ sudo rmmod nvidia_drm
$ sudo rmmod nvidia_modeset
$ sudo rmmod nvidia_uvm
```
を実行してみましょう。
#`ndivia`のアンロード
最後に`nvidia`をアンロードします。
```
$ sudo rmmod nvidia
```
成功したように思えたら、もう一度ドライバーを確認しましょう。
```shell
$ lsmod | grep nvidia
```
これで何も表示されなければ成功です。最後に`nvidia-smi`でGPUが認識できているか確認してみましょう。
```shell
$ nvidia-smi
```
```text
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.36.06 Driver Version: 450.36.06 CUDA Version: 11.0 |
|-------------------------------+----------------------+----------------------+
| 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 TITAN Xp Off | 00000000:09:00.0 Off | N/A |
| 25% 41C P0 57W / 250W | 0MiB / 12196MiB | 2% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
```
GPUが認識されていることが確認できます。
# おわりに
読んでいただきありがとうございました。ご意見等ございましたらコメントお願いします。