🎃

【勉強メモ】UbuntuでNVIDIAドライバのマイナーバージョンを手動インストールする手順

に公開

はじめに

“あれっ?同じバージョンで入れたはずなのに微妙に違うじゃん!?”

こんにちは!
この記事を読んでいるということは、Ubuntu環境のNVIDIAドライバのバージョン違いで困っているのではないでしょうか。

実は私も同じ状況に陥り、「同じコマンドで入れたはずなのに、微妙に違うバージョンが入ってる…!」 という現象に悩まされました。

たとえば、以下のような nvidia-smi の出力があったとします:

+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 570.181                Driver Version: 570.181        CUDA Version: 12.8     |
|-----------------------------------------+------------------------+----------------------+
| 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     Off |   00000000:XX:XX.X  On |                  N/A |
| 36%   45C    P8             12W /  260W |     119MiB /  11264MiB |     14%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
|   1  NVIDIA GeForce RTX 2080 Ti     Off |   00000000:XX:XX.X Off |                  N/A |
| 30%   38C    P8             18W /  260W |       6MiB /  11264MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------------------------------------------------------+

ここで 570 がメジャーバージョン、181 がマイナーバージョンです。

私が最初に使っていたインストールコマンドは以下のものでした:

sudo apt-get install nvidia-driver-570

一見これで「570系ドライバ」が入るように見えますが、実際はマイナーバージョンを指定していないため、
APTリポジトリ上の「その時点での最新版(例:570.195.03)」が自動的にインストールされます。

そのため、同じUbuntu・同じコマンドでも、時期によって微妙に異なるドライバが入ってしまうんです。

そこで今回は、

🎯「NVIDIA公式サイトからマイナーバージョン(例:570.181)を手動で指定してインストールする方法」
を紹介します。


手順

1. 事前準備

ドライバのアップデートのためにはGUI(デスクトップ環境、マウスで操作するような直感的な動作のインターフェース)を停止する必要があります。
しかし、GUIを停止すると日本語入力ができなくなるため、Ubuntuで日本語を使えるようにするか、日本語が使える別のPCからSSH接続して操作するのがおすすめです。

その前に、以下の情報をメモしておきましょう。

  • 対象マシンのIPアドレス(例:100.75.xxx.xxx
  • ドライバをダウンロードするディレクトリのパス(例:~/Downloads/

SSH接続例:

ssh ユーザー名@100.75.xxx.xxx

2. NVIDIA公式サイトからドライバをダウンロード

GUIが動いているうちに、
NVIDIA公式ドライバダウンロードページ にアクセスします。

設定例:

項目
製品タイプ GeForce
製品シリーズ RTX 20 Series
製品 RTX 2080 Ti
OS Linux 64-bit

この状態でドライバを探すと、適用可能なドライバが出てくるので使いたいものをダウンロード

.run ファイル(例:NVIDIA-Linux-x86_64-570.181.run)をダウンロードします。
日本語入力できる環境ではないなら、英語名のフォルダに置くことで .run ファイルを走らせることができます。


3. GUIを停止

TeamViewerやAnyDeskなどリモートデスクトップは、GUI停止中は使えなくなります。
SSH経由で接続してから、以下を実行します。

sudo systemctl stop gdm

黒いテキスト画面(tty)に切り替わったら成功です。


4. ドライバを手動インストール

保存したフォルダに移動して実行します。
以下は、/Downloadsにドライバをダウンロードした時の例です:

cd ~/Downloads
sudo ./NVIDIA-Linux-x86_64-570.181.run --silent

途中で以下のような警告が出ても無視して大丈夫です。

WARNING: Unable to determine the path to install the libglvnd EGL vendor library config files.

これはGUI向けの設定であり、GPU計算やCUDAには影響しません。


5. 再起動

sudo reboot

再起動後、以下のコマンドで確認します。

nvidia-smi

出力にダウンロードしたバージョンが表示されれば成功です。
例: Driver Version: 570.181


6. GUIの再開

パソコンをテキストモードのみで操作したい変態じゃない限りは、GUIを起動することを推奨します。

sudo systemctl start gdm

7. Dockerコンテナが起動しなくなった場合の対処

ドライバを入れ直したあと、以下のようなエラーが出ることがあります:

Error response from daemon: could not select device driver "" with capabilities: [[gpu]]

これは、NVIDIA Container Toolkit がDockerと再リンクされていないためです。
以下の手順で復旧します。

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

確認テスト:

今までのコンテナがstartできるようになっていたらOK。
無ければ以下のコマンドで簡易的にテスト。

docker run --rm --gpus all nvidia/cuda:12.1.1-base-ubuntu22.04 nvidia-smi

→ GPU情報が出ればOK。


おわりに

Ubuntuで sudo apt install nvidia-driver-570 を実行しても、
リポジトリにある最新のマイナーバージョンが自動で選ばれるため、
環境ごとに微妙に違うドライバが入ることがあります。

この方法なら、公式サイトから特定のマイナーバージョンを確実にインストールでき、
複数パソコン間での環境統一・再現性確保が可能になります。

Discussion