PyTorchでCUDAが使えない原因と対処法|torch.cuda.is_available() が False の解決手順

① 結論

結論:
torch.cuda.is_available()False になる原因の多くは、
(1)GPUドライバが正しく入っていない、または
(2)CUDA対応のPyTorchを入れていない(CPU版を入れている)ことです。
まず nvidia-smi でGPUがOSから見えているか確認し、
次にPyTorchがCUDA対応ビルドかを確認して、対応版PyTorchを再インストールすれば解決します。

「GPUはあるのにPyTorchだけ見えない」場合はPyTorch(CUDA対応版)の問題が多く、
「そもそもnvidia-smiが出ない」場合はドライバ/環境側の問題が濃厚です。

② 起きている症状

  • pythontorch.cuda.is_available() を実行すると False
  • 学習がCPUで走り、GPUが使われない
  • RuntimeError: CUDA errorCUDA driver not found が出ることがある
  • 別環境(別PC)ではGPUが使えるが、今回の環境では使えない

③ よくある原因(優先度順)

原因①:GPUドライバがOSに正しく認識されていない

【詳細】
PyTorchがCUDAを使う前提として、OSがGPUとドライバを正常に認識している必要があります。
ドライバが未導入・古い・破損していると、PyTorch以前にCUDAが利用できません。
特にWindows/WSL環境では、Windows側のNVIDIAドライバが正しく入っていないと、WSLからGPUが見えません。

起きやすい条件:
・PC初期セットアップ直後
・GPUドライバ更新に失敗した/長期間更新していない
・WSLを使い始めたばかり(WSL用GPU環境が未整備)

判断ポイント:
以下を実行し、GPU情報が表示されない(またはコマンド自体が見つからない)場合は、この原因に該当します。

nvidia-smi

原因②:CUDA対応のPyTorchを入れていない(CPU版PyTorch)

【詳細】
PyTorchにはCPU版とCUDA版があり、CPU版を入れているとGPUが存在していても
torch.cuda.is_available()False になります。
また、pipで何も考えずに pip install torch を実行すると、
環境やタイミングによってはCPU版が入ることがあります。

起きやすい条件:
・初回インストール時に公式のCUDA対応手順を見ていない
・requirements.txtにtorchだけが書かれていてCUDA版指定がない
・仮想環境を作り直した直後に再インストールした

判断ポイント:
以下を実行し、PyTorchがCUDA対応ビルドかを確認します。
torch.version.cudaNone の場合、CUDA非対応(CPU版)の可能性が高いです。

python -c "import torch; print(torch.__version__); print(torch.version.cuda); print(torch.cuda.is_available())"

原因③:CUDA(PyTorch)と環境(ドライバ/WSL)の組み合わせが不一致

【詳細】
CUDAは「PyTorchが想定するCUDAバージョン」と「環境側のドライバ」が噛み合わないと動作しません。
たとえば、PyTorchが特定のCUDAランタイム前提で配布されているのに、
ドライバが古いとGPUが使えない(または実行時エラー)になります。
またWSLの場合、Windows側のドライバがWSL対応であることが前提です。

起きやすい条件:
・GPUドライバが古いまま
・PyTorchを別のCUDAバージョン向けで入れている
・WSL/Windows Updateの後に急に動かなくなった

判断ポイント:
nvidia-smi は表示されるのに、PyTorchが False のままの場合、
この原因(②または③)が濃厚です。
また、実行時に CUDA initialization error などが出る場合もここに該当します。

④ 切り分け手順(上から順に実行)

手順1:OSがGPUを認識しているか確認(最重要)

nvidia-smi

ここでGPUが表示されない場合、PyTorch以前の問題です(原因①)。
まずドライバ側を解決してください。

手順2:PyTorchがCUDA対応か確認

python -c "import torch; print(torch.version.cuda); print(torch.cuda.is_available())"

torch.version.cudaNone ならCPU版の可能性が高いです(原因②)。

手順3:PyTorchのインストール状況を確認

python -m pip show torch

仮想環境を使っている場合は、必ずactivateした状態で実行してください。

⑤ 具体的な解決方法

解決策①:CUDA対応のPyTorchを入れ直す(最短で効く)

まず現在のtorchをアンインストールし、CUDA対応版を入れ直します。

python -m pip uninstall -y torch torchvision torchaudio

次に、CUDA対応版をインストールします(例:cu118)。
※ 環境により最適なCUDA版は変わるため、インストール後に必ず動作確認します。

python -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

解決策②:動作確認(ここまでで直っているか確認)

python -c "import torch; print(torch.version.cuda); print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0) if torch.cuda.is_available() else 'no gpu')"

解決策③:仮想環境を作り直してクリーンにする

依存関係の衝突が疑われる場合は、venvを作り直すのが最短です。

python3 -m venv venv
source venv/bin/activate
python -m pip install --upgrade pip
python -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

⑥ 再発防止チェックリスト

  • torchは「CUDA対応版」を入れる(CPU版を避ける)
  • nvidia-smi でOS側のGPU認識を先に確認する(切り分けの基本)
  • 仮想環境(venv)を使って依存関係を分離する(衝突防止)
  • requirements.txtにtorchの導入方法を明記する(再構築を最短化)

⑦ それでも解決しない場合の次の一手

  • CUDA関連のエラー全文で再検索(エラー種別で対処が変わる)
  • まずCPUで動作確認し、問題がCUDAだけかを切り分ける
python -c "import torch; x=torch.randn(1); print(x)"
  • 最終手段:新しいvenvで最小コード(torch import→is_available)だけ試し、プロジェクト固有の衝突か確認する

コメント

タイトルとURLをコピーしました