💀

CUDA一式の導入 12.4→12.6アップグレード編: Ubuntu 22.04 LTS (2025.10.09時点)

に公開

前提: Ubuntu 22.04 LTS
公式サイトを見るのが確実なのですが、公式ドキュメントが一箇所に纏まってなくて面倒なので備忘録です。

ちなみに24.04でNのドライバ入れた子たちのカーネルが吹き飛ばされてる事案が最近多数発生していたらしいです。怖いですね。やめてよね。

1. かつてのドライバを全て削除する

生き残りが居た場合、何が起こると思う?
――カーネルパニックだ。

sudo /usr/bin/nvidia-uninstall
sudo apt-mark unhold nvidia*
sudo apt-mark unhold libnvidia*
sudo apt remove --purge nvidia-*
sudo apt remove --purge cuda-*
sudo apt autoremove
sudo apt autoclean

2. CUDA Toolkitの導入

CUDAドライバをNetworkインストールする。
12.1の頃にCanonicalの公式リポジトリに統合されるという話をしていた気がしたのだけれど、未だにインストール方法が統一されていないし、何なら公式がdpkg、apt、run.shの三種類で提供しているせいで異なる環境下で整合性が保証できない。本当にやめてほしい。

過去バージョンは https://developer.nvidia.com/cuda-toolkit-archive から探せる。
下位互換があるという建前になっているが、往々にしてトラブルが起きるのであまり冒険したくない。
私のおすすめは12.6です。いい感じに枯れているから。

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

# CUDA ToolKit
sudo apt-get -y install cuda-toolkit-12-6  

# Nvidia Driver 
sudo apt-get install -y cuda-drivers  

3. 導入できてるかどうか確認

# カーネルに一部ファイルがロックされているので sudo reboot をしないと新しいドライバが読み込まれないことに注意
nvidia-smi 
nvcc -V 

4. CuDNN導入

sudo apt-get -y install cudnn
sudo apt-get -y install cudnn9-cuda-12

5. 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
export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.17.8-1
  sudo apt-get install -y \
      nvidia-container-toolkit=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
      nvidia-container-toolkit-base=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
      libnvidia-container-tools=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
      libnvidia-container1=${NVIDIA_CONTAINER_TOOLKIT_VERSION}

動作確認

sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi

6. ~/.bashrc に環境変数を記載

要るのかどうかわからないが、昔は必要だったので未だに書いています。
本当に必要かどうかはまた調べたいけれど、副作用はそんなに無いと思うので優先度は低め。

export PATH=/usr/local/cuda-12.6/bin:$PATH+:${PATH}
export LD_LIBRARY_PATH=/usr/local/cuda-12.6/lib64:$LD_LIBRARY_PATH+:${LD_LIBRARY_PATH}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH+:${LD_LIBRARY_PATH}
export LD_LIBRARY_PATH=/usr/lib/cuda/include:$LD_LIBRARY_PATH+:${LD_LIBRARY_PATH}

7. カーネルが破壊されないようにロックしておく

CUDA DriverはUbuntuのカーネル更新と食い合わせが悪いので良く死ぬ。
うかつにapt upgradeをするとカーネルパニックで起動しなくなる。
特にcuda-driversのバージョン指定をしなかった場合は顕著。
面倒なので依存関係をholdして上書きされないようにしておくと多少安全。

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

8. 祈れ。ドライバがその身とGPU、カーネルを焦がさぬように。

良くありそうな質問

nvml error: driver/library version mismatch って何?

Driverとドライバのsoファイルが噛み合ってない。大抵、アップデート前のsoをカーネルが掴んでるだけなので、rebootすれば治るはず。

nvidia-smi で何も出てこない

ドライバ導入に失敗してるので、最初からやり直そう。下手に再起動するとカーネルパニックになります。

nvcc -V で何も出てこない

.bashrcなどで、環境変数が通っているかをチェック。古いバージョンのパスを記載してたりしませんか?

カーネルパニックでOSが起動しなくなった

GRUBのターミナルが起動するなら、この手順のドライバアンインストール&インストール部分だけ確実にこなせば復旧できます。後は祈りましょう。

Discussion