【注意】ubuntu-drivers devicesでお薦めされたNVIDIA GPUドライバーをインストールしたら事故になります。

この記事は[FUJITSU Advent Calendar 2022](https://qiita.com/advent-calendar/2022/fujitsu) 9日目の記事です。

NVIDIAのGPUをUbuntuマシンで利用するためにドライバーインストールを実施したところ、思わぬ落とし穴に陥ってしまいました。GPUドライバーインストール後に最初に実行するコマンド`nvidia-smi`の結果は以下の通り。。。

```bash
$ nvidia-smi 
No devices were found
```

デバイスが見つかりませんって。。。そんなご無体なと思いつつ、NVIDIAのGPUドライバーのインストールでトラブったことは幾度となくあるため、色々と原因を探ったのですが、解決せず。。。当然この状態ではGPUは動作しません。因みに`lspci`では接続しているGPU(NVIDIA GeForce RTX 3060)が表示されるため、接続不良といったことは無さそうです。トラブルシューティングのために試した内容は以下です。

* BIOSが古いバージョンだったのでアップデート
* GPUドライバーの再インストール
* OS(Ubuntu 22.4)の再インストール

これらを試すも全く解決せず。。。原因はタイトルから察しが付きそうなものですが、実は`ubuntu-drivers devices`コマンドを用いてインストールするドライバーを探していたのですが、それが原因でした。このことを踏まえて2022/12現在最新のGPUドライバーのセットアップ方法を記載します。

# 2023/11/5 追記
以下の投稿記事に記載しましたが、2023/11現在open版のドライバーをトラブル無くインストールすることは可能です。最新の機能が試験的に実装されることも有る??open版のドライバーを試したいという方は以下の記事を参考にしてみて下さい。

https://qiita.com/y-vectorfield/items/d6ec26cdb7a425218329

# NVIDIA GPUドライバーのインストール方法
以下の手順でインストールを進めます。

## Nouveauドライバーの停止
OSSとして開発されているNVIDIA GPU向けドライバーNouveauドライバーを停止します。まずは`nouveau`ドライバーが動作しているか以下のコマンドで確認します。動作している場合は`nouveau`の項目が出力されます。

```bash
lsmod | grep nouveau
```

```bash:実行結果
$ lsmod | grep nouveau
nouveau              2306048  0
mxm_wmi                16384  1 nouveau
drm_ttm_helper         16384  1 nouveau
ttm                    86016  3 drm_ttm_helper,i915,nouveau
drm_kms_helper        311296  2 i915,nouveau
i2c_algo_bit           16384  2 i915,nouveau
drm                   622592  9 drm_kms_helper,drm_ttm_helper,i915,ttm,nouveau
wmi                    32768  4 intel_wmi_thunderbolt,wmi_bmof,mxm_wmi,nouveau
video                  61440  2 i915,nouveau
```

無効にするために、以下のコマンドを実行します。

```bash
sudo sh -c "echo 'blacklist nouveau' > /etc/modprobe.d/blacklist-nouveau.conf"
sudo sh -c "echo 'options nouveau modeset=0' >> /etc/modprobe.d/blacklist-nouveau.conf"
sudo update-initramfs -u
sudo reboot
```

再起動後、再度`lsmod | grep nouveau`を実行し、何も出力されないことを確認します。

## NVIDIAドライバーのインストール
`apt`コマンドを利用してドライバーのインストールを実施します。まずはリポジトリを追加します。

```bash
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
```

### インストールするバージョンの検索
以下のコマンドを実行し、ドライバーを検索します。

```bash
ubuntu-drivers devices
```

```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-515 - distro non-free
driver   : nvidia-driver-525 - distro non-free
driver   : nvidia-driver-510 - distro non-free
driver   : nvidia-driver-515-server - distro non-free
driver   : nvidia-driver-470 - distro non-free
driver   : nvidia-driver-470-server - distro non-free
driver   : nvidia-driver-525-open - distro non-free recommended
driver   : nvidia-driver-515-open - distro non-free
driver   : xserver-xorg-video-nouveau - distro free builtin
```

従来であれば、このまま`recommended`が付いているバージョンのドライバー(上の結果ではnvidia-driver-525-open)をaptを用いてインストールしていました。ところがその結果が`No devices were found`なのです。色々と調べてみると以下のサイトを発見しました。NVIDIA公式の開発者向けサイトです。で、このページでは正にこのトラブルについて議論されており、`Wrong driver, please either switch to the non “-open” driver version in Software&Updates or set the appropriate module option.`と記載が有ります。<font color=RED>つまり、-openと付いているドライバーでは無いドライバーをインストールせよということです。</font>

https://forums.developer.nvidia.com/t/nvidia-smi-outputs-no-devices-were-found-on-ubuntu-22-04-driver-520/234829

よって、上記を踏まえて、以下の様にインストールコマンドを実行します。(バージョン番号はお勧めされたバージョンと同じ物(最新版)を選択しています。)

```bash
sudo apt install -y nvidia-driver-525
sudo reboot
```

再起動後に`nvidia-smi`を実行してみました。緊張の瞬間です。。。

```bash
$ nvidia-smi 
Sat Dec 10 00:25:13 2022       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.60.11    Driver Version: 525.60.11    CUDA Version: 12.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  NVIDIA GeForce ...  Off  | 00000000:07:00.0 Off |                  N/A |
| 40%   19C    P8     7W / 170W |      1MiB / 12288MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
```

無事認識されました。このまま認識されなかったら、折角のボーナスで新しく購入したビデオカードが無駄になってしまうところでした。これで安心して年が越せそうです。

## まとめ
今まで`recommended`が付いたバージョンのGPUドライバーをインストールしていたので、条件反射のようにインストール作業を進めていましたが、今回のトラブルを受けて<font color=RED>お薦め</font>にはご用心という教訓を得ました。