【CUDA】WSL2でGPUを使うための完全ガイド:ドライバ設定とよくあるエラー解決法

問題の概要:WSL2でCUDAが使えない・GPUが認識されない

Windows Subsystem for Linux 2 (WSL2) 上で機械学習や深層学習の開発環境を構築する際、CUDAを利用してGPUアクセラレーションを行いたい場面は多々あります。しかし、WindowsホストとWSL2ゲスト間の複雑な関係から、以下のような問題に直面することがあります。

  • WSL2内で nvidia-smi コマンドを実行しても「コマンドが見つからない」または「No devices were found」と表示される
  • PyTorchやTensorFlowをインポートした際に「CUDA is not available」というエラーが発生する
  • Windows側ではGPUが正常に認識されているのに、WSL2内では全く利用できない
# よくあるエラーメッセージの例
$ nvidia-smi
Command 'nvidia-smi' not found, but can be installed with:
sudo apt install nvidia-utils-XXX

# または
$ nvidia-smi
No devices were found

# PyTorchでの典型的なエラー
>>> import torch
>>> torch.cuda.is_available()
False
>>> torch.cuda.get_device_name(0)
RuntimeError: No CUDA GPUs are available

これらの問題は、単にWSL2内にCUDAツールキットをインストールしただけでは解決せず、Windowsホスト側の適切なドライバ設定とWSL2側の連携が不可欠です。

原因の解説:WSL2におけるGPU仮想化のアーキテクチャ

WSL2でCUDAを正しく機能させるためには、その背後にあるアーキテクチャを理解する必要があります。従来のLinuxマシンや仮想マシンとは根本的に異なる点がいくつかあります。

1. GPUパススルーとドライバ分離

WSL2では、GPUハードウェアを仮想マシンのように直接パススルーするのではなく、Microsoftが開発した「GPUパーティショニング」技術を使用しています。WindowsホストのGPUドライバが、WSL2内のLinuxカーネル用に特別なユーザーモードドライバを提供します。つまり、WSL2内ではNVIDIAドライバをインストールする必要はなく、代わりにCUDAツールキットと、Windowsドライバが提供するLinuxカーネルインターフェースを利用します

2. ドライババージョンの互換性

Windows用NVIDIAドライバには、WSL2用のコンポーネントがバンドルされています。このため、古いバージョンのドライバを使用していると、WSL2側でCUDAが全く認識されないという事態が発生します。特に、CUDA 11.x以降の機能を利用する場合は、対応するバージョンのドライバが必要です。

3. WSL2のバージョンとカーネル

WSL2自体のバージョンや、使用しているLinuxカーネルが古い場合も、GPUサポートに問題が生じることがあります。Microsoftは定期的にWSL2のGPUサポートを改善しているため、最新版への更新が求められます。

解決方法:ステップバイステップでの環境構築

WSL2でCUDAを正常に動作させるための完全な手順を説明します。既に一部のステップが完了している場合は、該当部分をスキップしてください。

ステップ1:Windows側の前提条件を満たす

まず、Windowsホスト側がWSL2のGPUサポートに対応していることを確認します。

  1. Windowsのバージョン確認: Windows 10 バージョン 21H2(ビルド 19044)以上、またはWindows 11である必要があります。
  2. WSL2の有効化: 管理者権限のPowerShellで以下のコマンドを実行します。
# PowerShell (管理者として実行)
wsl --install
# 既にWSL1がインストールされている場合は、バージョン2に更新
wsl --set-default-version 2

ステップ2:NVIDIAドライバのインストール/更新

これが最も重要なステップです。Windows用のドライバを、WSL2サポートを含むバージョンに更新します。

  1. 現在のドライババージョンを確認(NVIDIAコントロールパネルまたはnvidia-smiをWindowsのコマンドプロンプトで実行)
  2. NVIDIA公式サイトから「Windows 11/10 64-bit」用のDCH版ドライバをダウンロード
  3. 「標準」ではなく「カスタム(詳細)」インストールを選択し、すべてのコンポーネント(特に「GPUドライバー」と「HDオーディオドライバー」以外も)をインストールすることを推奨
  4. インストール後、PCを再起動する
# WindowsコマンドプロンプトまたはPowerShellでドライバ情報を確認
nvidia-smi
# 出力例:
# +-----------------------------------------------------------------------------+
# | NVIDIA-SMI 515.65.01    Driver Version: 516.01       CUDA Version: 11.7     |
# |-------------------------------+----------------------+----------------------+
# ドライババージョンが470以上(推奨は510以上)であることを確認

ステップ3:WSL2内でのCUDAツールキットインストール

WSL2のUbuntuなどのディストリビューション内で、NVIDIAが提供するWSL2用のCUDAツールキットをインストールします。

# WSL2のUbuntuターミナルで実行
# 1. キーリングの設定
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600

# 2. リポジトリの追加
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/3bf863cc.pub
sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/ /"
sudo apt-get update

# 3. CUDAツールキットのインストール(例:CUDA 11.7)
sudo apt-get -y install cuda-11-7

# 4. 環境変数の設定(~/.bashrcに追加)
echo 'export PATH=/usr/local/cuda-11.7/bin${PATH:+:${PATH}}' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.7/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
source ~/.bashrc

ステップ4:動作確認

インストールが正しく完了したか、以下のコマンドで確認します。

# WSL2内で実行
# 1. nvidia-smiの実行(WSL2用のコマンドが利用可能になっているはず)
nvidia-smi

# 期待される出力例:
# +-----------------------------------------------------------------------------+
# | NVIDIA-SMI 515.65.01    Driver Version: 516.01       CUDA Version: 11.7     |
# |-------------------------------+----------------------+----------------------+
# | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
# | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
# |                               |                      |               MIG M. |
# |===============================+======================+======================|
# |   0  NVIDIA GeForce ...  On   | 00000000:01:00.0 Off |                  N/A |
# | N/A   45C    P8    10W /  N/A |      4MiB /  8192MiB |      0%      Default |

# 2. CUDAコンパイラの確認
nvcc --version

# 3. PyTorchでの確認(インストール後)
python3 -c "import torch; print(f'PyTorch version: {torch.__version__}'); print(f'CUDA available: {torch.cuda.is_available()}'); print(f'GPU name: {torch.cuda.get_device_name(0) if torch.cuda.is_available() else "N/A"}')"

よくあるトラブルとその解決策

ケース1: 「nvidia-smi: command not found」が表示される

原因: WSL2内にnvidia-smiコマンドがインストールされていない、またはWindowsドライバがWSL2サポートに対応していない。

解決策:

# まずWindowsホスト側のドライバがWSL2対応か確認(ステップ2を再確認)
# WSL2内でCUDAツールキットを再インストール
sudo apt-get install --reinstall cuda-11-7 nvidia-utils-515-server

ケース2: 「No devices were found」と表示される

原因: WindowsドライバとWSL2間の通信に問題がある、またはWSL2インスタンスが古い状態で起動している。

解決策:

# WSL2インスタンスをシャットダウンして再起動
wsl --shutdown
# その後、Ubuntuターミナルを再度起動

# それでもダメな場合、Windows側でドライバをクリーンインストール
# 1. DDU (Display Driver Uninstaller) などで既存ドライバを完全削除
# 2. 最新のDCH版ドライバを再インストール

ケース3: PyTorch/TensorFlowがCUDAを認識しない

原因: フレームワークのバージョンとCUDAバージョンの互換性がない、または仮想環境内でシステムのCUDAが見えていない。

解決策:

# PyTorchの場合、正しいバージョンをインストール(CUDA 11.7の例)
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117

# 環境変数を明示的に設定
export CUDA_HOME=/usr/local/cuda-11.7
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH

# 仮想環境を使用している場合、仮想環境内でも上記環境変数を設定する必要がある

まとめ・補足情報

WSL2でCUDAを利用する際の最大のポイントは、「Windowsホスト側に適切なドライバをインストールし、WSL2内にはCUDAツールキットのみをインストールする」という分業構造を理解することです。従来のLinux環境とは異なり、WSL2内で直接NVIDIAドライバをインストールしようとすると、かえって問題が複雑化します。

推奨環境設定のまとめ:

  • Windowsドライバ: NVIDIA DCHドライバ 515以上(最新版を推奨)
  • WSL2 CUDAツールキット: NVIDIA提供のWSL用リポジトリからインストール
  • CUDAバージョン: ドライバがサポートするバージョン(例:ドライバ515ならCUDA 11.7まで)
  • 定期的な更新: Windows、WSL2、ドライバ、CUDAツールキットを定期的に更新

パフォーマンスに関する注意点:

WSL2経由のGPUアクセスは、ネイティブLinuxと比べて若干のオーバーヘッドが存在します(通常は数%程度)。また、GPUメモリはWindowsホストとWSL2で動的に共有されますが、大量のメモリを必要とするモデルを学習させる場合は、Windows側のグラフィカルな作業を減らすことでWSL2により多くのGPUメモリを割り当てることができます。

WSL2は開発や実験環境として非常に優れており、特にWindowsメインで作業しながらLinux環境での機械学習開発を行いたい場合には強力なツールとなります。本ガイドで紹介した手順に従って設定を行うことで、スムーズにCUDAを利用したGPUアクセラレーション環境を構築できるでしょう。

この記事は役に立ちましたか?