実行プログラムと拡張機能

NVIDIA GPUがあるのにPyTorchがCPUで動くように見えるとき

GPUが見えているのにPyTorchがCPUで動くなら、同じ環境で一つずつ確認しましょう。

NVIDIA GPU1が見えているのに応答が遅い場合は、まずモデルを実行したのと同じターミナルやノートブックでnvidia-smiを実行し、ドライバーがGPUを認識しているか確認します。次に同じ環境で、以下の読み取り専用Python診断を実行し、PyTorch2がGPUを使えるか調べます。この診断はモデルを実行せず、ファイルも変更しません。CUDA3が利用可能と表示されても、モデルが実際にGPUで計算している証明にはならないため、最後にモデル設定とアプリログを確認してください。nvidia-smi、torch.version.cuda、nvcc --versionはそれぞれ異なる情報を示します。

実行条件と要点
  • nvidia-smiはドライバーとGPU認識を、nvcc --versionは開発Toolkitのコンパイラ版を示します。
  • torch.version.cudaは読み込んだPyTorchビルドのCUDA版を、torch.cuda.is_available()は現在のプロセスでの利用可否を確認します。
  • CUDA利用可能でもモデル全体がGPUで動くとは限りません。モデルのデバイス、アプリログ、VRAMの余裕を確認してください。

GPUが見えてもPyTorchはCPUで動くことがあります

IDEのノートブックで文書要約モデルを実行すると応答が遅く、CPU4使用率だけ高いとします。同じノートブックからnvidia-smiを実行するとNVIDIA GPUが表示されます。システムモニターだけで原因を決めず、ドライバーがGPUを認識しているか、ノートブックがどのPyTorchを読み込んだか、モデルがどのデバイスで計算しているかを順に確認します。

ターミナルとIDEで異なるPythonを使っていることがあります。たとえばターミナルからGPUが見えても、ノートブックはCPU版PyTorchを読み込む場合があります。nvccが入っていることだけでは、IDEが同じ環境を使っている証拠になりません。以下の確認はモデルを実行したノートブック内で行います。

最初にドライバーからGPUが見えるか確認する

ターミナルでnvidia-smiを実行します。NVIDIAドライバーがGPUを検出しているか、ドライバー版、認識中のGPUやメモリー情報を表示します。コマンドがない、またはデバイスが見つからない場合は、PyTorchパッケージを変える前にOSとドライバーを調べます。Windows上のWSL2ではWindowsホストがCUDA GPUドライバーを提供します。NVIDIAの案内に従い、WSL内にLinux用NVIDIAドライバーをインストールしないでください。

出力にあるCUDA Versionを、インストール済みToolkitの版として読まないでください。これはドライバーが対応するCUDA水準の情報です。開発Toolkitのコンパイラーはnvcc --versionで確認します。nvccがなくてもGPU実行が不可能とは限りません。PyTorchの事前ビルドパッケージにCUDAランタイム5構成要素が含まれる場合がありますが、ドライバーとの互換性は必要です。

GPUワークステーションの横にドライバー、ソフトウェア、コンパイラーToolkitを表す別々の物が置かれている
ドライバー、フレームワークランタイム、開発ToolkitはCUDA環境の異なる部分を示します。

失敗したのと同じPythonから診断する

次のコードをモデルが失敗したのと同じターミナルまたはノートブックで実行します。Python実行ファイル、PyTorchビルド、現在のプロセスでのCUDA利用可否を表示します。テンソル作成やモデル計算を行わず、ファイルも変更しない読み取り専用診断です。

出力のPythonパスがモデルを実行した環境を指しているか、最初に確認します。別の仮想環境6ならIDEのインタープリターを直して診断を再実行してください。PyTorch CUDA buildがNoneなら、読み込んだPyTorchはCUDAビルドではない可能性が高いです。torch.version.cudaはこのPyTorchビルドのCUDA版を、torch.cuda.is_available()はこのPythonプロセスでCUDAが使えるかを示します。

nvidia-smiのCUDA対応水準とPyTorchビルド版は異なっていてもかまいません。CUDA 11以降は最低ドライバー要件を満たせば、同じメジャー系列内で一部機能制限付きのマイナー版互換性が提供されます。ただし新機能、GPUアーキテクチャ、PTXコンパイル、ライブラリの組み合わせには別の条件がある場合があります。診断がFalseを返す、またはエラーがドライバーを示す場合に、PyTorchのインストール案内とNVIDIA互換性表でその組み合わせを確認してください。

CUDA利用可否を調べる読み取り専用の診断
import sys
import torch

print("Python:", sys.executable)
print("PyTorch:", torch.__version__)
print("PyTorch CUDA build:", torch.version.cuda)
print("CUDA available:", torch.cuda.is_available())

if torch.cuda.is_available():
    print("GPU:", torch.cuda.get_device_name(0))
    print("Device count:", torch.cuda.device_count())
モデル計算は開始しません。失敗したのと同じPython環境で実行してください。
空のデバイスカード、GPU、開発Toolkitケースが同じ作業机に並ぶ
フレームワークやコンパイラーを調べる前に、ドライバーがGPUを認識するか確認します。

モデルのパラメーターがどのデバイスにあるか確認する

CUDA available: TrueとGPU名は、このPythonプロセスがCUDAデバイスを見つけたという結果です。次にモデルのパラメーターがどのデバイスにあるか確認します。単一デバイスのモデルならnext(model.parameters()).deviceで確認できます。コードがCPUを指定していたり、モデルとテンソルのデバイスが異なったりするとCPUで処理される場合があります。PyTorchの標準nn.Moduleに共通の.device属性はないため、分散配置モデルでは最初のパラメーターだけで判断せず、アプリログと分散設定を確認してください。

同じ文書要約を実行し、アプリログでGPUが選ばれたか、エラーやCPUへの切り替えが記録されたか確認します。短い要求ではシステムモニターのGPU使用率が低く出ることがあります。VRAM7使用量はモデルが読み込まれた手掛かりにすぎず、計算中の証明ではありません。パラメーターのデバイスとアプリログを合わせて確認してください。

PyTorchのROCm8ビルドもtorch.cuda.*名前空間のAPI9を互換インターフェースとして使います。AMD GPUかどうかはtorch.version.hip10と現在のPyTorch/ROCmインストール案内で確認します。CUDA専用ライブラリやカスタム演算は別のビルドでは動かないことがあります。フレームワークのデバイス認識とプロジェクト機能すべての対応は別問題です。

文字のないモニターと無印のGPUがあるローカルAIの作業環境
GPUが見え、フレームワーク診断が成功しても、アプリのログで実際の実行デバイスを確認してください。

結果に合わせてひとつだけ変更する

nvidia-smiがデバイスを認識しない場合は、カードがシステムに接続されているか、OSドライバーがGPUとOSに対応しているかを確認します。Windowsホスト上のWSL2ではホストドライバーとゲスト環境の両方を確認します。解決前にPyTorchを何度も変更すると新たなエラーが重なり、元の原因を見失いやすくなります。

GPUとドライバーは見えるのにtorch.cuda.is_available()がFalseなら、失敗したプロセスのPythonパスとPyTorchビルドを確認します。プロジェクトの要求バージョンとCUDAプラットフォームを調べ、PyTorch公式選択ツールでOS、パッケージ管理ツール、Python、計算プラットフォームを選び、現在の環境に合うコマンドを取得します。プロジェクトの仮想環境内で手順を適用し、同じコードを再実行します。古いCUDA wheel URLやグローバルパッケージの一括削除に頼らないでください。

CUDAがTrueでもモデルがCPUに留まるなら、フレームワークの再インストールを繰り返さず、モデルとアプリのデバイス設定を確認します。アプリにCUDAバックエンドが含まれるか、GPUオフロード11が有効か、モデルとコンテキストが実行余裕を含めてVRAMに収まるかを調べます。VRAMが足りないと一部処理がCPUへ移るか、実行に失敗することがあります。具体的な対応やオプション名はアプリやモデルリポジトリの最新案内に従ってください。

同じ要約を再実行し、失敗が続く場合は値を記録する

ドライバーまたはPyTorchの設定を1つ変えたら、同じIDEノートブックで同じ文書を再要約します。アプリログでGPUとバックエンドが選ばれたか、処理中にエラーが出たか確認してください。問題が解決したらその設定を使います。同じ失敗が続く場合に限り、次の診断情報をまとめて相談します。

共有する値は、GPUモデルとOS、nvidia-smiのドライバー版・CUDA表示、失敗したノートブックのPythonパス、PyTorch版、torch.version.cuda、is_available()の結果、アプリで選択されたデバイスとエラーメッセージです。Pythonパスに個人ディレクトリ名があれば伏せてください。環境変数全体や別のPythonセッションで成功した記録は、このエラーの説明には必要ありません。

用語の注釈

  1. GPU — 多くの計算を並列に処理するプロセッサーです。AIモデルの実行ではモデル計算を担います。

    本文に戻る
  2. PyTorch — AIモデルを作成・実行するソフトウェアフレームワークです。モデルと合わせて、対応するPyTorchの版やハードウェアも確認します。

    本文に戻る
  3. CUDA — NVIDIA GPUで汎用計算を行うソフトウェア基盤です。CUDA向けのプログラムが他のGPUでそのまま動くとは限りません。

    本文に戻る
  4. CPU — コンピューターで汎用のプログラム命令を実行する中央処理装置です。AI処理ではGPUなど他のプロセッサーと役割を分けることがあります。

    本文に戻る
  5. ランタイム — プログラムの実行時に必要な機能を提供するソフトウェア環境です。ローカルAIではモデル実行エンジンを指すこともあり、GPUランタイムライブラリと完成したサービングアプリは別の構成要素です。

    本文に戻る
  6. Python仮想環境 — プロジェクトごとにPythonパッケージを分けて導入する環境です。版の衝突を減らすもので、仮想マシンとは異なります。

    本文に戻る
  7. VRAM — グラフィックカードのGPUが使うメモリです。モデルの重みや計算途中の値を置き、システムRAMとは区別されます。

    本文に戻る
  8. ROCm — AMD GPUでAIや高性能計算を実行するソフトウェア基盤です。対応状況はGPUだけでなく、OS・ドライバー・フレームワークの版の組み合わせで確認します。

    本文に戻る
  9. API — 別のコードからプログラムの機能を呼び出すための決められたインターフェースです。APIという言葉だけで外部サーバーへの送信を意味するわけではありません。

    本文に戻る
  10. HIP — GPU向けC++コードの移植に使うAPIと実行環境です。CUDAコードの移植を支援しますが、すべてのライブラリや演算の互換性、同等の速度を保証するものではありません。

    本文に戻る
  11. オフロード — 容量が足りないとき、モデルデータの一部をGPUメモリからシステムRAMやストレージへ移して処理する方法です。データ転送が追加されます。

    本文に戻る