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

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

Windows Subsystem for Linux 2 (WSL2) 上で機械学習や深層学習の開発環境を構築する際、CUDAを利用してGPUのパワーを活用したい場面は多いでしょう。しかし、WSL2環境でCUDAをセットアップしようとすると、以下のような問題に直面することが頻繁にあります。

  • nvidia-smiコマンドを実行しても「Command not found」や「No devices were found」と表示される
  • PyTorchやTensorFlowをインポートした際にCUDA is not availableというエラーが発生する
  • Windows側のGPUドライバはインストール済みなのに、WSL2内からGPUが認識されない
  • CUDA ToolkitをWSL2内にインストールしても、実際のGPUアクセスができない

これらの問題は、WSL2におけるGPUサポートが「Windows側のドライバ」と「WSL2内のユーザースペースドライバ」の連携によって実現される特殊なアーキテクチャに起因しています。単純にLinux用のNVIDIAドライバをWSL2内にインストールしても動作しません。

原因の解説:WSL2 GPUサポートのアーキテクチャ

WSL2でCUDAを利用するための公式サポートは、NVIDIAによって「CUDA on WSL」として提供されています。その核心的な仕組みを理解することが、トラブルシューティングの第一歩です。

従来のLinux環境との根本的な違い

通常のLinuxマシンや仮想マシン(VM)では、NVIDIAのカーネルモードドライバをLinuxカーネルに直接ロードします。しかし、WSL2はHyper-Vを基盤とする軽量仮想マシンであり、GPUなどのハードウェアリソースへの直接アクセスが制限されています。

WSL2のGPUパススルーアーキテクチャ

WSL2のGPUサポートは以下のような2層構造になっています:

  1. Windowsホスト側: 標準のNVIDIA Game ReadyまたはStudioドライバ(バージョン 465以降)がインストールされ、物理GPUを管理します。このドライバには、WSL2用の「WSLインターフェース」コンポーネントが含まれています。
  2. WSL2ゲスト側: NVIDIAが提供する「ユーザーモードドライバ」(libcuda.soなど)がインストールされ、Windows側のドライバと通信します。WSL2内にカーネルモードドライバは存在しません

このアーキテクチャのため、WSL2内でsudo apt install nvidia-driver-xxxなどのコマンドを実行してLinux用ドライバをインストールしようとすると、システムが破損したり、そもそも動作しなかったりします。これが最も多い間違いです。

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

WSL2でCUDAを正しく動作させるには、以下の手順を厳密に守って環境を構築する必要があります。

ステップ1: システム要件の確認

まず、以下の前提条件を満たしていることを確認してください。

  • Windows 10 バージョン 21H2(ビルド 19044)以上、または Windows 11
  • WSL2が有効化されており、Linuxディストリビューション(Ubuntu 18.04/20.04/22.04推奨)がインストール済み
  • NVIDIA GPU(GeForce GTX/RTXシリーズ、Quadro、Teslaなど)が搭載されている

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

WSL2内でCUDAを使用するために、まずWindows側に適切なドライバをインストールすることが最も重要です。

  1. 既存のNVIDIAドライバをアンインストール(DDUなどのツールを使用推奨)
  2. NVIDIA公式サイトから「WSL2用のドライバ」をダウンロード
    • Game Ready Driver または Studio Driver のバージョン 465以上を選択
    • ドライバの種類を選択する画面で「Windows Driver Type」に「Standard」ではなく「DCH」が表示されていることを確認(最新版はほとんどDCH)
  3. ダウンロードしたドライバをインストールし、PCを再起動

ステップ3: WSL2のカーネル更新

WSL2のカーネルを最新版に更新します。管理者権限でPowerShellまたはWindowsターミナルを開き、以下のコマンドを実行します。

wsl --update

更新後、WSL2を再起動します。

wsl --shutdown

その後、WSL2ディストリビューションを再度起動します。

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

WSL2のUbuntuターミナルを開き、以下の手順でCUDA Toolkitをインストールします。NVIDIAの公式リポジトリを追加する方法が確実です。

# 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

# 3. リポジトリの追加
sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/ /"

# 4. パッケージリストの更新とCUDA Toolkitのインストール
sudo apt update
sudo apt install -y cuda-toolkit-12-4  # バージョンは必要に応じて変更(例: cuda-toolkit-11-8)

ステップ5: 環境変数の設定と動作確認

インストール後、環境変数を設定し、GPUが正しく認識されているか確認します。

# 環境変数を~/.bashrcに追加
echo 'export PATH=/usr/local/cuda-12.4/bin${PATH:+:${PATH}}' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
source ~/.bashrc

# GPU認識の確認(WSL2内で実行)
nvidia-smi

正常に設定されていれば、以下のようなGPU情報が表示されます。

+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.161.07   Driver Version: 537.13       CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| 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 RTX 4090        On  | 00000000:01:00.0 Off |                  Off |
|  0%   38C    P8             22W / 450W |      0MiB / 24564MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

コード例・コマンド例:よくあるエラーとその対処法

エラー1: 「Failed to initialize NVML: Driver/library version mismatch」

このエラーは、Windows側のドライババージョンとWSL2内のユーザーモードドライバのバージョンが一致していない場合に発生します。

# エラーメッセージ例
$ nvidia-smi
Failed to initialize NVML: Driver/library version mismatch

解決策:

  1. Windows側のドライバを最新版に更新
  2. WSL2を完全にシャットダウンして再起動
  3. # PowerShellで実行
    wsl --shutdown
    # その後、WSL2ディストリビューションを再起動

エラー2: PyTorchで「CUDA is not available」

PyTorchをインストールした後、CUDAが利用できないというエラーが発生することがあります。

import torch
print(torch.cuda.is_available())  # Falseが返る

解決策:

  1. WSL2用の正しいPyTorchバージョンをインストール
  2. # CUDA 12.1用のPyTorchをインストール(例)
    pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
  3. WSL2内のCUDA ToolkitバージョンとPyTorchが要求するCUDAバージョンが一致しているか確認

エラー3: 「libcuda.so.1: cannot open shared object file」

このエラーは、CUDAライブラリのパスが正しく設定されていない場合に発生します。

ImportError: libcuda.so.1: cannot open shared object file: No such file or directory

解決策:

# シンボリックリンクを作成またはLD_LIBRARY_PATHを確認
sudo ldconfig
echo $LD_LIBRARY_PATH  # CUDAライブラリパスが含まれているか確認

# もし含まれていなければ、明示的に追加
export LD_LIBRARY_PATH=/usr/lib/wsl/lib:$LD_LIBRARY_PATH

まとめ・補足情報

WSL2でCUDAを利用する際の最大のポイントは、「ドライバはWindows側にインストールし、WSL2内にはCUDA Toolkitのみをインストールする」という基本原則を理解することです。このアーキテクチャを把握していれば、多くのトラブルを未然に防ぐことができます。

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

WSL2上のCUDAパフォーマンスは、ネイティブLinux環境と比較して若干のオーバーヘッドが存在しますが、最新のドライバとWSL2の更新により、その差は最小化されています。特に、Windows 11と最新のNVIDIAドライバの組み合わせでは、ほぼネイティブに近いパフォーマンスが得られることが報告されています。

メモリ管理の注意点

WSL2は動的にメモリを割り当てますが、大規模なモデルを学習させる場合、.wslconfigファイルを設定してメモリ制限を調整することをお勧めします。

# C:Users[ユーザー名].wslconfig に作成
[wsl2]
memory=16GB  # システムメモリに応じて調整
processors=8 # 使用するCPUコア数
localhostForwarding=true

推奨されるワークフロー

安定した環境を維持するためには:

  1. Windows側のNVIDIAドライバを定期的に更新する(Game Ready DriverよりStudio Driverの方が安定性が高い場合あり)
  2. WSL2のカーネルはwsl --updateで最新に保つ
  3. CUDA Toolkitのバージョンは、使用するAIフレームワーク(PyTorch、TensorFlow)と互換性のあるものを選択する
  4. 大きな変更を行う前には、WSL2ディストリビューションのエクスポートでバックアップを取る

WSL2上のCUDA環境は、WindowsとLinuxの良いとこ取りができる強力な開発プラットフォームです。本ガイドで紹介した手順と注意点を守ることで、AI開発におけるGPUリソースをスムーズに活用できるようになるでしょう。

⚡ GPU環境をすぐに使いたいなら

ハードウェアの購入・セットアップなしで、すぐにGPU環境を使えるクラウドサービスがおすすめです。

  • RunPod — RTX 4090/A100/H100を即座に利用可能
  • Vast.ai — 最安のGPUクラウド、オークション方式で低コスト
  • RTX 5090をAmazonで見る — 自宅GPU環境を構築するなら
この記事は役に立ちましたか?