wslでのcuda toolkitのインストールでエラー

wsl上でcuda toolkitを入れたらnvidia-smiでエラーが出るようになったのでメモ

こちらで環境に合わせたインストールコマンドがわかる
CUDA Toolkit 11.1 Update 1 Downloads | NVIDIA Developer

入れる前に実行してあったnvidia-smiの結果

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.57.01    Driver Version: 471.41       CUDA Version: 11.4     |
|-------------------------------+----------------------+----------------------+
| 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 GeForce ...  Off  | 00000000:01:00.0  On |                  N/A |
| 30%   33C    P8    16W / 350W |    529MiB / 24576MiB |    ERR!      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

この時点でGPU-Util部分がERR!となっているが、これはwsl上で実行するとこうなってしまう模様。nvidia側のupdateが必要とのこと。

github.com

cuda toolkitを入れた後

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.39.01    Driver Version: 471.41       CUDA Version: 11.4     |
|-------------------------------+----------------------+----------------------+
| 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 GeForce ...  Off  | 00000000:01:00.0  On |                  N/A |
| 30%   35C    P8    20W / 350W | Function Not Found   |    ERR!      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

Memory-UsageがFunction not foundという表示となっている。

インストールしたパッケージを調べていくと、cuda toolkitのインストール時にはwsl専用のコマンドを指定する必要があった。環境選択時にちゃんとwslという選択用のボタンもあったのだが見逃してubuntuを選択して出てきたコマンドを使ってしまった。

インストールされたパッケージの中にはdriverと書かれたものもあったので、ubuntu用のdriverも入ってしまったためにwindows側の正しいdriverにアクセスできなくなったのではと考えられる。

ということで入れたパッケージを調べてアンインストールしてみる。 /var/log/dpkg.logでインストールしたパッケージと時刻がわかるので上記でインストールされたnvidiaと書かれたパッケージをすべて削除する。

cat /var/log/dpkg.log | grep nvidia
# 時刻を見て入ってしまったであろうパッケージを列挙
apt remove nvidia-prime libnvidia-compute-510 nvidia-modprobe libnvidia-common-510 nvidia-kernel-source-510 nvidia-utils-510 libnvidia-cfg1-510 libnvidia-fbc1-510 libnvidia-fbc1-510 nvidia-compute-utils-510 libnvidia-extra-510 libnvidia-decode-510 nvidia-kernel-common-510 libnvidia-encode-510 libnvidia-gl-510 xserver-xorg-video-nvidia-510 nvidia-dkms-510 nvidia-driver-510 nvidia-settings

削除後はnvidia-smiの出力がもとの状態に戻った。

ところで調べる中で以下の2つで表示されるcudaのversionが異なることが気になった。私がおかしいなものを入れてしまったせいなのかと思ったがどうやらそうではなかった。
nvidia-smiとnvccで表示されるCUDAバージョンが異なる件

nvidia-smiで表示されるものはdriverが対応しているcudaの最大versionを表しているとのこと。勉強になりました。