目次
こんにちは.高山です.
Ubuntuの18.04の標準サポートが終了したので20.04に更新しました.
これ自体はスムーズに進んだのですが,ついでにNVIDIAのGPUドライバを更新したところ,ドライバが認識されなくなってしまって色々とハマりました(^^;).
今後同じようなことが起きたときのためのメモとしてやったことを書き残しておこうと思います.
更新履歴 (大きな変更のみ記載しています)
- 2024/09/17: タグと節構成を更新しました
復旧手順まとめ
試行錯誤の過程は次節以降にグダグダと書いてます.
デバッグ手順と復旧に使用したコマンドを下記にまとめます.
# NVIDIA関連のアンインストール
sudo apt --purge remove nvidia-*
sudo apt --purge remove cuda-*
# Linuxヘッダのインストール
sudo apt install linux-headers-$(uname -r)
# CUDAのインストール
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/7fa2af80.pub
sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /"
sudo apt-get update
sudo apt-get -y install cuda
# Docker経由でCUDAを使っている場合は必要
sudo apt install nvidia-container-toolkit
# noveauの無効化
sudo vi /etc/modprobe.d/blacklist-nouveau.conf
# 下2行はviで開いた画面上で記入しています
blacklist nouveau
options nouveau modeset=0
sudo update-initramfs -u
sudo shutdown -r now
1. 起きた現象
まずどのような現象が起こったかというと,SSHでログインした際に再起動を促されていたので指示通りに行ったところ,下記のようにドライバが認識されなくなりました.
$ 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.
2. 再インストール (だけ) では上手くいかなかった
まず,下記のようにドライバ (とCUDA) の再インストールを試みました.
NVIDIA関連のアンインストール
$ sudo apt --purge remove nvidia-*
$ sudo apt --purge remove cuda-*
CUDAのインストール
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin
$ sudo mv cuda-ubuntu2004.pin /etc/apt/preferences.d/cuda-repository-pin-600
$ sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/7fa2af80.pub
$ sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /"
$ sudo apt-get update
$ sudo apt-get -y install cuda
Docker経由でCUDAを使っている場合は下記の操作も必要
$ sudo apt install nvidia-container-toolkit
再起動して動作を確認したところ,この操作だけでは上手くいきませんでした.
さらっと書きましたが,色々なドライバのバージョンを試してみても症状は変わりませんでした.
また,Xの設定を疑ったりと色々迷走してました(^^;).
3. ドライバのインストール状況を確認
あれこれ試した末,ドライバが上手くインストールされていないんじゃないかと思い至りました.
そこで,下記のコマンドで状態を確認しました.
$ uname -r
5.4.0-162-generic
uname
はLinuxのカーネル (OSのコア部分) 情報を表示するコマンドです.ここではuname -r
でバージョンを表示しています.
$ dkms status
nvidia, 535.104.05: added
dkms
はLinuxのカーネルモジュールを生成するためのツールで,NVIDIAのドライバはこのツールを使って作成されています.dkms status
でモジュールの状態を表示しています.
dkms status
の結果added
と表示されています.これはモジュールのソースコードがあるけどインストールはされていない状態のようです.
これはモジュールのビルドに必要な依存パッケージが入ってないときに起きる挙動らしく,下記のようにしてカーネルのヘッダをインストールしました.
$ sudo apt install linux-headers-$(uname -r)
$ dkms status
nvidia, 535.104.05, 5.4.0-162-generic, x86_64: installed
カーネルのヘッダをインストールするとDKMSのモジュールは自動的にビルドされるようで,installed
と表示されるようになりました.
Ubuntuをアップグレードした際にカーネルヘッダのアップデート等が上手くいってなかったのかもしれません.
4. ドライバのロード状況を確認して修正
ここまででドライバのインストールに問題があることが分かって,修正も上手くできているはずなのですが,
再起動して動作を確認したところ,まだ上手くいきませんでした(^^;).
ドライバのロードが上手くされていないのでは?と考え,まずドライバの再設定を行いました.
$ sudo prime-select nvidia
prime-select
はデフォルトで使用するグラフィックスカードを設定するコマンドです.
$ sudo dpkg-reconfigure nvidia-dkms-535
dkpg-reconfigure
はインストール済みパッケージを再設定するコマンドです.
次に,下記のコマンドでモジュールのロード状況を調べました.
$ lsmod | grep nouveau
nouveau 1949696 3
ttm 106496 1 nouveau
mxm_wmi 16384 1 nouveau
drm_kms_helper 184320 1 nouveau
drm 495616 7 drm_kms_helper,nvidia,ttm,nouveau
i2c_algo_bit 16384 2 igb,nouveau
wmi 32768 4 intel_wmi_thunderbolt,wmi_bmof,mxm_wmi,nouveau
video 57344 1 nouveau
lsmod
はロード済みのカーネルモジュールを表示するコマンドです.
ここでは出力結果をgrep
に渡してnouveau
が存在する行だけ表示するようにしています.
nouveau
はNVIDIAカードを動かすためのオープンソースのドライバで,これがロードされているため純正ドライバがロードできていないようです.
そこで,下記のようにしてnouveau
がロードされないように設定しました.
$ sudo vi /etc/modprobe.d/blacklist-nouveau.conf
vi上で下2行を記述して保存します.
1 2 |
|
blacklist
でモジュールの自動読み込みを停止して,options nouveau modeset=0
でカーネルによるモード設定を無効にしています.
この設定は過去にやった気がするのですが...今回のトラブル修正をしている過程でアレコレいじっている内に元に戻ってしまったようです.
ここまで行ったあとに,下記のコマンドでブート処理を再構成します.
$ sudo update-initramfs -u
$ sudo shutdown -r now
ここまでの作業後,再起動したところ無事認識されました(^^).
$ nvidia-smi
Sat Sep 9 08:06:16 2023
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.104.05 Driver Version: 535.104.05 CUDA Version: 12.2 |
|-----------------------------------------+----------------------+----------------------+
| 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 RTX 2080 Ti On | 00000000:01:00.0 On | N/A |
| 30% 40C P8 3W / 250W | 46MiB / 11264MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
| 1 NVIDIA GeForce RTX 2080 Ti On | 00000000:02:00.0 Off | N/A |
| 28% 35C P8 17W / 250W | 6MiB / 11264MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
+---------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=======================================================================================|
| 0 N/A N/A 1568 G /usr/lib/xorg/Xorg 36MiB |
| 0 N/A N/A 1742 G /usr/bin/gnome-shell 7MiB |
| 1 N/A N/A 1568 G /usr/lib/xorg/Xorg 4MiB |
+---------------------------------------------------------------------------------------+
如何でしたでしょうか?
NVIDIA関連のインストールは色々とハマる場合が多いです.
同じような現象でお困りの方が,少しでも参考になれば幸いです.