環境
・Ubuntu22.04LTS(desktop,non GA kernel,Linux kernel 6.5)
・Nvidia-driver-545
・CUDA12.1
・Ryzen7 5700X
・RTX4070 Ti
経緯
unattended-upgrade -v
をしたところ、以下のパッケージのupgradeが実行された。
linux-modules-extra-6.5.0-21-generic
headers-6.5.0-21-generic:amd64
linux-hwe-6.5-headers-6.5.0-21
linux-modules-6.5.0-21-generic
linux-image-6.5.0-21-generic
アップグレード後、nvidia-smiでGPUを認識せず、Nvidia-driverが異常だと思われた。
NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
(画面自体は写っているのでハードとしては動いている)
ドライバを再インストールしたら直ったとの記事があったので
https://qiita.com/mikoaisa/items/1c780819d1ef26c66aa8
apt reinstall nvidia-driver-545
しても認識しない。
nvidia-driverを認識しなくなる原因
最初CUDA12.1はカーネルバージョン5.15系でリリースされているのでそれが悪さしているのかと思った。CUDA12.3は6系でリリースされているため、CUDAのアップグレードも検討したが、pytorchがサポートしているのがCUDA12.1までなので12.3に上げるのは躊躇われた。大抵動くがこういうのでハマると長い。
https://docs.nvidia.com/cuda/archive/12.1.0/cuda-installation-guide-linux/index.html
調べていくと結局CUDAは直接の関係はなく、カーネルアップデート後、dkmsを再度行う必要があるようだが、これが失敗していることが原因だった
https://forums.developer.nvidia.com/t/whats-the-process-for-fixing-nvidia-drivers-after-kernel-updates-in-ubuntu-20-04/208870
症状
dkmsに手動でインストールするために以下のコマンドを実行するが失敗してdkmsが登録できない
sudo dkms install -m nvidia -v <driver_version>
dkmsが失敗する原因
/var/lib/dkms/nvidia/545.23.08/build/make.log
を見たところ、
cc: error: unrecognized command-line option ‘-ftrivial-auto-var-init=zero’
gccがコンパイル時に指定された引数を正しく処理できていないよう。
これは標準のgccのバージョンが古い(ver.11)ためにおこるようだ。
https://forums.linuxmint.com/viewtopic.php?t=389943
対策
gccのバージョンを12に変更する。
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 12
そして再度
sudo dkms install -m nvidia -v <driver_version>
を実行。これでGPUを認識するようになった。
※は/usr/src配下のフォルダを確認して正確なバージョンを確認すること
参考