apt upgradeする度に壊れるNVIDIAドライバを"とりあえず"復旧させる手順 (Ubuntu 22.04 LTS)
Ubuntu 22.04 LTS でapt upgradeする度に壊れるNVIDIAドライバをとりあえず復旧させる手順の備忘録。2024年2月現在。
apt updateの度に壊れてしまうガラスのハートのNVIDIA Driverを復旧させる手順のまとめです(2024.02.12現在) この記事は根本解決を行いません。私はもう疲れてしまいました。 NVIDIAさんがCUDA12.4でcuda-drivers周りを整理するらしいので、その時なんとかしてくれると信じています。 (参考:CUDA 12,3 リリースノートの「1.4. Deprecated or Dropped Features」の記載)
やること
- 既存のNVIDIAの痕跡を全て抹消する。古い痕跡があるとブートしなくなるので入念にころしておく。絶対にころせ。
- 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のインストール
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” を再起動せずに解決する方法