CUDA が動作しなくなった時

アイキャッチ画像

頻繁なアップデートのため、システムのアップデート時に気をつけないと CUDA が動作しなくなってしまうことがあります。

そのような時の解決手順について記載します。

dlibがCUDAを利用できない場合はdlib.DLIB_USE_CUDA が Falseになる場合の対処法をご参照ください。

関連するライブラリ削除

sudo apt purge cuda*
sudo apt purge libcuda*
sudo apt purge cudnn*
sudo apt purge libcudnn*
sudo apt-get purge *nvidia*

sudo apt autoremove
sudo apt autoclean

nvidiaリポジトリのチェックを外す

該当する場合はチェックを外して下さい。

uncheck nvidia repository

アップデートを行います。

sudo apt update

CUDA 関連ファイルを削除

「関連するライブラリを削除」ですでに削除されているはずですが、念の為確認してみます。ディレクトリが存在する場合は削除して下さい。

sudo rm -rf /usr/local/cuda*

sudo apt update && sudo apt upgrade -y

driverがNouveauディスプレイドライバになっていることを確認してください。「追加のドライバー」から確認することが出来ます。

スクリーンショットではnvidia-diver-525になっていますが、リスト最後のX.org ~ Nouveauディスプレイドライバーにチェックが入っていることを確認して下さい。


Docker image を削除

現在のdocker image を確認します。`docker images`で表示されない場合はスキップして下さい。

$ docker images
 REPOSITORY                     TAG                       IMAGE ID       CREATED        SIZE
<none>                         <none>                    7015867e0ff7   2 weeks ago    18.2GB
tokaikaoninsho/face01_no_gpu   1.4.12                    dd34d05422c5   2 weeks ago    2.53GB
tokaikaoninsho/face01_gpu      1.4.12                    61d32d36b9ab   2 weeks ago    19.2GB
tokaikaoninsho/face01_no_gpu   1.4.11                    6ad4ba3cbe88   3 weeks ago    3.65GB
tokaikaoninsho/face01_gpu      1.4.11                    682da444845a   3 weeks ago    20.3GB
face01_no_gpu                  1.4.11                    efc3845d390a   3 weeks ago    2.5GB
face01_gpu                     1.4.11                    7398d955d905   3 weeks ago    19.2GB
<none>                         <none>                    6c61d0364450   3 weeks ago    1.66GB
<none>                         <none>                    b2e38e65b233   3 weeks ago    18.2GB
ubuntu                         20.04                     d5447fc01ae6   2 months ago   72.8MB
tensorflow/tensorflow          latest-gpu-jupyter        cf6cb74c9ec4   5 months ago   6.19GB
nvidia/cuda                    11.0.3-base-ubuntu20.04   8017f5c31b74   6 months ago   122MB

Docker images を削除します。

$ docker rmi 7015867e0ff7 dd34d05422c5 61d32d36b9ab 6ad4ba3cbe88 682da444845a efc3845d390a 7398d955d905 6c61d0364450 b2e38e65b233 d5447fc01ae6 cf6cb74c9ec4 8017f5c31b74
$ docker images
REPOSITORY              TAG                       IMAGE ID       CREATED        SIZE
<none>                  <none>                    7015867e0ff7   2 weeks ago    18.2GB
tensorflow/tensorflow   latest-gpu-jupyter        cf6cb74c9ec4   5 months ago   6.19GB
nvidia/cuda             11.0.3-base-ubuntu20.04   8017f5c31b74   6 months ago   122MB
$ docker rmi -f nvidia/cuda:11.0.3-base-ubuntu20.04
Untagged: nvidia/cuda:11.0.3-base-ubuntu20.04
Untagged: nvidia/cuda@sha256:57455121f3393b7ed9e5a0bc2b046f57ee7187ea9ec562a7d17bf8c97174040d

削除できないdocker image は-fオプションをつけて削除します。

$ docker rmi -f tensorflow/tensorflow:latest-gpu-jupyter
Untagged: tensorflow/tensorflow:latest-gpu-jupyter
Untagged: tensorflow/tensorflow@sha256:a72deb34d32e26cf4253608b0e86ebb4e5079633380c279418afb5a131c499d6
Deleted: sha256:cf6cb74c9ec4ff92634514468a6dd2323dead73720b58e1700b9478557668b3d
$ docker rmi -f 7015867e0ff7
Deleted: sha256:7015867e0ff7461e1776bfa43f7383f1a6ec748817e8afb60b04fce9f2b40cd8
Deleted: sha256:ae77d65add3126995cbfb38f7e8b36e12fa5f23de0ab7a9723b2a752cca3c281
Deleted: sha256:82eb8ba78e6c6d7f349188ba006b3e9f35b003e1682f3820355ab839bd5acd04
Deleted: sha256:f946ae5db3ab83a4da53d8791d7c57e7f6ad39bda37527e0338f82524791578f
Deleted: sha256:43707fb49b26719b6c92faf6af9fb2e160efa3ea9151cdc43c7fb903e61e7

Dockerの公開鍵をダウンロードした後セットします。

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.0-1_all.deb

sudo dpkg -i cuda-keyring_1.0-1_all.deb

ライブラリの再インストール

CUDA環境を再構築する方法は2通りあります。

  • CLIを使う
  • GUIで一つづつ行う

それぞれについて紹介します。

CLIを使う

通常はこちらを選んで下さい。

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.0-1_all.deb

sudo dpkg -i cuda-keyring_1.0-1_all.deb

sudo apt-get update

sudo apt-get -y install cuda-12-0
## cuda-12-0をインストールすることにより、以下のパッケージもインストールされる
# cuda-toolkit-12-0
# nvidia-driver-525
# libcublas-12-0
## cuda-12-0をインストール指定してもlibcudnn8はインストールされない
apt-get install -y libcudnn8
apt-get install -y libcudnn8-dev

## バージョン固定
sudo apt-mark hold cuda-12-0
sudo apt-mark hold cuda-cccl-12-0
sudo apt-mark hold cuda-command-line-tools-12-0
sudo apt-mark hold cuda-compiler-12-0
sudo apt-mark hold cuda-cudart-12-0
sudo apt-mark hold cuda-cudart-dev-12-0
sudo apt-mark hold cuda-cuobjdump-12-0
sudo apt-mark hold cuda-cupti-12-0
sudo apt-mark hold cuda-cupti-dev-12-0
sudo apt-mark hold cuda-cuxxfilt-12-0
sudo apt-mark hold cuda-demo-suite-12-0
sudo apt-mark hold cuda-documentation-12-0
sudo apt-mark hold cuda-driver-dev-12-0
sudo apt-mark hold cuda-drivers
sudo apt-mark hold cuda-drivers-525
sudo apt-mark hold cuda-gdb-12-0
sudo apt-mark hold cuda-libraries-12-0
sudo apt-mark hold cuda-libraries-dev-12-0
sudo apt-mark hold cuda-nsight-12-0
sudo apt-mark hold cuda-nsight-compute-12-0
sudo apt-mark hold cuda-nsight-systems-12-0
sudo apt-mark hold cuda-nvcc-12-0
sudo apt-mark hold cuda-nvdisasm-12-0
sudo apt-mark hold cuda-nvml-dev-12-0
sudo apt-mark hold cuda-nvprof-12-0
sudo apt-mark hold cuda-nvprune-12-0
sudo apt-mark hold cuda-nvrtc-12-0
sudo apt-mark hold cuda-nvrtc-dev-12-0
sudo apt-mark hold cuda-nvtx-12-0
sudo apt-mark hold cuda-nvvp-12-0
sudo apt-mark hold cuda-opencl-12-0
sudo apt-mark hold cuda-opencl-dev-12-0
sudo apt-mark hold cuda-profiler-api-12-0
sudo apt-mark hold cuda-runtime-12-0
sudo apt-mark hold cuda-sanitizer-12-0
sudo apt-mark hold cuda-toolkit-12-0
sudo apt-mark hold cuda-toolkit-12-0-config-common
sudo apt-mark hold cuda-toolkit-12-config-common
sudo apt-mark hold cuda-toolkit-config-common
sudo apt-mark hold cuda-tools-12-0
sudo apt-mark hold cuda-visual-tools-12-0
sudo apt-mark hold dctrl-tools
sudo apt-mark hold default-jre
sudo apt-mark hold default-jre-headless
sudo apt-mark hold dkms
sudo apt-mark hold gds-tools-12-0
sudo apt-mark hold libcublas-12-0
sudo apt-mark hold libcublas-dev-12-0
sudo apt-mark hold libcufft-12-0
sudo apt-mark hold libcufft-dev-12-0
sudo apt-mark hold libcufile-12-0
sudo apt-mark hold libcufile-dev-12-0
sudo apt-mark hold libcurand-12-0
sudo apt-mark hold libcurand-dev-12-0
sudo apt-mark hold libcusolver-12-0
sudo apt-mark hold libcusolver-dev-12-0
sudo apt-mark hold libcusparse-12-0
sudo apt-mark hold libcusparse-dev-12-0
sudo apt-mark hold libegl-mesa0:i386
sudo apt-mark hold libegl1:i386
sudo apt-mark hold libgbm1:i386
sudo apt-mark hold libgles2:i386
sudo apt-mark hold libnpp-12-0
sudo apt-mark hold libnpp-dev-12-0
sudo apt-mark hold libnvidia-cfg1-525
sudo apt-mark hold libnvidia-common-525
sudo apt-mark hold libnvidia-compute-525
sudo apt-mark hold libnvidia-compute-525:i386
sudo apt-mark hold libnvidia-decode-525
sudo apt-mark hold libnvidia-decode-525:i386
sudo apt-mark hold libnvidia-encode-525
sudo apt-mark hold libnvidia-encode-525:i386
sudo apt-mark hold libnvidia-extra-525
sudo apt-mark hold libnvidia-fbc1-525
sudo apt-mark hold libnvidia-fbc1-525:i386
sudo apt-mark hold libnvidia-gl-525
sudo apt-mark hold libnvidia-gl-525:i386
sudo apt-mark hold libnvjitlink-12-0
sudo apt-mark hold libnvjitlink-dev-12-0
sudo apt-mark hold libnvjpeg-12-0
sudo apt-mark hold libnvjpeg-dev-12-0
sudo apt-mark hold libnvvm-samples-12-0
sudo apt-mark hold libopengl0:i386
sudo apt-mark hold libtinfo5
sudo apt-mark hold libwayland-server0:i386
sudo apt-mark hold nsight-compute-2022.4.1
sudo apt-mark hold nsight-systems-2022.4.2
sudo apt-mark hold nvidia-compute-utils-525
sudo apt-mark hold nvidia-dkms-525
sudo apt-mark hold nvidia-driver-525
sudo apt-mark hold nvidia-kernel-common-525
sudo apt-mark hold nvidia-kernel-source-525
sudo apt-mark hold nvidia-modprobe
sudo apt-mark hold nvidia-prime
sudo apt-mark hold nvidia-settings
sudo apt-mark hold nvidia-utils-525
sudo apt-mark hold openjdk-11-jre
sudo apt-mark hold openjdk-11-jre-headless
sudo apt-mark hold screen-resolution-extra
sudo apt-mark hold xserver-xorg-video-nvidia-525
sudo apt-mark hold libcudnn8-dev
sudo apt-mark hold libcudnn8


apt-get install -y g++-8
sudo apt-get update
sudo apt-get upgrade -y

GUIで確認しながら行う

冒頭で該当した方はここでnvidiaリポジトリにチェックを入れて下さい。

sudo apt update
<!-- sudo apt install -y cuda -->
sudo apt install -y nvidia-cuda-toolkit
sudo apt install -y libcudnn8
sudo apt install -y libcudnn8-dev
<!-- sudo apt install -y libcublas -->

Driver の再インストール

利用できるディスプレイドライバーを確認。

sudo ubuntu-drivers devices
== /sys/devices/pci0000:00/0000:00:03.1/0000:08:00.0 ==
modalias : pci:v000010DEd00002182sv00001462sd00008D90bc03sc00i00
vendor   : NVIDIA Corporation
model    : TU116 [GeForce GTX 1660 Ti]
driver   : nvidia-driver-450 - third-party non-free
driver   : nvidia-driver-525-open - distro non-free recommended
driver   : nvidia-driver-460 - third-party non-free
driver   : nvidia-driver-515 - third-party non-free
driver   : nvidia-driver-418-server - distro non-free
driver   : nvidia-driver-455 - third-party non-free
driver   : nvidia-driver-470 - third-party non-free
driver   : nvidia-driver-450-server - distro non-free
driver   : nvidia-driver-515-open - distro non-free
driver   : nvidia-driver-520 - third-party non-free
driver   : nvidia-driver-495 - third-party non-free
driver   : nvidia-driver-515-server - distro non-free
driver   : nvidia-driver-470-server - distro non-free
driver   : nvidia-driver-510 - third-party non-free
driver   : nvidia-driver-465 - third-party non-free
driver   : nvidia-driver-525 - third-party non-free
driver   : nvidia-driver-525-server - distro non-free
driver   : xserver-xorg-video-nouveau - distro free builtin

ディスプレイドライバーの再インストール。

sudo apt install nvidia-driver-515
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  dctrl-tools dkms libegl-mesa0:i386 libegl1:i386 libgbm1:i386 libgles2:i386 libnvidia-cfg1-515
  libnvidia-common-515 libnvidia-compute-515 libnvidia-compute-515:i386 libnvidia-decode-515
  libnvidia-decode-515:i386 libnvidia-encode-515 libnvidia-encode-515:i386 libnvidia-extra-515
  libnvidia-fbc1-515 libnvidia-fbc1-515:i386 libnvidia-gl-515 libnvidia-gl-515:i386 libopengl0:i386
  libwayland-server0:i386 nvidia-compute-utils-515 nvidia-dkms-515 nvidia-kernel-common-515
  nvidia-kernel-source-515 nvidia-prime nvidia-settings nvidia-utils-515 screen-resolution-extra
  xserver-xorg-video-nvidia-515
提案パッケージ:
  debtags menu
以下のパッケージは「削除」されます:
  libnvidia-compute-418-server
以下のパッケージが新たにインストールされます:
  dctrl-tools dkms libegl-mesa0:i386 libegl1:i386 libgbm1:i386 libgles2:i386 libnvidia-cfg1-515
  libnvidia-common-515 libnvidia-compute-515 libnvidia-compute-515:i386 libnvidia-decode-515
  libnvidia-decode-515:i386 libnvidia-encode-515 libnvidia-encode-515:i386 libnvidia-extra-515
  libnvidia-fbc1-515 libnvidia-fbc1-515:i386 libnvidia-gl-515 libnvidia-gl-515:i386 libopengl0:i386
  libwayland-server0:i386 nvidia-compute-utils-515 nvidia-dkms-515 nvidia-driver-515 nvidia-kernel-common-515
  nvidia-kernel-source-515 nvidia-prime nvidia-settings nvidia-utils-515 screen-resolution-extra
  xserver-xorg-video-nvidia-515
アップグレード: 0 個、新規インストール: 31 個、削除: 1 個、保留: 0 個。
334 MB のアーカイブを取得する必要があります。
この操作後に追加で 778 MB のディスク容量が消費されます。
続行しますか? [Y/n] Y

.bashrc を再読込み

~/.bashrc.
. .bashrc

Docker 再インストール

sudo apt-get update && sudo apt-get upgrade -y \
  && curl https://get.docker.com | sh \
  && sudo systemctl --now enable docker

sudo usermod -aG docker <user_name>
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
      && 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/$distribution/libnvidia-container.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 update
sudo apt-get update --fix-missing

sudo apt install -y nvidia-docker2
sudo systemctl restart docker

`nvidia-smi` commandで動作確認

最後に…

必要に応じてGPUに関係するPythonライブラリを再インストール用してください。

動作チェックをして作業終了となります。お疲れ様でした。

アイキャッチ画像