0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSL2でCUDAが使えない!「CUDA driver version is insufficient」を確実に解決する完全ガイド

0
Posted at

はじめに: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つのコンポーネントが適切に連携する必要があります。

  1. Windowsホスト側のWSL2対応NVIDIAドライバ
  2. WSL2内のLinuxカーネル(Microsoft提供)
  3. 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ドライバインストール

これが最も重要なステップです。 多くの方がここで間違えます。

  1. 既存ドライバのアンインストール(クリーンインストール推奨)

    • NVIDIA公式のDisplay Driver Uninstaller (DDU)を使用するか、コントロールパネルから既存のNVIDIAドライバを完全にアンインストールします。
  2. WSL2対応ドライバのダウンロード

    • NVIDIAドライバダウンロードページにアクセス
    • お使いのGPUに合わせて製品シリーズ、製品タイプを選択
    • 「製品ファミリ」で「CUDA on WSL」を選択(これがWSL2対応ドライバです!)
    • 「検索」をクリックし、最新のドライバをダウンロード
  3. ドライバのインストールと再起動

    • ダウンロードしたインストーラーを実行
    • インストールオプションは「カスタム(詳細)」を選び、「クリーンインストール」にチェック
    • インストール完了後、必ず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を正常に動作させるための重要なポイントをまとめます。

  1. ドライバ選択が全て:「CUDA on WSL」ドライバを必ず使用
  2. 順序が重要:Windowsドライバ → WSL2更新 → CUDA Toolkitの順でインストール
  3. 再起動を怠らない:ドライバインストール後は必ず再起動
  4. バージョン整合性:CUDA Toolkit、ドライバ、PyTorch/TensorFlowのバージョンを一致させる
  5. 段階的確認nvidia-sminvcc --version → PyTorch/TFテストの順で確認

WSL2上のCUDA環境は、一度正しく設定すれば非常に安定して動作します。本記事の手順に従って、Windows環境でのAI開発・GPUコンピューティングをより快適に行ってください。

参考リソース

この記事の詳細版は元記事サイトで公開しています。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?