問題の概要:CUDA対応GPUの計算能力(Compute Capability)がわからない
CUDAを利用したAI開発、特に深層学習フレームワーク(PyTorch, TensorFlowなど)の環境構築や、CUDA Toolkitのインストール、カスタムCUDAカーネルのコンパイル時に、以下のようなエラーに遭遇することがあります。
ERROR: This PyTorch installation was not built with support for your compute capability (sm_30).
Please check the PyTorch documentation for supported compute capabilities.
nvcc fatal : Unsupported gpu architecture 'compute_86'
これらのエラーは、使用しているGPUの「計算能力(Compute Capability)」と、インストールしようとしているソフトウェアやコンパイル時に指定したアーキテクチャが一致していないために発生します。計算能力は、GPUの世代やモデルによって決まるハードウェアの機能セットを表すバージョン番号(例: 7.5, 8.6, 9.0)です。この値を正確に把握することは、CUDA環境を正しく構築するための第一歩となります。
原因の解説:なぜ計算能力の確認が必要なのか?
計算能力(Compute Capability、略してCC)は、NVIDIA GPUがサポートする機能(命令セット、メモリ構成、コア数など)を定義するバージョンです。新しい計算能力ほど、より高度な最適化や機能(例えばTensor Core)を利用できます。
CUDA Toolkitや深層学習フレームワークは、特定の計算能力範囲のGPU向けにビルド(プリコンパイル)されて配布されています。また、CUDAコードをソースからコンパイル(nvccコマンド使用)する際には、ターゲットとするGPUの計算能力を明示的に指定する必要があります。この指定が間違っている、または自分のGPUの能力を超えていると、上記のようなエラーが発生し、プログラムの実行やコンパイルが失敗します。
したがって、環境構築前やエラー発生時に、自身のGPUの正確な計算能力を確認する作業が不可欠です。
解決方法:計算能力を確認する3つの実用的な方法
ここでは、Windows、Linux、macOS(NVIDIA GPU搭載機種に限る)で共通して利用可能な方法をステップバイステップで紹介します。
方法1:NVIDIA公式ツール「nvidia-smi」と「nvcc」を使用する(最も確実)
NVIDIAドライバーとCUDA Toolkitがインストールされている環境であれば、これが最も標準的な方法です。
ステップ1: GPUモデル名を確認する
ターミナル(コマンドプロンプト)を開き、以下のコマンドを実行します。
nvidia-smi -L
出力例:
GPU 0: NVIDIA GeForce RTX 3080 (UUID: GPU-xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
これでGPUモデル(この例では「GeForce RTX 3080」)が確認できます。
ステップ2: 計算能力を調べる
確認したGPUモデル名をもとに、NVIDIAの公式ドキュメント「CUDA GPUs」の一覧表で検索します。表の「Compute Capability」列に値が記載されています。RTX 3080の場合は「8.6」です。
方法2:CUDAサンプルプログラム「deviceQuery」を実行する(詳細情報取得)
CUDA Toolkitをインストールすると付属するサンプルプログラムを使用すると、より詳細なGPU情報を直接取得できます。
ステップ1: サンプルコードのビルド
CUDAサンプルがインストールされているディレクトリに移動し、deviceQueryをビルドします。パスは環境によって異なります。
# Linux/Windows (WSL) の例
cd /usr/local/cuda/samples/1_Utilities/deviceQuery
sudo make
# Windows (Visual Studio) の例
# 通常は C:ProgramDataNVIDIA CorporationCUDA SamplesvXX.X 以下にあります。
# Visual Studioで対応するソリューションファイル(.sln)を開き、ビルドします。
ステップ2: プログラムの実行
ビルドが成功したら、生成された実行ファイルを実行します。
./deviceQuery # Linux/WSL
deviceQuery.exe # Windows コマンドプロンプト
出力の最後の方に、以下のような行が見つかります。
CUDA Capability Major/Minor version number: 8.6
これが計算能力です。「Major/Minor」を合わせて「8.6」と読みます。
方法3:Pythonスクリプトを使用する(開発環境で手軽に確認)
PyTorchやTensorFlowがインストールされたPython環境がある場合、数行のコードで確認可能です。特に、リモートサーバーやクラウドインスタンス(Google Colab含む)で手軽に確認したい時に便利です。
ステップ1: PyTorchを利用する方法
以下のPythonスクリプトを実行します。
import torch
if torch.cuda.is_available():
gpu_name = torch.cuda.get_device_name(0)
cc_major = torch.cuda.get_device_capability(0)[0]
cc_minor = torch.cuda.get_device_capability(0)[1]
print(f"GPU名: {gpu_name}")
print(f"計算能力: {cc_major}.{cc_minor}")
else:
print("CUDA非対応GPUまたはドライバーがインストールされていません。")
ステップ2: NVIDIA提供のPythonバインディング「pycuda」や「pynvml」を利用する方法
より低レベルな情報を得たい場合には、以下のようにpynvmlライブラリを使用します(事前にpip install pynvmlが必要)。
from pynvml import *
nvmlInit()
handle = nvmlDeviceGetHandleByIndex(0)
device_name = nvmlDeviceGetName(handle)
# 計算能力は直接取得できないため、device_nameから方法1と同様に公式表で照会が必要です。
print(f"GPU名: {device_name.decode('utf-8')}")
nvmlShutdown()
コード例・コマンド例:よくあるエラーとその対処法
エラーシナリオ1:PyTorchインストール時の互換性エラー
エラーメッセージ:
RuntimeError: CUDA error: no kernel image is available for execution on the device
原因と解決策:
インストールしたPyTorchのバイナリが、あなたのGPUの計算能力をサポートしていません。PyTorch公式サイトのインストールコマンド生成ページで、正しいCUDAバージョンと計算能力に対応したバージョンを選択し直してください。例えば、計算能力7.5(GTX 16シリーズ等)のGPUに、デフォルトのCUDA 11.8版PyTorchをインストールするとこのエラーが発生する可能性があります。CUDA 11.7や11.6のビルドを試してみましょう。
エラーシナリオ2:CUDAコードコンパイル時のアーキテクチャ指定エラー
エラーメッセージ:
nvcc fatal : Unsupported gpu architecture 'compute_90'
原因と解決策:
使用しているnvcc(CUDAコンパイラ)のバージョンが、指定した計算能力(この例では9.0)をサポートしていません。コンパイルコマンドのアーキテクチャ指定フラグ(-arch=compute_XXや-gencode)を、自分のGPUの正しい計算能力と、nvccがサポートするバージョンに合わせて修正します。
# コンパイルコマンド例 (RTX 3080, 計算能力8.6 の場合)
# 間違った例(CUDA Toolkit 11.x で compute_90 は未サポートの可能性が高い)
# nvcc -arch=compute_90 -code=sm_90 my_kernel.cu -o my_kernel
# 正しい例
nvcc -arch=compute_86 -code=sm_86 my_kernel.cu -o my_kernel
自分のnvccのバージョンはnvcc --versionで確認できます。
まとめ・補足情報
GPUの計算能力(Compute Capability)の確認は、CUDAを利用するAI開発の基盤となる作業です。主要な確認方法をまとめると以下の通りです。
- 基本:
nvidia-smi -LでGPUモデルを調べ、NVIDIA公式サイトの表で計算能力を確認する。 - 詳細: CUDA Toolkit付属の
deviceQueryサンプルを実行する。 - 手軽: PyTorchの
torch.cuda.get_device_capability()関数をPythonスクリプトで呼び出す。
重要な補足点:
- ノートPCなどに搭載される「Max-Q」デザインのGPUも、同じモデル名であれば計算能力は通常版と変わりません。
- クラウドサービス(AWS G4/G5インスタンス、Google ColabのGPUなど)では、提供されるGPUの種類と計算能力が事前に決まっているので、各サービスのドキュメントを参照するのも有効です。
- 計算能力は「SMバージョン」と呼ばれることもあります(例: SM86は計算能力8.6)。
- 複数GPU(マルチGPU)環境では、GPUごとに計算能力が異なる可能性があります。すべてのGPUの計算能力を確認し、環境構築やコンパイル時には最も低い計算能力に合わせる(後方互換性を確保する)か、またはGPUごとに異なるバイナリを生成する必要がある場合があります。
計算能力を正しく把握することで、CUDA関連の環境構築エラーの大半を未然に防ぎ、スムーズなAI開発を進めることができるでしょう。