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

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

Windows Subsystem for Linux 2 (WSL2) 上で機械学習や深層学習の開発環境を構築する際、CUDAを利用してGPUのパワーを活用したい場面は多々あります。しかし、WindowsとLinuxの二つの環境が絡むため、設定が複雑で、以下のようなエラーに遭遇することが頻繁にあります。

  • CUDA driver version is insufficient for CUDA runtime version
  • No CUDA-capable device is detected
  • torch.cuda.is_available()Falseを返す
  • nvidia-smiコマンドがCommand not foundまたはエラーを出力する

これらの問題は、主にWindowsホスト側のドライバとWSL2内のCUDA Toolkitのバージョン不一致、またはWSL2自体の設定不足が原因です。本記事では、WSL2上でCUDAを正しく動作させるための環境構築手順と、発生する主要なエラーの解決方法をステップバイステップで解説します。

原因の解説:なぜWSL2でCUDA設定は複雑なのか?

WSL2は、Windows 10/11上でネイティブなLinuxカーネルを動作させる仮想化環境です。CUDAをWSL2で動作させるアーキテクチャは、従来のLinuxマシンや仮想マシンとは根本的に異なります。

主要な原因1:ドライバの分離構造

WSL2でのGPU利用は「Windowsホスト側のNVIDIAドライバ」が「WSL2内のLinuxカーネル」と直接通信する特殊な構造(GPUパーティショニング)を取ります。つまり、WSL2内にNVIDIAドライバをインストールする必要はありません。必要なのは、Windows側の「WSL2対応ドライバ」と、WSL2内の「CUDA Toolkit(ランタイムと開発ライブラリ)」だけです。この分離を理解していないと、WSL2内でapt install nvidia-driverなど不要な操作を行い、環境を破壊してしまう原因となります。

主要な原因2:バージョンの厳密な互換性

Windows用NVIDIAドライバ、CUDA Toolkit for WSL、PyTorch/TensorFlowなどのフレームワーク間には、厳密なバージョン互換性が必要です。例えば、CUDA Toolkit 12.1をインストールした場合、それをサポートするバージョンのWindowsドライバ(R525以降など)が必要です。互換性のない組み合わせでは、冒頭で述べた「ドライババージョン不足」エラーが発生します。

主要な原因3:WSL2のインストール形態とカーネルバージョン

WSL2は「ストア版」と「レガシー版(Windowsコンポーネント)」の2つのインストール方法があります。また、WSL2のLinuxカーネルはMicrosoftによってカスタマイズされており、GPUパーティショニング機能を有効にするには、一定以上のバージョンが必要です。

解決方法:ステップバイステップ設定ガイド

以下に、ゼロからWSL2環境でCUDAを動作させるまでの完全な手順を示します。

ステップ1: 前提条件の確認とWSL2のセットアップ

まず、Windowsのビルドバージョンが要件を満たしているか確認します。WSL2 GPUサポートには、Windows 10 バージョン 21H2以降(ビルド 19044以上)、またはWindows 11が必要です。

# PowerShell (管理者権限不要)で確認
winver

次に、WSL2が有効化され、デフォルトバージョンが2に設定されていることを確認・設定します。

# PowerShell (管理者権限で実行)
wsl --install -d Ubuntu-22.04 # Ubuntu 22.04 LTSをインストール(推奨)
wsl --set-default-version 2
wsl --set-version Ubuntu-22.04 2 # 既存のディストリビューションをWSL2に変換
wsl -l -v # インストール済みディストリビューションとバージョンを確認
# 出力例: * Ubuntu-22.04 Running 2

ステップ2: Windowsホスト側のNVIDIAドライバインストール

これが最も重要なステップです。WSL2専用のドライバをNVIDIA公式サイトからダウンロードします。

  1. NVIDIA CUDA on WSL ダウンロードページにアクセス。
  2. 「Download Driver」ボタンをクリックし、Windows用のゲーミングドライバ(Game Ready Driver)をダウンロード・インストール。データセンター向け(GRID/RDC)ではなく、通常のGeForce/RTX用ドライバで構いません。
  3. インストール後、PCを再起動します。

インストール後、Windows側のコマンドプロンプトまたはPowerShellで以下を実行し、ドライバが正しく認識されているか確認します。

# Windows PowerShell
nvidia-smi

正常にインストールされていれば、GPUのモデル、ドライババージョン、CUDAバージョン(ドライバに含まれる最大CUDAバージョン)が表示されます。

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

WSL2のUbuntuターミナルを起動し、以下のコマンドを実行します。ここでは、安定版であるCUDA 12.1を例にします(2024年1月時点)。

# WSL2 Ubuntu ターミナル
# 1. リポジトリキーとパッケージリストを更新
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-get update

# 2. CUDA Toolkit (12.1) をインストール
sudo apt-get -y install cuda-toolkit-12-1

# 3. 環境変数をシェルの設定ファイルに追加 (~/.bashrc または ~/.zshrc)
echo 'export PATH=/usr/local/cuda-12.1/bin${PATH:+:${PATH}}' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
source ~/.bashrc

# 4. インストール確認
nvcc --version # CUDAコンパイラのバージョン確認

ステップ4: 動作確認と深層学習フレームワークのインストール

CUDA Toolkitのインストールが完了したら、GPUがWSL2から認識されているか確認します。

# WSL2 Ubuntu ターミナル
nvidia-smi

ここでCommand 'nvidia-smi' not foundと出る場合は、/usr/lib/wsl/libディレクトリがライブラリパスにない可能性があります。以下のコマンドで対処できます。

sudo ldconfig /usr/lib/wsl/lib

nvidia-smiが成功したら、PyTorchをインストールして最終確認します。

# PyTorchのインストール (CUDA 12.1用)
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

# Pythonインタラクティブシェルで確認
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"}')"

この出力でCUDA available: Trueと表示されれば、設定は成功です。

よくあるエラーメッセージとその解決策

エラー1: CUDA driver version is insufficient for CUDA runtime version

原因: Windowsホストのドライバが古すぎて、WSL2内にインストールしたCUDA Toolkitのバージョンをサポートしていない。

解決策: ステップ2に戻り、NVIDIA公式サイトから最新のゲーミングドライバをインストールし、再起動します。nvidia-smiで表示される「CUDA Version」が、WSL2内のnvcc --versionで表示されるバージョン以上であることを確認してください。

エラー2: No CUDA-capable device is detected または nvidia-smiが実行できない

原因A: WSL2のカーネルバージョンが古い。

# WSL2内でカーネルバージョンを確認
uname -r
# 5.10.102.1 以上であることが望ましい

解決策A: Windows側でPowerShellを管理者権限で開き、wsl --updateを実行してWSL2カーネルを手動更新します。その後、wsl --shutdownでWSL2を終了し、再起動します。

原因B: WSL2内でldconfigが実行されていない。

解決策B: 前述のsudo ldconfig /usr/lib/wsl/libを実行します。

エラー3: PyTorch/TensorFlowでtorch.cuda.is_available() == False

原因: フレームワークのインストール時に、CUDAサポートなしのCPU版がインストールされている。

解決策: 必ず公式サイトのインストールコマンドを使用し、CUDAバージョンを明示します。PyTorchなら--index-url、TensorFlowならtensorflow[and-cuda]または特定のバージョン指定を確認してください。

まとめ・補足情報

WSL2上でのCUDA環境構築の成功の鍵は、「Windowsホストに適切なドライバを入れ、WSL2内にはドライバではなくCUDA Toolkitのみを入れる」という基本原則を理解することにあります。バージョン互換性には常に注意を払い、問題が発生した場合は以下のチェックリストを確認してください。

  1. Windowsビルドバージョンは21H2以上か?
  2. Windows NVIDIAドライバはWSL2対応の最新版か?(Game Ready Driver)
  3. WSL2のデフォルトバージョンは2か?
  4. WSL2内のCUDA Toolkitバージョンはドライバがサポートする範囲内か?
  5. フレームワークは正しいCUDAバージョン指定でインストールしたか?

一度正しく設定できれば、Windowsの利便性を保ちながら、ほぼネイティブに近いパフォーマンスでLinux上のGPU計算環境を利用できるようになります。開発時は、データセットなどの大きなファイルをWSL2内のLinuxファイルシステム(/home/以下)ではなく、Windowsファイルシステム(/mnt/c/以下)に置くと、ファイルI/Oのパフォーマンスが大幅に低下する点にも注意が必要です。プロジェクトはできるだけWSL2のホームディレクトリ内で管理することをお勧めします。

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