問題の概要:WSL2でCUDAが使えない・GPUが認識されない
Windows Subsystem for Linux 2 (WSL2) 上で機械学習や深層学習の開発環境を構築する際、CUDAを利用してGPUのパワーを活用したい場面は多いでしょう。しかし、WSL2環境でCUDAをセットアップしようとすると、以下のような典型的な問題に直面することがあります。
nvidia-smiコマンドを実行しても「コマンドが見つからない」または「NVIDIAドライバが実行されていません」というエラーが発生する。- PyTorchやTensorFlowをインポートし
torch.cuda.is_available()を実行するとFalseが返され、GPUが認識されない。 - CUDA Toolkitのインストール中に、プラットフォーム非対応や依存関係のエラーが発生する。
これらの問題は、WSL2という「Windows上のLinux仮想環境」という特殊な構成ゆえに、通常のLinuxマシンやWindows自体とは異なる設定手順が必要となるために発生します。本記事では、WSL2環境でCUDAを正しく動作させるためのドライバ設定と、遭遇しがちなエラーの解決方法をステップバイステップで解説します。
原因の解説:WSL2におけるGPU利用のアーキテクチャ
WSL2でGPUを利用する仕組みを理解することが、トラブルシューティングの第一歩です。従来の仮想化環境とは異なり、WSL2では以下のようなアーキテクチャを採用しています。
1. GPUパススルーと「WSL2用ドライバ」の必要性
WSL2内のLinuxカーネルは、GPUを直接制御しません。代わりに、Windows側にインストールされた「WSL2用の特別なNVIDIAドライバ」が仲介役となります。このドライバは、WSL2内のCUDAライブラリからの呼び出しを受け取り、Windowsの標準ドライバを通じて物理GPUにアクセスします。したがって、WSL2内に通常のLinux用ドライバをインストールしても動作せず、必ずWindows側に正しいドライバをインストールする必要があります。
2. CUDA Toolkitのバージョン互換性
Windows側のドライババージョンと、WSL2内にインストールするCUDA Toolkitのバージョンには互換性があります。互換性のないバージョンを組み合わせると、ライブラリのロードに失敗します。NVIDIAの公式ドキュメントで確認できる「CUDA Toolkitとドライバの対応表」が、WSL2環境でも適用されます。
3. WSL2のカーネルバージョンと仮想化プラットフォーム
WSL2は仮想化技術を利用しています。一部の古いCPUや、Windowsの仮想化機能(Hyper-V、Windowsサブシステムfor Linux)が無効になっている場合、そもそもWSL2自体が正常に動作せず、GPUアクセスの前提が崩れてしまいます。
解決方法:ステップバイステップ設定手順
ここからは、WSL2環境でCUDAを利用可能にするための具体的な手順を説明します。
ステップ1: Windows側の前提条件を満たす
まず、Windows本体の設定を確認・更新します。
- Windows 10 バージョン 21H2 以降、または Windows 11 を使用していることを確認:これらはWSL2 GPUサポートに必要なバージョンです。
- 「Windows Subsystem for Linux」と「仮想マシンプラットフォーム」機能を有効化:管理者権限でPowerShellを起動し、以下のコマンドを実行します。
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart実行後、PCを再起動します。
- WSL2をデフォルトバージョンに設定:再起動後、PowerShellで以下を実行。
wsl --set-default-version 2
ステップ2: Windows用「WSL2対応」NVIDIAドライバをインストール
これが最も重要なステップです。通常のゲーム用やクリエイター向けドライバではなく、CUDA on WSL ドライバをインストールする必要があります。
- NVIDIAドライバダウンロードページ (https://www.nvidia.com/Download/index.aspx) にアクセス。
- ご自身のGPU製品シリーズ、製品タイプなどを選択します。
- 「製品」の選択で、検索結果から「NVIDIA CUDA on WSL Driver」という名称のドライバを探してダウンロード・インストールします。 見つからない場合は、「GeForce Game Ready ドライバ」など通常のドライバの最新版もWSL2サポートを含んでいる場合が多いですが、リリースノートで「WSL」のサポートを確認してください。
- インストール後、Windowsを再起動します。
ステップ3: WSL2ディストリビューションのインストールと更新
Microsoft StoreからUbuntuなどのディストリビューションをインストールします。インストール後、WSL2内のパッケージを最新に更新します。
sudo apt update && sudo apt upgrade -y
ステップ4: WSL2内にCUDA Toolkitをインストール
NVIDIAが提供するWSL2用のリポジトリからCUDA Toolkitをインストールします。以下のコマンドは、CUDA 12.xをインストールする例です。バージョンは必要に応じて変更してください。
# キーリングとリポジトリの設定
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt update
# CUDA Toolkitのインストール (メタパッケージを使用)
sudo apt install -y cuda-toolkit-12-6
# 環境変数をシェルの設定ファイルに追加
echo 'export PATH=/usr/local/cuda-12.6/bin${PATH:+:${PATH}}' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.6/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
source ~/.bashrc
インストールが完了したら、WSL2のターミナルを一度閉じて再度開き、設定を反映させます。
ステップ5: 動作確認
以下のコマンドを実行し、GPUが正しく認識されているか確認します。
# 1. nvidia-smiの実行 (Windowsドライバ経由で情報を取得)
nvidia-smi
# 2. PyTorchでの確認 (PyTorchをインストール後)
python3 -c "import torch; print(f'PyTorch CUDA available: {torch.cuda.is_available()}'); print(f'GPU Device: {torch.cuda.get_device_name(0) if torch.cuda.is_available() else "None"}')"
# 3. CUDAサンプルコードのコンパイルと実行 (オプション)
cd /usr/local/cuda-12.6/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery
nvidia-smiがGPUの情報を表示し、PyTorchがTrueを返せば成功です。
よくあるエラーと解決策
エラー1: 「NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver」
原因: Windows側のドライバがWSL2非対応、またはドライバ自体が正常に動作していない。
解決策:
- ステップ2を確認し、確実に「CUDA on WSL Driver」またはWSLサポート明記のドライバをインストールする。
- Windowsの「デバイスマネージャー」でGPUに警告マークがないか確認する。
- Windows側でDDU (Display Driver Uninstaller) などのツールを使用してドライバを完全アンインストールした後、再インストールする。
エラー2: 「libcuda.so.1: cannot open shared object file: No such file or directory」
原因: WSL2内のCUDAライブラリのパスが通っていない、またはCUDA Toolkitのインストールが不完全。
解決策:
# 1. シンボリックリンクの存在を確認
ls -la /usr/lib/wsl/lib/libcuda.so*
# 2. ライブラリパスを明示的に追加 (一時的)
export LD_LIBRARY_PATH=/usr/lib/wsl/lib:$LD_LIBRARY_PATH
# 3. 恒久的に設定するには、~/.bashrcに上記のexport文を追加
# 4. CUDA Toolkitの再インストールを試す
sudo apt --reinstall install cuda-toolkit-12-6
エラー3: PyTorchで「CUDA unavailable」となる
原因: PyTorchのバージョンとインストールしたCUDA Toolkitのバージョンが不一致。
解決策: PyTorch公式サイト (https://pytorch.org/get-started/locally/) のインストールコマンドジェネレーターで、「OS: Linux」、「Package: pip」、「CUDA: 自分の環境に合わせたバージョン(例: 12.1)」を選択し、表示されるpip installコマンドを実行します。
# 例: CUDA 12.1用のPyTorchをインストール
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
まとめ・補足情報
WSL2でCUDAを動作させるコアは、「Windows側に専用ドライバを入れ、WSL2内には対応するCUDA Toolkitを入れる」という二段構えのセットアップにあります。通常のLinux環境とは異なるため混乱しがちですが、一度正しく設定できれば、Windowsの利便性を保ちながらLinux環境でGPUをフル活用したAI開発が可能になります。
補足ポイント:
- WSL2のメモリ/GPU割り当て:
%UserProfile%.wslconfigファイルを作成し、メモリやGPUの使用上限を設定できます。大規模モデルを扱う場合に有用です。[wsl2] memory=16GB # メモリ制限 processors=4 # CPUコア数 localhostForwarding=true # GPUの割り当て(Windows 11 Build 22000以降) [experimental] autoMemoryReclaim=gradual # メモリ自動解放 - 複数GPU環境: WSL2は現状、1つのGPUしか直接利用できません。複数GPUを切り替えて使いたい場合は、
wsl --shutdownでWSL2を完全終了させ、Windowsのデバイスマネージャーで使用したいGPU以外を無効化した後、WSL2を再起動するという回避策があります。 - パフォーマンス: ネイティブLinuxと比べて数%のオーバーヘッドはあるものの、ほとんどの開発・学習用途では実用上問題ないパフォーマンスが得られます。I/O周り(特に多数の小ファイル読み書き)がボトルネックになる場合は、プロジェクトファイルをWSL2のLinuxファイルシステム内(
\wsl$ではなく/home/配下)に置くことをお勧めします。
このガイドを参考に、WSL2環境での快適なGPU開発を始めてください。