概要
市販の中古デスクトップPCにUbuntuをインストールし、CUDA、CuPy環境をセットアップしたので書き残す。
なおネット上のいくつかの記事を参考にしながら試行錯誤したが、セットアップの途中Ubuntuにログインしても画面が真っ暗になったままになるなど最初からうまくはいかず、何度もUbuntuを再インストールするはめになった。結局、NVIDIAやCuPyの公式ドキュメントを参照しながらやることで、なんとか環境をセットアップできた。
環境
OS | Ubuntu Desktop 22.04.1 |
Graphics card | RTX 3080 |
手順
CUDAのインストール
https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html
を参照して進める。
注意点
自分が見つけたネット上の記事ではCUDAをインストールする前に、'ubuntu-drivers devices'で表示されるNVIDIA製のドライバを予めインストールしてからCUDAをインストールする方法があったりしたが、その方法は自分の環境ではうまくいかなかった。
以下の方法でCUDAをインストールすることで、NVIDIA製のドライバも結局インストールされた。
CUDAのSystem Requirementsを確認
https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#system-requirements
を見て、OSのバージョンなどが要件を満たしているか確認する。
NVIDIAのグラフィックカードが認識されているかを確認
次のコマンドでNVIDIAのグラフィックカードが表示されることを確認する。
lspci | grep -i nvidia
表示されない場合、グラフィックカードが物理的に挿さっていないなど何らかの理由でグラフィックカードがUbuntuに認識されていないので、トラブルシュート。
GCCなどのビルドに必要なバイナリ類のインストール
sudo apt install build-essential
カーネルヘッダのインストール
sudo apt install linux-headers-$(uname -r)
CUDAのインストール
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb
sudo dpkg -i cuda-keyring_1.0-1_all.deb
sudo apt update
sudo apt install cuda
sudo reboot
注意点1
- "ubuntu2204/x86_64"は自分の環境に合わせて置き換える必要あり。
- "cuda-keyring_1.0-1_all.deb"は将来変わると思われるので、https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#network-repo-installation-for-ubuntuを参照すべし。
注意点2
イマドキのUEFI(いわゆるセキュアブートのことらしい?)が有効になっているPCだと、上記のcudaのインストール時にMachine Owner Key (MOK)の入力を求められる。そこで入力したキーを、再起動時に表示される'Enroll MOK'の画面で登録すること。
Enroll MOK(MOKの登録)に関して、次のページの「2.MOKの登録」が参考になると思われる。
Ubuntu 22.04 LTSのインストール その7 - UEFIブートマネージャーの確認 〜 MOKの登録 - kledgeb
NVIDIA製のドライバの動作確認
以下のような出力が出れば成功。
$ nvidia-smi Sat Dec 10 19:20:16 2022 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 525.60.13 Driver Version: 525.60.13 CUDA Version: 12.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 NVIDIA GeForce ... On | 00000000:01:00.0 Off | N/A | | 0% 30C P8 10W / 320W | 17MiB / 10240MiB | 1% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | 0 N/A N/A 915 G /usr/lib/xorg/Xorg 9MiB | | 0 N/A N/A 1117 G /usr/bin/gnome-shell 6MiB | +-----------------------------------------------------------------------------+
ダメ押しで確認。
$ lsmod | grep -i nvidia nvidia_uvm 1363968 0 nvidia_drm 69632 3 nvidia_modeset 1208320 6 nvidia_drm nvidia 56127488 201 nvidia_uvm,nvidia_modeset drm_kms_helper 311296 1 nvidia_drm drm 622592 7 drm_kms_helper,nvidia,nvidia_drm
CUDAの動作確認
NVIDIAがCUDAの動作確認用サンプルコードを公開している。
https://github.com/NVIDIA/cuda-samples
git cloneし、ビルドする。
git clone https://github.com/NVIDIA/cuda-samples.git
cd cuda-samples/Samples/1_Utilities/deviceQuery
make
ビルドに成功すると、バイナリが生成されているのでそれを実行する。
$ ./deviceQuery ./deviceQuery Starting... CUDA Device Query (Runtime API) version (CUDART static linking) Detected 1 CUDA Capable device(s) Device 0: "NVIDIA GeForce RTX 3080" CUDA Driver Version / Runtime Version 12.0 / 12.0 CUDA Capability Major/Minor version number: 8.6 Total amount of global memory: 10009 MBytes (10495655936 bytes) (068) Multiprocessors, (128) CUDA Cores/MP: 8704 CUDA Cores GPU Max Clock rate: 1710 MHz (1.71 GHz) Memory Clock rate: 9501 Mhz Memory Bus Width: 320-bit L2 Cache Size: 5242880 bytes Maximum Texture Dimension Size (x,y,z) 1D=(131072), 2D=(131072, 65536), 3D=(16384, 16384, 16384) Maximum Layered 1D Texture Size, (num) layers 1D=(32768), 2048 layers Maximum Layered 2D Texture Size, (num) layers 2D=(32768, 32768), 2048 layers Total amount of constant memory: 65536 bytes Total amount of shared memory per block: 49152 bytes Total shared memory per multiprocessor: 102400 bytes Total number of registers available per block: 65536 Warp size: 32 Maximum number of threads per multiprocessor: 1536 Maximum number of threads per block: 1024 Max dimension size of a thread block (x,y,z): (1024, 1024, 64) Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535) Maximum memory pitch: 2147483647 bytes Texture alignment: 512 bytes Concurrent copy and kernel execution: Yes with 2 copy engine(s) Run time limit on kernels: Yes Integrated GPU sharing Host Memory: No Support host page-locked memory mapping: Yes Alignment requirement for Surfaces: Yes Device has ECC support: Disabled Device supports Unified Addressing (UVA): Yes Device supports Managed Memory: Yes Device supports Compute Preemption: Yes Supports Cooperative Kernel Launch: Yes Supports MultiDevice Co-op Kernel Launch: Yes Device PCI Domain ID / Bus ID / location ID: 0 / 1 / 0 Compute Mode: < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) > deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 12.0, CUDA Runtime Version = 12.0, NumDevs = 1 Result = PASS
最後の行に"Result = PASS"と表示されているので、成功している模様。
CuPyのインストール
https://docs.cupy.dev/en/stable/install.html
を参照して進める。
CUDAはインストール済みなのでPython関連の依存物をインストールをするが、現状必須なものはNumpyだけなのでNumpyだけをインストールすることにする。
NumPyのインストール
sudo apt install python3-pip pip install numpy
CuPyのインストール
CUDAのバージョンに合わせて、CuPyのバージョンを選択してインストールする。
python3 -m pip install -U setuptools pip pip install cupy-cuda11x
注意点
"pip install cupy"とはしないこと。自分の環境ではそれでもpipが走ったが、結局pip installの途中でエラーになった。
その他
試行錯誤していたなかで、Ubuntuのログイン画面からログイン直後、画面が真っ暗になるときがあった。電源ボタン長押し以外に為す術がないときが多かったが、Win + Lをして一度画面をロックするとログイン画面に復帰し、それ以降画面が真っ暗になることが解消されたときがあった。なぜかは不明。