GPU/CUDAとPyTorch周りの様々なバージョンを理解する
前置き
GPUを利用したディープラーニングの環境構築において、GPUのドライバやCUDAの諸々の設定は初学者が誰しも嵌る最初の難関と言える。私自身これまではネットの情報をあれこれ試して上手く行けばOKで済ませていたが、この辺で今一度正しく理解しておきたい。そこでこの記事を通して、GPU/CUDAとPyTorchの環境構築で遭遇する様々なバージョンの識別とその意味を理解することを目的とする。なお、細かなインストール方法やエラー対応などは本記事では扱わない。また、グラフィックボード/グラフィックカードと呼ぶべきところをGPUと表現している点もご容赦いただきたい。
[注意] この記事はGPU/CUDA素人が書いているので、細かな用語や名称の間違いが多分に含まれていると思われる。間違っていたらごめんなさい。また、事例として紹介しているバージョン番号は当然ながら時が経つにつれ古くなるので注意。
GPU/CUDA
Compute Capability
7.5
や8.6
、sm_*
と表記されるもの。これは使用するGPUのアーキテクチャに応じてサポートされる機能が決まっており、それを表すバージョン番号がCompute Capabilityである。ハードウェアのGPUにはそれぞれこの番号が付いていて、変わることはない。例えば、RTX 3090とRTX 4090では以下のようになっている。
GPU | Architecture Name | Compute Capability | SM Variation |
---|---|---|---|
GeForce RTX 3090 | Ampere | 8.6 | sm_86 |
GeForce RTX 4090 | Ada Lovelace | 8.9 | sm_89 |
現行GPUのCompute Capability対応表は、以下から確認できる。
CUDA
10.2
や11.8
などと表記されるもの。これはCUDAのバージョンを表す。バージョンごとにサポートするGPUの種類、すなわちCompute Capability (CC) の範囲が決まっている。
CUDA Version | min. CC | max. CC |
---|---|---|
CUDA 10.2 | 3.0 | 7.5 |
CUDA 11.8 | 3.5 | 11.8 |
現在インストールしているCUDAのバージョンは、nvcc
コマンドや/usr/local/cuda/version.{json, txt}
などから確認できる。
$ /usr/local/cuda/bin/nvcc --version nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2022 NVIDIA Corporation Built on Wed_Sep_21_10:33:58_PDT_2022 Cuda compilation tools, release 11.8, V11.8.89 Build cuda_11.8.r11.8/compiler.31833905_0
$ cat /usr/local/cuda/version.json
なお、CUDAの中には大きく分けてCUDA ToolkitとNVIDIA Driverが存在し、そのNVIDIA Driverの中にGPU Kernel Mode DriverとCUDA User-Mode Driverの2つが存在する。後者が次に説明するNVIDIA Driverのこと。
CUDA Compatibility :: NVIDIA Data Center GPU Driver Documentation より
NVIDIA Driver
470.57.02
や515.43.04
、もしくはR470
やR515
などと表記されるもの。これはNVIDIA Driverのバージョンを表す。先頭の数字を取ってリリース単位を意味するR515, R510, R470と表記されることもある。
Ubuntuの場合、以下のようにしてGPUに応じたDriverのバージョン一覧および推奨バージョンを取得できる。
$ sudo ubuntu-drivers devices [...] vendor : NVIDIA Corporation model : GA102 [GeForce RTX 3090] driver : nvidia-driver-470 - third-party non-free driver : nvidia-driver-515-server - distro non-free driver : nvidia-driver-515-open - distro non-free driver : nvidia-driver-520-open - distro non-free recommended driver : nvidia-driver-520 - third-party non-free driver : nvidia-driver-515 - third-party non-free driver : nvidia-driver-510-server - distro non-free driver : nvidia-driver-510 - third-party non-free driver : nvidia-driver-470-server - distro non-free driver : xserver-xorg-video-nouveau - distro free builtin
PyTorch
1.10
や1.12+cu116
などと表記されるもの。これはPyTorchのバージョンを表し、対応するCUDAのバージョンを末尾に付与する場合がある。
PyTorchをGPUで動かすにはCUDAやドライバのバージョンをあわせる必要があり、PyTorch公式ページのInstallationの「Compute Platform」の箇所で必要なCUDAのバージョンから選択できる。単純にpip install torch
のみを実行すると、2022/10現在ではCUDA 10.2対応のものがインストールされる。そのため、そもそも利用するGPU自体のCompute CapabilityがCUDA 10.2では対応できない場合には、CUDAをダウングレードしただけでは動かないということが起こり得るので注意が必要となる。
使用するGPUのCompute Capabilityを確認し、次に正しいバージョンのCUDA Toolkitを入れ、そしてそれに対応するPyTorchを入れよう。
インストールしたPyTorchが対応する各種バージョンを確認する方法は、以下の通り。
CUDA 11.6対応版の場合
In [1]: import torch In [2]: torch.__version__ Out[2]: '1.12.1+cu116' In [3]: torch.version.cuda Out[3]: '11.6' In [4]: torch.cuda.get_arch_list() Out[4]: ['sm_37', 'sm_50', 'sm_60', 'sm_70', 'sm_75', 'sm_80', 'sm_86'] In [5]: torch.cuda.get_device_capability() Out[5]: (8, 6)
CUDA 10.2対応版の場合
In [1]: import torch In [2]: torch.__version__ Out[2]: '1.12.1+cu102' In [3]: torch.version.cuda Out[3]: '10.2' In [4]: torch.cuda.get_arch_list() Out[4]: ['sm_37', 'sm_50', 'sm_60', 'sm_70'] In [5]: torch.cuda.get_device_capability() /home/yag_ays/xxx/.venv/lib/python3.9/site-packages/torch/cuda/__init__.py:146: UserWarning: NVIDIA GeForce RTX 3090 with CUDA capability sm_86 is not compatible with the current PyTorch installation. The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_70. If you want to use the NVIDIA GeForce RTX 3090 GPU with PyTorch, please check the instructions at https://pytorch.org/get-started/locally/ warnings.warn(incompatible_device_warn.format(device_name, capability, " ".join(arch_list), device_name)) Out[5]: (8, 6)
ここではtorch.cuda.get_device_capability()
を実行するとWarningが表示されているが、これは実行環境においてGPUのCompute CapabilityとインストールされているPyTorchのバージョンが合わないというもの。もちろんこのままGPUを使ったディープラーニングのコードを実行してもエラーになるだけなので、PyTorchを再インストールする必要がある。
参考
- CUDA GPUs - Compute Capability | NVIDIA Developer
- 現行世代と前世代の GeForce シリーズのグラフィックス カードの比較 - NVIDIA
- Programming Guide :: CUDA Toolkit Documentation
- CUDA Toolkit Archive | NVIDIA Developer
- CUDA - Wikipedia
- Matching CUDA arch and CUDA gencode for various NVIDIA architectures - Arnon Shimoni
- CUDA Compatibility :: NVIDIA Data Center GPU Driver Documentation
- PyTorchでGPU情報を確認(使用可能か、デバイス数など) | note.nkmk.me
- How to get the CUDA version? - Stack Overflow