apt upgradeする度に壊れるNVIDIAドライバを"とりあえず"復旧させる手順 (Ubuntu 22.04 LTS)

apt upgradeする度に壊れるNVIDIAドライバを"とりあえず"復旧させる手順 (Ubuntu 22.04 LTS)

programming
PC関連

apt updateの度に壊れてしまうガラスのハートのNVIDIA Driverを復旧させる手順のまとめです(2024.02.12現在) この記事は根本解決を行いません。私はもう疲れてしまいました。 NVIDIAさんがCUDA12.4でcuda-drivers周りを整理するらしいので、その時なんとかしてくれると信じています。 (参考:CUDA 12,3 リリースノートの「1.4. Deprecated or Dropped Features」の記載

やること

  1. 既存のNVIDIAの痕跡を全て抹消する。古い痕跡があるとブートしなくなるので入念にころしておく。絶対にころせ。
  2. nvidia-driver, cuda-toolkit, cuda container toolkit を入れる。ドライバ無しのままリブートすると立ち上がらなくなる。絶対に入れる。  

手順

 

ものすごく古いNVIDIAドライバの生き残りがいる場合はこいつを実行

sudo /usr/bin/nvidia-uninstall

現在のNVIDIA Driverを抹消する 生き残りがいたらブートしなくなるぞ

sudo apt remove --purge nvidia-\*
sudo apt remove --purge cuda-\*

※ コマンドを実行しているフォルダ内に” cuda-keyring_*.deb”のようなファイルがあると purge cudaが実行できない。その場合は別のディレクトリで実行するとよい  

aptのキャッシュを消せ なめてると勝手にキャッシュを使って互換性のないバージョンをインストールし始めるぞ

sudo apt autoremove
sudo apt autoclean

 

NVIDIAの残り香がないか確認する 

dpkg -l | grep nvidia-driver
lsmod | grep nvidia

生き残りがいたら消せ  

CUDA Toolkitのインストール

NVIDIA公式 Network Install NVIDIAのCUDA Toolkitのページに書かれている手順に従え 古いバージョンのときに書かれている手順は通用しない 以下は2024.02.12現在のNetwork Installerに書かれている手順を元にした手順です

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86\_64/cuda-keyring\_1.1-1\_all.deb
sudo dpkg -i cuda-keyring\_1.1-1\_all.deb
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-1

リンク先の手順では12-3になっていますが、今回は12-1を入れています。12.x番台は下位互換性があるという話ですがいまいち信用できない。  

NVIDIA Driverのインストール

グラフィックドライバは先ほどのページに記載されているcuda-driversでインストールするのが楽……なのですが、UbuntuのPPAで配布されているバージョンとNVIDIAが提供しているドライバのバージョンが不一致になっていることがあり、両者の配布バージョンに差があるタイミングでドライバをインストールした場合、CUDAが必要とするドライバを無視してUbuntu側のPPAで配布されているバージョンが無理やりねじ込まれることで、apt upgradeする度にドライバが壊れる……らしいです   → じゃあUbuntuのPPAから配布されているドライバを使えばいい と思うじゃないですか → あいつはあいつでCUDAとの食い合わせが悪くて動作しないことがある → なんなんだよこれ と思いつつ以下を実行します

ubuntu-drivers devices
# 出てきた中でcuda-driversに含まれているバージョン(545)よりも高いものを選ぶ
sudo apt install nvidia-driver-550

 

CUDA Container Toolkitのインストール

上述の理由から実際にインストールする際は公式を参照すること GitHub NVIDIA公式

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

 

~/.bashrcにCUDAの環境変数を追記する

バージョンが変わるとパスが変わるので注意 自分用のシェルスクリプトに書いた内容そのままなのでcatを使っていますが、vimなどを使って追記してもいいです

cat > /home/ユーザー名/.bashrc < .bashrcの再読み込み
```bash
source ~/.bashrc

 

インストールされているかどうか、充血するくらい目を見開いて確認する

nvidia-smi
nvcc -V

ドライバが自動更新されないように 二度と壊されないようにする 

sudo apt-mark hold nvidia\*
sudo apt-mark hold libnvidia\*

※ ドライバを更新する必要があるときはunholdで解除する  

祈りながら再起動する

sudo reboot

 

あなたのNVIDIAドライバが、二度と壊されませんように。

   

あなたのNVIDIAドライバが、よりよきものになりますように。

   

あなたのブート画面と心が、黒い色に染まりませんように。

せめてGRUBの輝く光が、あなたの目に届きますように。

    私から、祈りを捧げて、この記事を締めくくります。      

ものすごく参考にさせて頂いた記事(本当に)

生きろ NVIDIA ドライバ nvidia-smiが動かない nvidia-smiでFailed to initialize NVML: Driver/library version mismatchエラーの解決ログ Ubuntu で nvidia-driver の自動アップデートの無効化メモ “Failed to initialize NVML” を再起動せずに解決する方法