DockerコンテナがあるPCでGPUドライバ再インストール

GPUドライバがバグったのでGPUドライバを再インストールした。
そしたらGPU対応させていたDockerコンテナが起動できなくなったので、その対処を記録する。

環境

  • PC: Ubuntu18.04
  • GPU: RTX2080
  • Docker: version 19.03.5
  • コンテナ: docker run -it --gpus all ... で作ったコンテナ

GPU再インストール

既存のドライバ削除

sudo apt purge nvidia-*
sudo apt purge cuda-* # あれば
sudo apt autoremove

GPUドライバのリポジトリ追加

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update

GPUのドライバ候補表示

ubuntu-drivers devices

下みたいな候補一覧が出てくるのでnvidia-driver-***のどれか好きなの選ぶ

vendor   : NVIDIA Corporation
driver   : nvidia-driver-418-server - distro non-free
driver   : nvidia-driver-460-server - distro non-free
driver   : nvidia-driver-460 - third-party free
driver   : nvidia-driver-450-server - distro non-free
driver   : nvidia-driver-465 - third-party free recommended
driver   : xserver-xorg-video-nouveau - distro free builtin

ドライバインストール

sudo apt install nvidia-driver-460

インストール後、nvidia-smiでエラーなく結果が教示されたらOK

Docker側の修正

GPU再インストール後にコンテナをstartで起動しようとすると以下のようなエラーが出て起動できなかった

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

nvidia-container-runtimeというパッケージを入れて再起動すると治るっぽい(参考)

まず、vimかなんかで以下のスクリプト(nvidia-container-runtime-script.shと名付ける)を作成

curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | \
  sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | \
  sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list
sudo apt-get update

nvidia-container-runtime-script.shを実行&nvidia-container-runtimeインストール

sh nvidia-container-runtime-script.sh
sudo apt-get install nvidia-container-runtime

dockerデーモンを再起動(もしくはPC再起動)

sudo systemctl restart docker

これでエラーなくコンテナを起動できるようになるはず