なぜNemoClawにWSL2が必要なのか

NemoClawのサンドボックス(OpenShellコンテナ)はLinux上で動作する設計のため、Windows環境ではWSL2(Windows Subsystem for Linux 2)が必須です。

WSL2はWindowsカーネル上で実際のLinuxカーネルを動作させる仕組みで、従来のWSL1と比較して以下の利点があります。

  • 完全なLinuxカーネル互換 — Dockerがネイティブに動作
  • GPU Passthrough — NVIDIA GPUをWSL2内で直接利用可能
  • ファイルシステム性能 — Linuxネイティブのext4ファイルシステムで高速なI/O
  • Dockerの完全サポート — Docker Desktop WSL2バックエンドにより低オーバーヘッド

WSL2でNemoClawを動かすためのシステム要件

項目最低要件推奨
OSWindows 10 21H2Windows 11 Pro
CPU4 vCPU8コア以上
メモリ8GB16GB以上(32GB推奨)
ストレージSSD 20GB空きSSD 100GB以上
GPU(ローカル推論時)GeForce GTX 1060 6GBGeForce RTX 4060 Ti 16GB以上
WSLカーネル5.10.43.3以上最新版
Docker Desktop4.30以上最新版

Cloud NIM推論のみ使用する場合はGPU不要です。ローカル推論(nim-local / vLLM)を使用する場合はNVIDIA GPUが必要です。

WSL2のセットアップ手順

Step 1: WSL2の有効化

PowerShellを管理者権限で開き、以下のコマンドを実行します。

# WSL2を一括インストール(Windows 10 21H2以降 / Windows 11)
wsl --install

# 再起動を求められたら再起動する

手動で有効化する場合は以下の2つの機能を個別に有効化します。

# 仮想マシンプラットフォームの有効化
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

# WSLの有効化
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

# PC再起動後にWSL2をデフォルトに設定
wsl --set-default-version 2

Step 2: Ubuntu 22.04 LTSのインストール

# Ubuntu 22.04 LTSをインストール
wsl --install -d Ubuntu-22.04

# インストール確認
wsl -l -v
# NAME            STATE           VERSION
# Ubuntu-22.04    Running         2

初回起動時にユーザー名とパスワードを設定します。このパスワードはsudoコマンドで使用します。

注意: VERSIONが「1」になっている場合は、以下で変換してください。

wsl --set-version Ubuntu-22.04 2

Step 3: WSL2のリソース設定

WSL2はデフォルトでホストマシンの50%のメモリを使用します。NemoClaw用に適切なリソースを割り当てます。

WindowsのC:\Users\ユーザー名\.wslconfigファイルを作成(または編集)します。

[wsl2]
memory=8GB
swap=4GB
processors=4
localhostForwarding=true

メモリ32GBのPCではmemory=12GB、64GBのPCではmemory=16GBに設定することを推奨します。

設定変更後、WSL2を再起動します。

# PowerShellで実行
wsl --shutdown
# 再度Ubuntu起動で新しい設定が適用される

NVIDIA GPU Passthroughの設定

WSL2でNVIDIA GPUを使用するための設定手順です。NemoClawでローカル推論を行う場合に必要です。

NVIDIA GPUドライバのインストール(Windows側)

重要: ドライバはWindows側にのみインストールします。WSL2内にはインストールしないでください。

  1. NVIDIA公式サイトから最新のドライバをダウンロード
  2. インストール後、PCを再起動
  3. WSL2のUbuntuを起動
# WSL2内でGPU認識を確認
nvidia-smi

# 出力例:
# +------------------------------------------+
# | NVIDIA-SMI 560.xx  Driver Version: 560.xx|
# | CUDA Version: 12.x                       |
# +------------------------------------------+
# | GPU  Name       | Memory-Usage           |
# | 0  RTX 4090     | 300MiB / 24564MiB      |
# +------------------------------------------+

CUDA Toolkitのインストール(WSL2内)

vLLMプロファイルでローカル推論を行う場合は、WSL2内にCUDA Toolkitをインストールします。

# CUDA Toolkit 12.x(WSL-Ubuntu用)
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
wget https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda-repo-wsl-ubuntu-12-4-local_12.4.0-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-12-4-local_12.4.0-1_amd64.deb
sudo cp /var/cuda-repo-wsl-ubuntu-12-4-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda-toolkit-12-4

# パス設定
echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

# 確認
nvcc --version

注意: Cloud NIMやnim-localプロファイルを使用する場合、CUDA Toolkitのインストールは不要です。

Docker Desktop GPU対応の有効化

Docker DesktopがWSL2内のGPUを認識できるように設定します。

  1. Docker Desktop → Settings → General → 「Use the WSL 2 based engine」にチェック
  2. Settings → Resources → WSL Integration → Ubuntu-22.04を有効化
# GPU対応Dockerコンテナの動作確認
docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi

# ホストと同じGPU情報が表示されればOK

--gpus allオプションが使用できない場合は、NVIDIA Container Toolkitをインストールしてください。

# NVIDIA Container Toolkit
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
  sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
  sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker

NemoClawのインストール(WSL2内)

WSL2のUbuntuターミナルを開き、以下の手順でNemoClawをインストールします。

依存パッケージのインストール

# システム更新
sudo apt update && sudo apt upgrade -y

# Node.js 20 LTS
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs

# Python 3.11+
sudo apt install -y python3 python3-pip python3-venv

# その他必要パッケージ
sudo apt install -y git curl build-essential

# バージョン確認
node --version    # v20.x.x
python3 --version # Python 3.11.x
docker --version  # Docker version 27.x.x

NemoClawインストールとセットアップ

# プロジェクトディレクトリはLinuxファイルシステム内に作成
cd ~
mkdir -p projects && cd projects

# NemoClawインストール
curl -fsSL https://nvidia.com/nemoclaw.sh | bash

# 初回セットアップ
nemoclaw setup

# GPU搭載: Option 2 (nim-local) を選択
# GPU非搭載: Option 1 (Cloud NIM) を選択

重要: プロジェクトファイルは必ず/home/ユーザー名/以下に作成してください。/mnt/c/以下(Windowsのマウントパス)では性能が大幅に低下し、パーミッションの問題も発生します。

WSL2環境でのトラブルシューティング

「No assignable GPU found」エラー

特にWindows Homeで発生する既知のバグ(GitHub Issue #152)です。

チェックリスト:

  1. WindowsのNVIDIAドライバが最新版か確認
  2. WSL2を再起動: PowerShellでwsl --shutdown後に再起動
  3. WSL2内でnvidia-smiが正常出力するか確認
  4. Docker内でdocker run --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smiが動くか確認
  5. すべて正常なのにNemoClawがGPUを認識しない場合 → Cloud NIMに切り替え
nemoclaw config set inference.provider cloud-nim

セットアップのStep 7で無限ループ

サンドボックス検出が無限ループに入る場合の対処法です。

  1. Docker Desktopを完全に再起動(Quit → 再起動)
  2. .wslconfigのメモリ設定を確認(8GB以上を推奨)
  3. WSL2を再起動: wsl --shutdown
  4. NemoClawのセットアップをリセット: nemoclaw setup --reset

Docker Desktopの「Troubleshoot → Reset to factory defaults」も有効ですが、既存のコンテナ・イメージが全て削除されるため注意してください。

ネットワーク接続の問題

WSL2はデフォルトでNAT接続を使用するため、企業ネットワーク(VPN接続時など)で名前解決の問題が発生することがあります。

# DNSの問題が疑われる場合
cat /etc/resolv.conf
# nameserver が不正な場合は以下で修正

# resolv.confの自動生成を無効化
sudo sh -c 'echo "[network]\ngenerateResolvConf = false" > /etc/wsl.conf'

# DNSを手動設定
sudo sh -c 'echo "nameserver 8.8.8.8\nnameserver 8.8.4.4" > /etc/resolv.conf'

# WSL再起動
# PowerShellで: wsl --shutdown

ディスク容量不足

WSL2の仮想ディスク(ext4.vhdx)は自動で拡張されますが、縮小はされません。ディスク容量が逼迫した場合の対処法です。

# WSL2内のディスク使用状況確認
df -h /

# Dockerのディスク使用状況
docker system df

# 不要なDockerリソースを削除
docker system prune -a --volumes

NemoClawのサンドボックスイメージだけで約10〜20GBを消費するため、WSL2のディスクイメージに50GB以上の空きを確保しておくことを推奨します。

WSL2でのパフォーマンス最適化

  • ファイルはLinuxファイルシステムに配置/mnt/c/ではなく/home/以下を使用。I/O性能が10〜100倍向上
  • VS Code Remote WSL拡張を使用 — Windows側のVS Codeから直接WSL2内のファイルを編集。ファイルコピー不要
  • メモリの適切な割り当て.wslconfigでWSL2のメモリ上限を設定し、Windowsとのバランスを取る
  • 不要なディストリビューションを停止 — 使用しないWSLディストリビューションはwsl --terminateで停止
  • Docker BuildKitの有効化 — 環境変数DOCKER_BUILDKIT=1でビルド高速化