Ubuntu 18.04 LTS で再起動後にNVIDIA driverに接続できなくなる問題の解決法

$ nvidia-smi
Wed Nov 18 16:42:39 2020       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.33.01    Driver Version: 440.33.01    CUDA Version: 10.2     |
以下略

と表示されていたが、再起動後

$ nvidia-smi
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.

となり、NVIDIA driverへ接続できなくなった。原因は、新しいLinuxカーネル 5.4.0が勝手に?インストールされてしまい、起動時に最新のLinuxカーネルを使って起動したからのようだ。

今回の場合、Linux Kernel 5.4.0はNVIDIA Driver 440.33.01には対応していない。よって、解決方法としては

  • Linux Kernelを古い 5.3.0 へ戻す
  • 新しいNVIDIA Driverをインストールする

のどちらかである。新しいNVIDIA Driverをインストールできる自信もないし、どのバージョンが適切か即座に分からなかったので、今回はLinux Kernelを古い 5.3.0 へ戻すことにした。

起動時に紫色の画面になった瞬間にEscを押すと、GRUBの画面に行ける。Advanced options を選択すると、インストールされている複数のLinuxカーネルから使うカーネルを選ぶことができる。

f:id:onsanai:20201119091603p:plain:w600

ここで、5.3.0-40-genericを選び起動すると、nvidia-smiは成功した。

しかし、再起動するとLinuxカーネルバージョンは一番最新のものになってしまう。そこで、最後に起動したカーネルに固定するため、GRUBの設定ファイルを書き換えた。

qiita.com

この記事通りやればいいが、実際にやったのは下記の手順。

$ sudo pico /etc/default/grub

GRUBの設定ファイルを開き、GRUB_DEFAULTの値は書き換えて、GRUB_SAVEDEFAULTを新しく追加する。

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT="true"

最後にGRUBを更新すれば完了だ。

$ sudo update-grub

これで、手動でLinuxカーネルを別のものにしない限り、目的の5.3.0で起動されるだろう。

Linuxカーネルがサポートしているデバイスドライバーのバージョンは、刻々と変わる。古いドライバーはずっとは対応されないし、バグがあれば修正される。適切なLinuxカーネルを使うことが重要なようだ。