オンプレのGPUクラスターにBTOサーバーを増設する機会があったので、その際に出くわしたトラブルとその解決方法を備忘録的に書き留めておく。実際の作業はansibleを介して行っていたりするが、簡単のためにansible部分はシェルでの操作に書きなおしている。
サーバーのスペック
|||
| ---- | ---- | ---- |
| マザーボード | PRIME X299-A II |
| CPU | Intel(R) Core(TM) i9-9820X CPU @ 3.30GHz |
| GPU | RTX 2080 SUPER × 2 |
作業ログ
Bootable USBからUbuntu18.04をインストール。
UEFIセキュアブートによってnvidia-driverが弾かれていたため、BIOSからセキュアブートを無効化(BootタブのOS TypeをWindows UEFI modeの指定からOther OSの指定に変更)。
セキュアブートが無効になっていることを確認。
$ dmesg | grep Secure
[ 0.000000] secureboot: Secure boot disabled
同じ構成で作った自作PCでははじめからセキュアブートが切られていたので、この作業はおそらく購入元の設定による。
nvidia-smi
を実行したところ、ドライバーからGPUが見えていない。
$ nvidia-smi
No devices were found
マザーボードがGPUを認識しているか確認。
$ sudo update-pciids # PCI ID リストの新しいバージョンをダウンロード
$ lspci | grep -i nvidia
17:00.0 VGA compatible controller: NVIDIA Corporation TU104 [GeForce RTX 2080 SUPER] (rev a1)
...
65:00.0 VGA compatible controller: NVIDIA Corporation TU104 [GeForce RTX 2080 SUPER] (rev a1)
認識している。
nvidia-driverのバージョンを確認。
$ cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module 410.48 Thu Sep 6 06:36:33 CDT 2018
GCC version: gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)
410が入っている。公式によれば410はRTX2080をサポートしている(https://www.nvidia.com/Download/driverResults.aspx/140135/en-us )はずだけど、念の為ドライバを新しいものに入れなおす。
410をアンインストール後、450を代わりにインストールして再起動。
$ sudo apt purge nvidia-*
$ sudo add-apt-repository ppa:graphics-drivers/ppa
$ sudo apt install nvidia-driver-450
$ sudo reboot
ドライバーからのGPUの認識を確認。
$ nvidia-smi
Fri Sep 11 04:35:14 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.66 Driver Version: 450.66 CUDA Version: 11.0 |
|-------------------------------+----------------------+----------------------+
| 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 GeForce RTX 208... Off | 00000000:17:00.0 Off | N/A |
| 23% 42C P0 43W / 250W | 0MiB / 7982MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
| 1 GeForce RTX 208... Off | 00000000:65:00.0 Off | N/A |
| 24% 45C P0 31W / 250W | 0MiB / 7979MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
クラスターの他のノードとの兼ね合いでCUDA 10をインストール。
公式からdebファイルを入手。
https://developer.nvidia.com/cuda-10.0-download-archive?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1804&target_type=deblocal
$ sudo dpkg -i cuda-repo-ubuntu1804-10-0-local-10.0.130-410.48_1.0-1_amd64.deb
$ sudo apt-key add /var/cuda-repo-<version>/7fa2af80.pub
$ sudo apt update
$ sudo apt install cuda
しかし、再度nvidia-smi
を実行すると再びGPUが行方不明になっている。
$ nvidia-smi
No devices were found
nvidia-driverのバージョンを確認したところ、410に戻っている。
$ cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module 410.104 Tue Feb 5 22:58:30 CST 2019
GCC version: gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)
どうも、公式の提供しているCUDAのdebファイルはnvidia-driverを一緒にインストールしてくるらしい。よく見るとcuda-repo-ubuntu1804-10-0-local-10.0.130-410.48_1.0-1_amd64.deb
の名前に410が入っているので、ここが入れてくるドライバーのバージョンに相当していそう。
440のドライバーに対応するdebがローカルにあったので、それを使って再度CUDAをインストール。
$ sudo apt purge cuda-*
$ sudo apt purge nvidia-*
$ sudo apt autoremove # これが無いと新しく入るnvidia-driverの依存関係が解決できない
$ sudo dpkg -i cuda-repo-ubuntu1804-10-2-local-10.2.89-440.33.01_1.0-1_amd64.deb
$ sudo apt install cuda
cuda-10.2が/usr/local
以下に入っていることを確認。
$ ls /usr/local | grep cuda
cuda
cuda-10.2
pathは通っていないが、クラスターの構成上問題ないので完了。