はじめに:WSL2とCUDAの組み合わせは今や「当たり前」だが…
AI開発や高速な数値計算を行う多くのエンジニアが、Windows環境でありながらLinuxの利便性を享受できるWSL2(Windows Subsystem for Linux 2)を活用しています。特にPyTorchやTensorFlowを使った開発では、GPU(CUDA)アクセラレーションはほぼ必須です。
しかし、WSL2上でCUDAをセットアップしようとすると、以下のようなエラーに直面することが非常に多く、開発のスタート地点でつまずいてしまうケースが後を絶ちません。
# よくあるエラー例
RuntimeError: No CUDA GPUs are available
# または
torch.cuda.is_available() # 常にFalseを返す
さらに、CUDA Toolkitのインストール自体は成功しても、実際に実行すると致命的なエラーが発生することも。
CUDA error: CUDA_ERROR_NO_DEVICE
CUDA driver version is insufficient for CUDA runtime version
本記事では、これらの問題を「なぜ発生するのか」という原理から理解し、確実に解決するための完全な手順を解説します。単に手順を列挙するだけでなく、各ステップの意味を理解できるように構成しています。
問題の本質:WSL2のアーキテクチャ理解が解決の鍵
WSL2は従来の仮想マシン(VMware, VirtualBox等)とは根本的に異なるアーキテクチャを採用しています。この違いを理解することが、問題解決の第一歩です。
WSL2のGPUパススルー:どう実現されているか
WSL2では、Microsoftが開発した「GPUパススルー」技術により、WindowsホストのGPUをLinuxゲストから直接利用できます。しかし、この機能を実現するには以下の3つのコンポーネントが適切に連携する必要があります。
- Windowsホスト側のWSL2対応NVIDIAドライバ
- WSL2内のLinuxカーネル(Microsoft提供)
- WSL2内のCUDA Toolkit
多くの場合、問題は「標準のゲーミング用ドライバ」をインストールしてしまっている点にあります。WSL2でCUDAを使用するには、特別な「WSL2対応ドライバ」が必要なのです。
システム要件の確認:まずは土台を固める
最初に、お使いの環境がWSL2のGPUサポートに対応しているかを確認しましょう。
必須条件チェックリスト
- OS: Windows 10 バージョン 21H2(ビルド 19044)以上、またはWindows 11
- WSL2: 有効化済み、かつ最新バージョン
- Linuxディストリビューション: Ubuntu 20.04 LTS または 22.04 LTS(推奨)
- GPU: NVIDIA製(Compute Capability 6.0以上)
- メモリ: 8GB以上(推奨)
WSL2の状態確認
PowerShellを管理者権限で開き、以下のコマンドを実行します。
# WSLのバージョン確認
wsl --version
# 期待する出力例
# WSL バージョン: 2.0.9.0
# カーネル バージョン: 5.15.90.1
# WSLg バージョン: 1.0.51
# MSRDC バージョン: 1.2.3770
# Direct3D バージョン: 1.608.2-61064218
# DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
# Windows バージョン: 10.0.22631.3447
WSLのバージョンが古い場合は、以下のコマンドで更新できます。
# WSLの更新
wsl --update
# 更新後は再起動を
wsl --shutdown
ステップバイステップ解決手順
ここからが本題です。以下の手順を順番に実行してください。順番を飛ばしたり逆にしたりすると、問題が解決しない可能性があります。
ステップ1:Windowsホストへの正しいNVIDIAドライバインストール
これが最も重要なステップです。 多くの方がここで間違えます。
-
既存ドライバのアンインストール(クリーンインストール推奨)
- NVIDIA公式のDisplay Driver Uninstaller (DDU)を使用するか、コントロールパネルから既存のNVIDIAドライバを完全にアンインストールします。
-
WSL2対応ドライバのダウンロード
- NVIDIAドライバダウンロードページにアクセス
- お使いのGPUに合わせて製品シリーズ、製品タイプを選択
- 「製品ファミリ」で「CUDA on WSL」を選択(これがWSL2対応ドライバです!)
- 「検索」をクリックし、最新のドライバをダウンロード
-
ドライバのインストールと再起動
- ダウンロードしたインストーラーを実行
- インストールオプションは「カスタム(詳細)」を選び、「クリーンインストール」にチェック
- インストール完了後、必ずPCを再起動
ステップ2:WSL2内でのCUDA Toolkitインストール
WSL2のUbuntuターミナルを開き、以下の手順で進めます。ここではUbuntu 22.04 LTSとCUDA 12.4を例にします。
# 1. システムの更新と必要なパッケージのインストール
sudo apt update
sudo apt upgrade -y
sudo apt install -y build-essential
# 2. NVIDIA CUDAリポジトリの設定
# CUDA 12.4用のキーリングパッケージをダウンロード
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
# 3. CUDA Toolkitのインストール
# 必要に応じてバージョンを変更可能(例: cuda-toolkit-12-3)
sudo apt install -y cuda-toolkit-12-4
# 4. 環境変数の設定
# .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
# 5. 設定の即時反映
source ~/.bashrc
ステップ3:インストールの確認と動作テスト
インストールが正しく行われたか、段階的に確認します。
確認1:GPU認識の確認
# nvidia-smiの実行
nvidia-smi
正常に設定されていれば、以下のようなGPU情報が表示されます。
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 545.23.08 Driver Version: 545.23.08 CUDA Version: 12.3 |
|-----------------------------------------+----------------------+----------------------+
| 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 4070 Ti On | 00000000:01:00.0 On | N/A |
| 0% 43C P8 10W / 285W | 682MiB / 12282MiB | 0% Default |
| | | N/A |
+-----------------------------------------+----------------------+----------------------+
確認2:CUDAバージョンの確認
# CUDAコンパイラのバージョン確認
nvcc --version
# 期待する出力例
# nvcc: NVIDIA (R) Cuda compiler driver
# Copyright (c) 2005-2023 NVIDIA Corporation
# Built on Wed_Nov_22_10:17:15_PST_2023
# Cuda compilation tools, release 12.4, V12.4.99
# Build cuda_12.4.r12.4/compiler.33567101_0
確認3:PyTorchでの動作確認
# Pythonインタラクティブシェルで確認
python3 -c "
import torch
print(f'PyTorch version: {torch.__version__}')
print(f'CUDA available: {torch.cuda.is_available()}')
if torch.cuda.is_available():
print(f'CUDA device count: {torch.cuda.device_count()}')
print(f'Current device: {torch.cuda.current_device()}')
print(f'Device name: {torch.cuda.get_device_name(0)}')
"
期待する出力:
PyTorch version: 2.2.0
CUDA available: True
CUDA device count: 1
Current device: 0
Device name: NVIDIA GeForce RTX 4070 Ti
よくあるトラブルと解決策
ケース1:nvidia-smiは動くがPyTorchでCUDAが認識されない
原因: PyTorchのバージョンとCUDAバージョンの不一致
解決策:
# 現在のCUDAバージョンを確認
nvcc --version # 例: CUDA 12.4
# PyTorchの公式サイトから対応するバージョンをインストール
# CUDA 12.1用の例
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
ケース2:WSL2起動時にcannot connect to the docker daemon的なエラー
原因: WSL2のカーネルが古い、またはドライバの問題
解決策:
# PowerShell(管理者)で実行
wsl --update
wsl --shutdown
# その後、WSL2を再起動
ケース3:メモリ不足によるパフォーマンス低下
解決策: .wslconfigファイルでリソース制限を設定
# C:\Users\<ユーザー名>\.wslconfig に作成
[wsl2]
memory=16GB # システムメモリに応じて調整
processors=8 # CPUコア数
localhostForwarding=true
パフォーマンスチューニングのヒント
WSL2でのCUDA開発をより快適にするための追加設定をご紹介します。
1. WSL2のメモリ設定最適化
# .wslconfig の推奨設定(32GB RAM搭載マシンの例)
[wsl2]
memory=24GB
processors=12
swap=8GB
localhostForwarding=true
2. WSL2のファイルシステムパフォーマンス向上
# WSL2内で実行:I/Oスケジューラの変更
echo 0 | sudo tee /sys/block/sda/queue/rotational
echo none | sudo tee /sys/block/sda/queue/scheduler
# /etc/fstab に追加(再起動後も持続)
echo "none /tmp tmpfs defaults,noatime,nodiratime,mode=1777,size=2G 0 0" | sudo tee -a /etc/fstab
3. CUDA環境変数の最適化
# ~/.bashrc に追加
export CUDA_DEVICE_ORDER=PCI_BUS_ID
export CUDA_VISIBLE_DEVICES=0
export TF_FORCE_GPU_ALLOW_GROWTH=true
export PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:128
まとめ:WSL2 + CUDA環境構築の成功ポイント
WSL2でCUDAを正常に動作させるための重要なポイントをまとめます。
- ドライバ選択が全て:「CUDA on WSL」ドライバを必ず使用
- 順序が重要:Windowsドライバ → WSL2更新 → CUDA Toolkitの順でインストール
- 再起動を怠らない:ドライバインストール後は必ず再起動
- バージョン整合性:CUDA Toolkit、ドライバ、PyTorch/TensorFlowのバージョンを一致させる
-
段階的確認:
nvidia-smi→nvcc --version→ PyTorch/TFテストの順で確認
WSL2上のCUDA環境は、一度正しく設定すれば非常に安定して動作します。本記事の手順に従って、Windows環境でのAI開発・GPUコンピューティングをより快適に行ってください。
参考リソース
この記事の詳細版は元記事サイトで公開しています。