nvidia-smiでエラーが出る


サーバー用PCにGPUを挿して計算機として運用する状況を想定した備忘録です。n番煎じ。
ディスプレイ周りはよくわかんない。

NVIDIA Driverのインストール方法

NVIDIA Dockerって今どうなってるの?(20.09版)という記事が非常に参考になります。あとは公式のcudaのマニュアルとか。

基本的にはCUDA Toolkitのwebページのコマンドからインストールすることが推奨されています。
aptからインストールするのは事故の元なので自分はやらないようにしています。
これはUbuntu18.04用のコマンド。

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /"
sudo apt-get update
sudo apt-get -y install cuda-drivers

サイトのスクリプトそのままだとcuda toolkitをインストールしますが、最後の行をcudaではなくcuda-driversに変更するとドライバーのみインストールすることができます。
minicondaやnvidia-docker2を使って深層学習をやるような人はcuda toolkitが必要ないので、こちらのほうが良いと思います。

再インストールする場合

1.既存のドライバーをパージします。

sudo apt purge nvidia-*
sudo apt purge cuda-*

2.CUDA Toolkitのwebページを使ってドライバをインストールします。
3.nvidia-docker2を使っている場合は巻き込まれてパージされているので再インストールします。

sudo apt install nvidia-docker2
sudo pkill -SIGHUP dokcered

本題

nvidia-smiが通らない

経験則的な対処方法です

NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver.

稀に起こるやつです。
とりあえず再起動して、再起動してもダメならドライバを再インストールしましょう。

Failed to initialize NVML: Driver/library version mismatch.

よく起こるやつです。
とりあえず再起動しましょう。九割直ります。
Dockerを仮想環境代わりに複数人でPCを強要している場合は若干注意が必要で、dokcerコンテナ側でGPUを占有しているとホスト側でこのエラーが出る場合があります。
再起動する前に誰かが使ってないか確認したほうが安全です。

nvidia-docker2を使ったコンテナが起動しない

OCI Container runtime 以下略

エラー文を読めばだいたい書いてありますが、GPUドライバ云々と出ている場合はnvidia-smiでエラーを吐く状態であることが多いです。
nvidia-smiが正常に動く状態なら立ち上がります。多分。
nvidia-docker2をそもそもインストールしていない場合も出てくるので、インストール忘れに注意。

nvidia-smiが正常かつnvidia-docker2がインストール済みでOCI Container runtime以下略

変なアップデートの仕方をして依存パッケージのバージョンが足りていない場合に出たことがあります。
関連パッケージ(libnvidia-container1, libnvidia-comtainer-toolkitなど)を適当にアップデートしたら直りました。

おわり。