1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RTX 5090 (Blackwell) + WSL2 + Docker環境でPyTorch CUDA認識させた話(おそらく世界初)

Last updated at Posted at 2025-11-24

要点

  • RTX 5090 (sm_120) をWSL2 + Docker環境でPyTorch CUDA認識させることに成功(2025年8月)
  • 公開情報が一切ない状態から40時間のデバッグで解決
  • ComfyUI、Style-BERT-VITS2、HunyuanVideo等の本番運用中
  • 解決策のコア部分は競合優位性のため非公開(コンサルティング対応可)

success.png

はじめに:RTX 5090が動かない地獄

2025年8月、俺はRTX 5090を購入した。スペックは夢のようだった。

- CUDA Cores: 21,760
- VRAM: 32GB GDDR7
- TDP: 575W
- Compute Capability: sm_120(Blackwell世代)

で、いざWSL2 + Docker環境で動かそうとしたら...

$ docker run --gpus all nvidia/cuda:12.8.0-base-ubuntu24.04 nvidia-smi
docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].

は?

何が問題だったのか

問題1: Compute Capability sm_120非対応

Blackwell世代(RTX 50シリーズ)は sm_120 という新しいCompute Capabilityを持つ。

# PyTorch 2.4.x (stable)では...
torch.cuda.get_device_capability(0)
# RuntimeError: CUDA error: no kernel image is available for execution on the device

PyTorch stableはsm_120に対応していない。nightlyビルドも初期は不安定だった。

問題2: WSL2のGPUドライバスタック

WSL2はGPUを直接触れない。ドライバスタックはこうなってる:

Windows側NVIDIAドライバ (566.03+)
    ↓
WSL2カーネルの仮想GPUインターフェース
    ↓
/usr/lib/wsl/lib 内の共有ライブラリ群
    ↓
Docker Container Runtime
    ↓
CUDA Application

この「WSL2カーネル → Docker」の層で何かがおかしい。

問題3: Docker GPU Runtime の認識失敗

# WSL2内では見える
$ nvidia-smi
# 正常に表示される

# Dockerコンテナ内では...
$ docker run --gpus all nvidia/cuda:12.8.0-base-ubuntu24.04 nvidia-smi
# docker: Error response from daemon...

NVIDIA Container Toolkitは正しく入ってる。docker infoでもRuntimes: nvidiaが見える。なのに動かない。

先行事例の調査結果(2025年8月時点)

俺がやったこと:

GitHub Issues調査

検索ワード: "RTX 5090" "WSL2" "Docker" "CUDA"
結果: 該当なし(問題報告のみ、解決報告ゼロ)

Reddit調査

  • r/LocalLLaMA: 「ドライバ待ち」
  • r/StableDiffusion: 「公式サポート待ち」
  • r/Docker: 議論すらない

NVIDIA Forums

スレッド: "RTX 5090 WSL2 support?"
回答: "Coming soon™"

結論

2025年8月時点で、誰もRTX 5090をWSL2 Docker環境で動かせていなかった。

少なくとも公開情報は一切なかった。

解決への道のり

Step 1: 問題の切り分け

# テスト1: Windows側でCUDAは動くか?
PS> nvidia-smi
# ✅ OK

# テスト2: WSL2側で認識されるか?
$ nvidia-smi
# ✅ OK

# テスト3: WSL2内のPyTorchで認識されるか?(Docker外)
$ python3 -c "import torch; print(torch.cuda.is_available())"
# ❌ False

# テスト4: Dockerコンテナ起動できるか?
$ docker run --gpus all nvidia/cuda:12.8.0-base-ubuntu24.04 nvidia-smi
# ❌ Error

問題は「WSL2内のCUDAアプリケーション認識」と「Docker GPU Runtime」の2箇所。

Step 2: PyTorchのビルド問題

まずWSL2内でPyTorchが動くようにする。

# PyTorch stable (2.4.1)
pip install torch torchvision torchaudio
python3 -c "import torch; print(torch.cuda.is_available())"
# False

# PyTorch nightly (最新)
pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu128
python3 -c "import torch; print(torch.cuda.is_available())"
# まだFalse...

nightlyでも全部が動くわけじゃない。特定の日付のビルドを選ぶ必要がある。

どのビルドが動くか?これは試行錯誤するしかなかった。ヒント:2024年8月中旬以降のビルドで、かつCUDA 12.8対応のものを探せ。

Step 3: Docker GPU Runtimeの修正

ここが最大の難関。

通常、NVIDIA Container Toolkitはこう設定する:

# 一般的な設定(これだけではRTX 5090は動かない)
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/libnvidia-container/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
  sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

でもこれだけじゃダメ。WSL2特有の設定が必要。

Step 4: 独自のマウント戦略(ここが秘伝のタレ)

俺が開発した解決策の核心部分は以下:

  1. WSLドライバの特殊マウント
  2. 環境変数の適切な設定
  3. Docker起動時のフラグ最適化

具体的には...まあ、これは企業秘密だ。

ただしヒントは出す。

arch.png

ヒント1: /usr/lib/wsl/lib の扱い

デフォルトでは LD_LIBRARY_PATH/usr/lib/wsl/lib を追加するだけ。でもそれじゃ足りない。

Dockerコンテナ内で、WSL2のドライバライブラリをどう見せるかが鍵。

# 通常のやり方(動かない)
docker run --gpus all \
  -e LD_LIBRARY_PATH=/usr/lib/wsl/lib \
  nvidia/cuda:12.8.0-base-ubuntu24.04 nvidia-smi

# 俺のやり方(動く)
# [秘密の設定]

ヒント2: nvidia-smi は動くが torch.cuda.is_available() は False

このパターンにハマった人は多いはず。

# nvidia-smiは成功
$ docker run --gpus all nvidia/cuda:12.8.0-base-ubuntu24.04 nvidia-smi
# ✅ GPU情報が表示される

# でもPyTorchは失敗
$ docker run --gpus all pytorch/pytorch:latest python -c "import torch; print(torch.cuda.is_available())"
# False

これは nvidia-smi が使うライブラリと、PyTorchが使うライブラリが微妙に違うから。

CUDAランタイムライブラリ(libcudart.so)、cuDNN、cuBLAS等をDockerコンテナ内のどこに配置するかが重要。

ヒント3: gpu-run 関数

俺は独自の gpu-run シェル関数を作った。

# 使い方
gpu-run <コンテナ名> <コマンド>

# 例
gpu-run torch-wsl-cu128 python3 -c "import torch; print(torch.cuda.is_available())"
# True

この関数の中身?それが秘伝のタレだ。

大まかな構造はこう:

gpu-run() {
  local container_name=$1
  shift
  
  docker run --rm -it \
    --gpus all \
    [秘密のマウントオプション] \
    [秘密の環境変数] \
    [秘密のランタイムフラグ] \
    $container_name \
    "$@"
}

具体的な [秘密の...] 部分は40時間のデバッグの成果なので、ここでは書かない。

動作証明:世界初のRTX 5090 + WSL2 Docker成功

2025年11月19日時点での最新検証結果を公開する。

PyTorch CUDA認識の完全証明

以下のコードを gpu-run 関数経由で実行:

$ gpu-run torch-wsl-cu128 python3 -c "
import torch
import datetime

print(f'Timestamp: {datetime.datetime.now().isoformat()}')
print(f'PyTorch: {torch.__version__}')
print(f'CUDA Available: {torch.cuda.is_available()}')
print(f'Device Count: {torch.cuda.device_count()}')

if torch.cuda.is_available():
    print(f'GPU: {torch.cuda.get_device_name(0)}')
    print(f'Compute Capability: {torch.cuda.get_device_capability(0)}')
    
    # 実際にテンソルをGPUで作成
    x = torch.randn(100, 100).cuda()
    print(f'GPU Memory Allocated: {torch.cuda.memory_allocated(0) / 1024**2:.2f} MB')
    print('✓Successfully created tensor on GPU')
"

実行結果:

success.png

この結果が証明していること:

  1. Blackwell世代のsm_120を正しく認識

    • Compute Capability: (12, 0) = sm_120
  2. PyTorch nightly buildが動作

    • `PyTorch: (非公開)
    • 2025年8月12日ビルド + CUDA 12.8対応
  3. 実際のGPU演算が成功

    • GPUメモリ確保成功
    • テンソル作成成功
  4. Docker Container環境での動作

    • WSL2 → Docker → PyTorch の全レイヤーで正常動作

本番運用中のAIワークロード

現在、以下のAIサービスを本番運用中:

ComfyUI (Flux.1 Dev)

$ cd ~/ai-workspace-correct/comfyui_wsl_cu128
$ ./start-compose.sh

# 生成速度: 1024x1024, 20 steps → 約8秒

Style-BERT-VITS2

$ cd ~/ai-workspace-correct/style-bert-vits2-wsl-cu128
$ ./start-compose.sh

# 日本語TTS音声合成が正常動作

HunyuanVideo

# ビデオ生成実験中(まだ最適化の余地あり)

すべてDocker Compose V2環境で安定稼働。クラッシュゼロ。

タイムラインの証明

記録に残っている日付:

  • 2025年1月20日: RTX 5090発売
  • 2025年8月10日: 俺が購入
  • 2025年8月13日: 🎉 CUDA認識成功(おそらく世界初)
  • 2025年8月15日: ComfyUI動作確認
  • 2025年8月20日: Style-BERT-VITS2フルワークフロー構築
  • 2025年11月19日: 本記事公開、最新検証実施

2025年8月時点で、RTX 5090 + WSL2 + Docker環境でのPyTorch CUDA認識に成功した公開報告は俺以外に見つけられなかった。

もし先行事例があれば教えてほしい。

ハマりポイントとトラブルシューティング

ハマりポイント1: Windowsドライバのバージョン

最低バージョン: 566.03以上
推奨: 566.14以上

古いドライバだとWSL2側で認識されない。

# Windowsで確認
PS> nvidia-smi
# Driver Version: 566.14 ← これを確認

ハマりポイント2: WSL2のカーネルバージョン

$ uname -r
5.15.153.1-microsoft-standard-WSL2  # 5.15.90.1以上が必要

古いWSL2カーネルだとGPU認識が不安定。

# Windows側でWSL更新
PS> wsl --update
PS> wsl --shutdown

ハマりポイント3: Docker Composeのバージョン

$ docker compose version
Docker Compose version v2.29.7  # v2.20.0以上が必要

古いDocker Compose V1 (docker-compose) は動作不安定。

ハマりポイント4: /tmp/.X11-unix マウントエラー

Error: cannot mount /tmp/.X11-unix

これはGUIアプリ(ComfyUI等)を起動する時に出る。

解決策:

# WSL2内で
$ sudo chmod 1777 /tmp/.X11-unix

ハマりポイント5: CUDAバージョンの不一致

RuntimeError: The NVIDIA driver on your system is too old

これはコンテナ内のCUDAバージョンとホスト側のドライババージョンが合ってない時に出る。

# ホスト側のCUDAバージョン確認
$ nvidia-smi | grep "CUDA Version"
# CUDA Version: 12.8

# コンテナはCUDA 12.8以下を使え
# 例: pytorch/pytorch:2.6.0-cuda12.8-cudnn9-devel

環境情報

参考までに、俺の環境:

Hardware:
  GPU: NVIDIA GeForce RTX 5090 (32GB GDDR7)
  CPU: AMD Ryzen 9 7950X
  RAM: 64GB DDR5
  Storage: NVMe SSD 2TB

Software:
  OS: Windows 11 Pro (23H2)
  WSL2: Ubuntu 24.04 LTS
  Kernel: 5.15.153.1-microsoft-standard-WSL2
  Docker Engine: 27.3.1
  Docker Compose: v2.29.7
  NVIDIA Driver: 566.14
  CUDA: 12.8
  PyTorch: 2.9.0.dev20250812+cu128

FAQ

Q: なんで解決策を全部公開しないの?

A: 40時間のデバッグの成果だし、これで飯食ってるから。コンサルティングで対応する。

Q: いくらで教えてくれるの?

A: ケースバイケース。個人なら数時間のコンサル、企業なら環境構築代行も可能。DMかメールで相談してくれ。

Q: いつか完全版のガイド出すの?

A: 需要があればZenn Bookで有料公開するかも。フォローしとけ。

Q: 本当に世界初なの?

A: 少なくとも2025年8月時点で、公開されてる情報は見つからなかった。もし先行事例があるなら教えてほしい。

Q: これって合法?

A: 完全に合法。公式ドライバ、公式WSL2、公式Dockerを使ってるだけ。設定が特殊なだけ。

Q: PyTorchのバージョンは?

A: nightly build推奨。俺が使ってるのは非公開だが、日付は色々試してくれ。

今後の更新予定

この記事は随時アップデートする予定:

  • nvidia-smi の完全出力スクリーンショット追加
  • ComfyUI動作画面のスクリーンショット追加
  • 詳細な環境構築手順
  • 他のAIワークロード検証結果

まとめ

  • RTX 5090 + WSL2 + Docker環境でPyTorch CUDA認識は可能
  • 公式ドキュメントには載ってない独自設定が必要
  • 2025年8月に俺が解決(たぶん世界初)
  • 解決策のコア部分は競合優位性のため非公開
  • 真剣に困ってる企業・個人はコンサルティング対応可

「公式サポート待ち」とか言ってる間に、俺は本番運用してる。


連絡先

ビジネス関係の問い合わせ歓迎。


更新履歴

  • 2025-11-19: 初稿公開
1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?