前にGPUを更新したのは、2020年のことでした。
https://x.com/tawatawara/status/1264097777253941254?s=20
当時はNLPにおいてBERT真っ盛りでありその波がCVにも来そうだという時期[1]、力を求めた僕はコンシューマー向けGPUとして最高峰だったTITAN RTXに手を出したのでした。元々使っていた1080Tiとの差は歴然であり、とても役に立ってくれたと思います。
.
.
.
──── そして、6年の月日が経ち ────
.
.
.
時は流れ、TITAN RTXの属するTuringアーキテクチャも気付けば4世代前となりました。購入当時は頼もしかった24GB VRAMも、どんどん巨大化していくNNモデルの前では最低限の容量でしかありません。限界を感じた僕は、更なる力を求めたのでした...。
https://x.com/tawatawara/status/2097654448449532300?s=20
というわけで、久々にGPUを買い替えたのもあり、CUDAとDriverの入れ方を復習することにしました[2]。
本記事は年初あたりにXにポストしていたやり方[3]を記事にまとめたものになります。最近Zennに登録したので記念すべき初投稿ですね✌️
前提
僕のLocal PCがUbuntu OSなのでコマンド等もそれに準拠します。が、CUDA Toolkit や Driverを選ぶパートなどは他のOSでも参考になると思います。
また、この記事はDocker等のコンテナを使わず、ホストOSにCUDA環境を作ることが目的となっているのでご注意ください。
0. 関連パッケージを全部消す
何はともあれ一回まっさらにします。残っていると変に干渉したりするので。
CUDA
NVIDIAの公式サイトに手順があります[4]。
https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#removing-cuda-toolkit
$ sudo apt purge "*cuda*" "*cublas*" "*cufft*" "*cufile*" "*curand*" "*cusolver*" "*cusparse*" "*gds-tools*" "*npp*" "*nvjpeg*" "nsight*" "*nvvm*"
そんで autoremove でお掃除。
$ sudo apt autoremove --purge
また、/usr/local/ に /usr/local/cuda*の形でcudaの残骸が残っている場合があります。例えば過去にcuda-11.2を入れていた場合に、/usr/local/cuda-11.2が残っていたりする(ちょっと記憶が曖昧)など。この場合は掃除しても良いかも。
NVIDIA Driver
こちらも公式に手順があります。
https://docs.nvidia.com/datacenter/tesla/driver-installation-guide/removing-the-driver.html
$ sudo apt purge \
cuda-compat\* \
libnvidia-cfg1\* \
libnvidia-compute\* \
libnvidia-decode\* \
libnvidia-encode\* \
libnvidia-extra\* \
libnvidia-fbc1\* \
libnvidia-gl\* \
libnvidia-gpucomp\* \
libnvidia-nscq\* \
libnvsdm\* \
libxnvctrl\* \
nvidia-dkms-open\* \
nvidia-driver\* \
nvidia-fabricmanager\* \
nvidia-firmware\* \
nvidia-headless-open\* \
nvidia-headless-no-dkms-open\* \
nvidia-imex\* \
nvidia-kernel-common\* \
nvidia-kernel-source-open\* \
nvidia-modprobe\* \
nvidia-open\* \
nvidia-persistenced\* \
nvidia-settings\* \
nvidia-xconfig\* \
xserver-xorg-video-nvidia\*
公式のコマンドは削除対象のパッケージをずらずら書いていますが「これは入っていません」と言われることもあったり。長いので
$ sudo apt purge 'nvidia-*' 'libnvidia-*' cuda-compat\* libnvsdm\* libxnvctrl\* xserver-xorg-video-nvidia\*
でもいいかもです。そんでこっちもお掃除。
$ sudo apt autoremove --purge
以上で削除は終わりなのでここからCUDAとDriverを入れていきます。
1. Versionを選ぶ
インストールする前に適切なCUDAとDriverを選びしょう。
選び方に関しては以下のyumizzさんの記事が大変参考になりました(ありがとうございます🙏)
https://zenn.dev/yumizz/articles/73d6c7d1085d2f
CUDA
最新VersionのCUDAだからどのGPUでも使えるというわけではなく、個々のGPUに対して使えるVersionの範囲が決まっています。
GPUには以下のようにCompute Capabilityが決まっており(※長いので表の一部のみ抜粋)[5]、

以下の対応表(こちらも一部を抜粋)[6]と見比べることでGPUに対応しているCUDA Versionの範囲がわかります。

今回のケースだと使用するGPUはNVIDIA RTX PRO 6000 Blackwell Max-Q Workstation EditionなのでCompute Capabilityは12.0、これをサポートしているのは CUDA-12.8〜CUDA-13.3だということがわかりました。
さて、本当はCUDAの機能で選ぶところだとは思うのですが僕のGPUのメイン用途はKaggle Competitionなので、本記事では Kaggle Notebooks の環境に合わせて CUDA-12.8を選択することにします。
NVIDIA Driver
基本的な考え方
続いて Driver の Version を選びます。とは言っても、CUDA Toolkit のリリースノートに
The CUDA driver is backward compatible: applications compiled against a particular CUDA Toolkit version continue to work on subsequent (later) driver releases. ...
と記載があるように、CUDAと違ってDriverは後方互換性を持つため最新版を入れれば基本的に問題ないです。12.x系以前のCUDAにそれぞれ対応するminimumのDriverは以下の表(一部を抜粋)にまとまっています。

一方で、同じページにMaxが記載されている表があることにお気づきになった方もいるかもしれません。

これについては上で引用した文の続きに説明があります。
... In addition, CUDA minor version compatibility allows applications to run on a driver older than the corresponding driver branch, within the ranges shown below. The installed driver must meet or exceed the minimum required version for the CUDA Toolkit.
つまるところ「このMinor Versionの範囲内であれば古いDriverでも動きますよ」というお話。まあ何かしら事情がなければ入れるCUDAに対応する一番古いDriverよりも新しいものを入れれば良いと思います。今回はCUDA-12.8をUbuntuに入れるのでギリギリを攻めないのであればCUDA-12.9をサポートする575.51.03以上を入れれば問題ないはずです。
ギリギリは攻めないにしても最新はちょっと怖いかも...
「latest が不安定かもしれないので stable を使いたい」というのはよくある話だと思います。
NVIDIAの公式サイトには各GPUに対する推奨ドライバーを検索するページがあるのでこちらで調べてみましょう[7]。

検索結果は以下。最新が615.xなのを考えると推奨/認定済みって書かれているのは安心感がありますね。特に Windows はなんか起こりそう(偏見)。

じゃあギリギリを攻めたい場合は?
さて、最新版入れときゃ問題ないとは言ったのですが一個だけ嬉しくないことがあります。なにかというと、新し目のDriverを入れるとnvidia-smiコマンドを打った時に右上に出るCUDA Versionが入っているCUDAと一致しないのです。

実際に入っているのは cuda-12.8
そもそもこの右上のCUDA Versionは入っているCUDAではなくてDriverがサポートする一番新しいCUDAを指しているので一致しなくても何の問題もありません。ありませんが、ただちょっと気持ち悪さはあります。
そこで、対応する一番新しいCUDAが12.8となるDriverを探します。CUDA Toolkit ArchiveでCUDAの一覧を確認すると、12.8の一番新しいものは12.8.2、12.9の一番新しいものは12.9.0です。それぞれのリリースノート(12.8.2、12.9.0)から、対応するminimumのDriverはそれぞれ570.211.01, 575.51.03であることがわかりました。
ただこれだけではこの間にどれだけDriverのVersionが存在するのかわからないので、Unixドライバーアーカイブにある一覧も一応確認します。

見た感じ 570.211.01は実在してそうなのでこれを選びましょう。575.51.02は12.9に対応していそうな気配がするので...(というか575.51.03はどこ?)
2. インストールする
ここまでお疲れ様でした。選ぶパートが長くなってしまいましたが適切なVersionさえ選べばインストール自体はとても簡単なのでもう少しお付き合い下さい。
まずCUDA Toolkit Archiveから入れたいCUDAのページを探します。前節で述べたように今回は12.8.2です。
アクセスするとインストールしたい環境を選択式で入力する画面になります。

ポチポチして行けばインストールコマンドが表示されます。Install Typeは多分どれでも大丈夫なのですが、ネットワーク環境に問題がなければ deb(network)で良いと思います[8]。

あとはコマンド打つだけで終わりです。まずは CUDA から。
$ 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-8
次に Driver を入れるのですが、このままコマンドを打つと最新のDriverが勝手に入ります。後方互換性があるので問題は無いはずですが...今回はVersionを指定してインストールしましょう。
指定方法についてはDriver Installation Guideに記載があります。まあコマンドを打つだけですね :)
推奨/認定済みのDriverを入れる場合
検索結果の一番上にあった595.99.02を指定します。
$ sudo apt install nvidia-driver-pinning-595.99.02
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
E: パッケージ nvidia-driver-pinning-595.99.02 が見つかりません
E: 'nvidia-driver-pinning-595.99.02' に一致するパッケージは見つかりませんでした
おっと、どうやら apt には無いらしい。代わりにリストの2番目の595.91.07を指定してみます。
$ sudo apt install nvidia-driver-pinning-595.91.07
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
nvidia-driver-pinning-595.91.07
...
うまくいったようです👍
ギリギリを攻めたい場合
前節で調べてきた570.211.01を指定しましょう。
$ sudo apt install nvidia-driver-pinning-570.211.01
ただこちらに関しては依存関係に問題があるため、 /etc/apt/preferences.d/nvidia-driver-pin を書き換える必要があります[9]。これをやらないと580.xが入ってしまうので注意。
$ sudo sed -i 's/Pin: version 570\.211\.01-\*/Pin: version 570.211.01-0ubuntu1/g' /etc/apt/preferences.d/nvidia-driver-pin
気になる人向け:書き換えないと何が起こるのか
インストールしようとしているnvidia-openはpinningによって570.211.01-0ubuntu1が候補となっています。
$ apt-cache policy nvidia-open
nvidia-open:
インストールされているバージョン: 570.211.01-0ubuntu1
候補: 570.211.01-0ubuntu1
バージョンテーブル:
615.71.09-1ubuntu1 600
600 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64 Packages
610.57.04-1ubuntu1 600
600 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64 Packages
610.43.02-1ubuntu1 600
600 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64 Packages
595.91.07-1ubuntu1 600
600 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64 Packages
...
615.71.09-1ubuntu1がバージョンテーブルの一番上に来ていて、何もしないと最新のDriverが入っていたことがわかりますね。
で、問題はこの570.211.01-0ubuntu1をpinningした時のnvidia-openが依存しているnvidia-driver-570-open+α です。
$ apt-cache depends nvidia-open
nvidia-open
|依存: nvidia-driver-570-open
依存: nvidia-driver-570-server-open
...
インストールの候補を探ると、以下は書き換えたあとなので候補が入れ替わっていますが、570.211.01-0ubuntu1ではなく570.211.01-0ubuntu1.22.04.1の優先度が高いことがわかります。
$ apt-cache policy nvidia-driver-570-open nvidia-dkms-570-open nvidia-kernel-source-570-open libnvidia-gl-570
nvidia-driver-570-open:
インストールされているバージョン: 570.211.01-0ubuntu1
候補: 570.211.01-0ubuntu1
バージョンテーブル:
570.211.01-0ubuntu1.22.04.1 500
500 http://jp.archive.ubuntu.com/ubuntu jammy-updates/restricted amd64 Packages
500 http://security.ubuntu.com/ubuntu jammy-security/restricted amd64 Packages
*** 570.211.01-0ubuntu1 1000
600 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64 Packages
100 /var/lib/dpkg/status
...
nvidia-dkms-570-open:
インストールされているバージョン: 570.211.01-0ubuntu1
候補: 570.211.01-0ubuntu1
バージョンテーブル:
570.211.01-0ubuntu1.22.04.1 500
500 http://jp.archive.ubuntu.com/ubuntu jammy-updates/restricted amd64 Packages
500 http://security.ubuntu.com/ubuntu jammy-security/restricted amd64 Packages
*** 570.211.01-0ubuntu1 1000
600 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64 Packages
100 /var/lib/dpkg/status
...
nvidia-kernel-source-570-open:
インストールされているバージョン: 570.211.01-0ubuntu1
候補: 570.211.01-0ubuntu1
バージョンテーブル:
570.211.01-0ubuntu1.22.04.1 500
500 http://jp.archive.ubuntu.com/ubuntu jammy-updates/restricted amd64 Packages
500 http://security.ubuntu.com/ubuntu jammy-security/restricted amd64 Packages
*** 570.211.01-0ubuntu1 1000
600 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64 Packages
100 /var/lib/dpkg/status
...
libnvidia-gl-570:
インストールされているバージョン: 570.211.01-0ubuntu1
候補: 570.211.01-0ubuntu1
バージョンテーブル:
570.211.01-0ubuntu1.22.04.1 500
500 http://jp.archive.ubuntu.com/ubuntu jammy-updates/restricted amd64 Packages
500 http://security.ubuntu.com/ubuntu jammy-security/restricted amd64 Packages
*** 570.211.01-0ubuntu1 1000
600 https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64 Packages
100 /var/lib/dpkg/status
...
なぜこんなことになっているかというと、書き換えた /etc/apt/preferences.d/nvidia-driver-pin において、元々はVersionのPinが Pin: version 570.211.01-*となっていたので570.211.01-0ubuntu1.22.04.1もひっかかってしまっていたんですよね。
そんでこの570.211.01-0ubuntu1.22.04.1が曲者で、見た目は570.xなのに依存先が580.xなので、書き換えないと580.xが入るというのが事の経緯でした(2敗)。
バージョンを指定出来たので残すはインストールだけですが、オプションとして open kernel module と proprietary kernel module があります。
ここがTITAN RTXから6000 Blackwell Max-Q、というよりはTuringからBlackwellへ移行した際の唯一の更新点なのですが、Blackwellアーキテクチャはproprietary kernel moduleを利用できません[10]。因みに各世代との対応表をまとめるとこんな感じ[11]。
| アーキテクチャ \ kernel | proprietary kernel module |
open kernel module |
|---|---|---|
Grace Hopper, Blackwell
|
利用不可 | 利用可能 |
Hopper, Ada Lovelace, Ampere, Turing
|
利用可能 | 利用可能(推奨) |
Volta, Pascal, Maxwell 以前 |
利用可能 | 利用不可 |
open kernel module自体はTuringから利用できたようですが、proprietary kernel moduleを利用できなくしたのは最近のアーキテクチャからみたいですね。
というわけで以下のコマンドを打てば今度こそおしまいです。
$ sudo apt-get install -y nvidia-open
3. 認識するか確認する
再起動してちゃんと認識できているか確認します。
パスの設定(追記)
元々設定していたので書くのをすっかり忘れておりました😅 CUDA Installation Guideにおいても11. Post-installation Actionsに記載があります。
.bash_profileもしくは.profileに以下を追記しましょう。今回入れたのは12.8.2なので12.8を指定していますが、入れたCUDAのVersionに応じて変更してください。
export PATH=$PATH:/usr/local/cuda-12.8/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-12.8/lib64
※64bitシステムではなく32bitシステムの場合はlib64はlibになります
因みに一応Versionを指定はしたものの、単一のCUDAしか入れていないのであれば追記する内容は
export PATH=$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
でも構いません。これは/usr/local/cuda/が(迂回は挟むが)シンボリックリンクで/usr/local/cuda-12.8を指しているためです。
$ ls -ld /usr/local/cuda*
lrwxrwxrwx 1 root root 22 9月 11 14:56 /usr/local/cuda -> /etc/alternatives/cuda
lrwxrwxrwx 1 root root 25 9月 11 14:56 /usr/local/cuda-12 -> /etc/alternatives/cuda-12
drwxr-xr-x 15 root root 4096 9月 11 14:56 /usr/local/cuda-12.8
$ ls -ld /etc/alternatives/cuda*
lrwxrwxrwx 1 root root 20 9月 11 14:56 /etc/alternatives/cuda -> /usr/local/cuda-12.8
lrwxrwxrwx 1 root root 20 9月 11 14:56 /etc/alternatives/cuda-12 -> /usr/local/cuda-12.8
この後の確認に移る前に、設定ファイルの内容を反映しておきましょう。ログインし直すでもいいですし、source .profile or source .bash_profile で即時反映させるのでも良いです。
CUDA
$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2025 NVIDIA Corporation
Built on Fri_Feb_21_20:23:50_PST_2025
Cuda compilation tools, release 12.8, V12.8.93
Build cuda_12.8.r12.8/compiler.35583870_0
NVIDIA Driver
検索した推奨/認定済みのやつ
$ nvidia-smi
Fri Sep 11 18:30:03 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 595.91.07 Driver Version: 595.91.07 CUDA Version: 13.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 RTX PRO 6000 Blac... On | 00000000:65:00.0 Off | Off |
| 30% 46C P8 7W / 300W | 47MiB / 97887MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 1196 G /usr/lib/xorg/Xorg 10MiB |
| 0 N/A N/A 1249 G /usr/bin/gnome-shell 17MiB |
+-----------------------------------------------------------------------------------------+
ギリギリを攻めたやつ
$ nvidia-smi
Fri Sep 11 12:30:34 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 570.211.01 Driver Version: 570.211.01 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 RTX PRO 6000 Blac... On | 00000000:65:00.0 Off | Off |
| 30% 40C P8 5W / 300W | 47MiB / 97887MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 1179 G /usr/lib/xorg/Xorg 10MiB |
| 0 N/A N/A 1228 G /usr/bin/gnome-shell 17MiB |
+-----------------------------------------------------------------------------------------+
PyTorch
※PyTorch の環境構築については各自で行ってください。僕は uv でやってます。
$ uv run python -c "import torch; print('CUDA:', torch.cuda.is_available()); print('cuDNN:',torch.backends.cudnn.enabled); print('Device:', torch.cuda.get_device_name()); print('Compute Capability:',torch.cuda.get_device_capability());"
CUDA: True
cuDNN: True
Device: NVIDIA RTX PRO 6000 Blackwell Max-Q Workstation Edition
Compute Capability: (12, 0)
もちろん実際に計算を回して動作確認をすべきところではありますが、とりあえずは認識できていますね👌
力を...手に入れたぞ...!!!
はい。VRAM容量的にも計算速度的にも最高のGPUが手に入りました。逆に言えばそれを言い訳にやらないという選択肢が無いということでもあります(ホンマか?)。とりあえずは Kaggle で試運転したいですね。
文中でも書きましたが (Versionさえ適切に選べば) 一昔前に比べるとCUDAとNVIDIA Driverのインストールはめちゃくちゃ楽になりました。「いやCUDA入りのコンテナ使えよ」という公式からの声が聞こえてきますが、ホストOSにも一個入れとくのは悪いことでは無い(はず)です。
また、Driverは後方互換性があるので、参照させて頂いた記事でyumizzさんが紹介していた、「DriverはホストOSに最新のものを入れて、CUDAは個々のDockerコンテナに任せる」というやり方はスマートに感じます。
買っちゃったからには2026年(以降)のベストバイにするべく頑張る所存です。ではまた別の記事でお会いしましょう👋
余談
RTX Pro 6000 Blackwell Max-Qが届いた時テンション爆上がりでしたが動作確認まで結構時間がかかりました。結局のところ原因はこれ↓。おかげでケーブルに異常がないかとかを抜き挿しして確認したりしてめちゃくちゃ時間かかった...(不良品とかではなくて良かったですが。)
https://x.com/tawatawara/status/2097710287474643294?s=20
二股のPCIe 8ピンケーブル(合わせて16pin)を同じGPUに挿すのって実は危険な行為で(最悪ケーブルが異常発熱して発火するらしい)、いやよく無事だったなあと。
でもこの種のケーブルって1本あたりの供給能力は300Wあるらしい[12]ので、常時300Wで24時間365日稼働とかでなければ大丈夫なのかもしれないですね。
そもそも僕のLocal PCの電源は8pinケーブル用のコネクタの余りが2箇所しかないので、1080TiとTITAN RTXの2枚を挿していたときは1本ずつ使うしかなかったという事情があったり。その後TITAN RTXだけ使う運用になったのでそのときに気付けていれば...もしかすると電源供給能力が不足していて真の力を発揮していなかったかも?
Max-Q は消費電力が300Wに調整されていますが、瞬間的にちょっと超えることもあるのでそのために2本挿すことが必須なんですかね?VRAMが96GBあれば十分(だし消費電力的にも厳しい)なので複数挿しをする予定はないのですが、前述の通りケーブルの供給能力的にはセーフっぽいので何で起動しなかったのかはちょっとだけ気になります👀
脚注-
因みにVisionTransformerが発表されるのは2020年10月なのでもう少し後です: https://arxiv.org/abs/2010.11929 ↩︎
-
そのまま動くかな〜と思ったらDriverが認識してくれなかったのが事の発端 ↩︎
-
場所的にはCUDA 13.4のインストールガイドの中ですが、削除の手順はどのVersionのCUDAでも一緒です ↩︎
-
何にとっての推奨なのかよくわかってないですが少なくとも動かないということはないはず... ↩︎
-
因みに runfile でのインストールは試したことがないです ↩︎
-
暫定対応なので直接書き換えていますが本当は別ファイルで指定するべきかも ↩︎
-
このため、
6000 Blackwell Max-Qを挿した直後にnvidia-smiを打ったらNo devices were foundが返ってきた ↩︎ -
参照: https://developer.nvidia.com/blog/nvidia-transitions-fully-towards-open-source-gpu-kernel-modules/#supported_gpus ↩︎
-
参考:https://www.corsair.com/jp/en/explorer/diy-builder/power-supply-units/individual-8-pin-vs-pigtail-connectors-for-gpus/ ↩︎
Discussion
