open版NVIDIA GPUドライバーを事故無く導入出来る様になったらしい。。。

# 概要
昨年末に以下の記事で`ubuntu-drivers devices`コマンドで`recommended`表示が付いたNVIDIA製のGPUドライバーをUbuntuにインストールするとGPUが正常に認識されず、`nvidia-smi`コマンドを実行すると「<font color="RED">**No devices were found.**</font>」とメッセージが出力される問題が発生すること、そしてその対処方法について投稿しました。

https://qiita.com/y-vectorfield/items/72bfb66d8ec85847fe2f

しかし、この方法はあくまでその場しのぎの対処方法であり、根本的な問題解決とはなっていませんでした。そこで筆者は根本原因の特定を行うため、Linuxに詳しい友人の協力を得て、根本原因の特定する調査を行いました。結果として、根本原因の特定と、解決方法を解明しましたが、現状open版のGPUドライバーは`recommended`にはなっていません。しかし、open版ドライバーには新機能が実装されていてそれを試したい時にこの方法を用いれば事故にならないということを投稿しようと思ったのですが。。。

```bash
$ ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:1c.4/0000:02:00.0/0000:03:01.0/0000:05:00.0/0000:06:01.0/0000:07:00.0 ==
modalias : pci:v000010DEd00002504sv00001043sd00008810bc03sc00i00
vendor   : NVIDIA Corporation
model    : GA106 [GeForce RTX 3060 Lite Hash Rate]
driver   : nvidia-driver-470 - distro non-free
driver   : nvidia-driver-535 - distro non-free
driver   : nvidia-driver-525-open - distro non-free
driver   : nvidia-driver-545-open - third-party non-free
driver   : nvidia-driver-545 - third-party non-free recommended
driver   : nvidia-driver-525-server - distro non-free
driver   : nvidia-driver-470-server - distro non-free
driver   : nvidia-driver-535-server-open - distro non-free
driver   : nvidia-driver-535-server - distro non-free
driver   : nvidia-driver-525 - distro non-free
driver   : nvidia-driver-535-open - distro non-free
driver   : xserver-xorg-video-nouveau - distro free builtin
```

# open版GPUドライバーのインストール
まずはaptを用いて、open版GPUドライバーをインストールします。`nvidia-driver-545-open`をインストールします。

```bash
sudo apt install -y nvidia-driver-545-open
```

インストール後、再起動します。

```bash
sudo reboot
```

# GPU認識状況の確認
`nvidia-smi`コマンドでGPUが認識出来ているか確認します。本来ならここでエラーが発生します。

```bash
$ nvidia-smi 
Tue Oct 31 23:32:28 2023       
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.23.06              Driver Version: 545.23.06    CUDA Version: 12.3     |
|-----------------------------------------+----------------------+----------------------+
| 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 RTX 3060        Off | 00000000:07:00.0 Off |                  N/A |
| 40%   27C    P8               6W / 170W |      5MiB / 12288MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+
                                                                                         
+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|  No running processes found                                                           |
+---------------------------------------------------------------------------------------+
```

何と。。。open版のドライバーでもエラーが発生しません。

# kernelモジュールの設定が追加されている
以下の参考情報を参照すると従来は`/etc/modprobe.d/`配下に設定ファイル(例えばnvidia-driver.conf)を格納し、以下の内容を追加する必要が有りました。

```conf
options nvidia NVreg_OpenRmEnableUnsupportedGpus=1
```

## 参考情報
https://github.com/NVIDIA/open-gpu-kernel-modules/issues/433

https://download.nvidia.com/XFree86/Linux-x86_64/525.78.01/README/kernel_open.html

しかし、今回エラーが発生せずドライバーが認識されました。因みに筆者は以前以下のコミュニティへの投稿でopen版が推奨される上にエラーが発生して認識されない点について質問していました。この時は塩対応だったのですが、`ubuntu-driver devices`コマンドで推奨されなくなった上に、仮にインストールしたとしてもエラーなく認識される様になりました。

https://answers.launchpad.net/ubuntu/+source/ubuntu-drivers-common/+question/705811

# まとめ
今回GPUドライバーのトラブルシューティングの記事を投稿するつもりが肩透かしとなってしまいました。しかし、そもそもGPUベンダーが公開しているドライバーをOS側から認識させるために、kernelモジュール用の設定をユーザー側で実施しなければならないという仕様はあまりにもユーザーフレンドリーでは無いやり方だったので、そこが改善されたということが分かったのは良かったと思いました。