研究室配布資料:Windows 11 + WSL2 + Ubuntu + pyenv + venv + PyTorch 構築手順

研究室内で Python 実行環境を統一し、Windows 11 上で WSL2 + Ubuntu を使って、NVIDIA GPU を活用できる PyTorch 開発環境を構築するための手順書。

対象 OS: Windows 11 前提: 管理者権限あり 前提: VS Code は導入済み Linux 環境: Ubuntu on WSL2 Python 管理: pyenv + venv 研究室推奨 Python: 3.12.13 最終到達点: 仮想環境内で PyTorch を GPU 利用可能な状態で導入 補足: CUDA 複数バージョンの使い分け

1. この資料の目的

本資料では、Windows 11 上で WSL2 と Ubuntu を導入し、VS Code から Ubuntu 環境に接続しつつ、pyenv で Python を管理し、venv でプロジェクトごとの仮想環境を作成し、その仮想環境内に PyTorch を導入するところまでを案内する。

配布対象は、研究室所属学生・新規参加者・環境を再構築するメンバーを想定する。資料の設計方針は次の 3 点である。

再現しやすい
Windows 側・Ubuntu 側・VS Code 側の操作を明確に分離する。
コピーしやすい
コマンドはすべてコードブロックで記載し、そのまま貼り付けられる形にする。
汚染しにくい
仮想環境外では pip を使えない設定にして、環境の混線を避ける。

2. 採用方針

  • Linux 環境は WSL2 + Ubuntu を用いる。
  • Windows 側にインストールする GPU ドライバは NVIDIA の Windows ドライバのみ とする。WSL 内に Linux 用 GPU ドライバは入れない。
  • Python 本体は OS 付属版を直接運用せず、pyenv で管理する。
  • プロジェクトごとの依存関係は venv で分離する。
  • パッケージ導入は原則として 仮想環境内 でのみ行う。
  • インストール操作は pip 単独ではなく、原則 python -m pip を使う。
  • PyTorch は WSL 上の Ubuntu 仮想環境内 に導入する。
実務上の重要点
PyTorch を WSL 上で GPU 利用するだけなら、まずは Windows 側の WSL 対応 NVIDIA ドライバPyTorch の CUDA 対応 wheel を使う構成が最も単純である。Ubuntu 側の CUDA Toolkit は、nvcc を使う独自 CUDA コードのビルドや CUDA 拡張開発が必要になった時点で追加する運用が扱いやすい。

3. 全体の流れ

  1. Windows 側で NVIDIA ドライバを確認する
  2. VS Code の WSL 関連拡張を導入する
  3. WSL2 と Ubuntu を導入する
  4. Ubuntu を初期設定する
  5. pyenv を導入する
  6. 研究室標準の Python バージョンを導入して固定する
  7. プロジェクトディレクトリを作成する
  8. .venv を作成して有効化する
  9. 仮想環境外では pip が動かないよう設定する
  10. 仮想環境内に PyTorch を導入する
  11. GPU が使えることを確認する

4. 事前確認

項目 確認内容
OS Windows 11 を利用していること
権限 管理者権限付き PowerShell を起動できること
ネットワーク 数 GB 規模のダウンロードが可能であること
GPU NVIDIA 製 GPU を搭載していること
VS Code Windows 側にインストール済みであること
作業場所 WSL 側のホームディレクトリ配下で開発を進めること
用語の約束
本資料では、PowerShell(管理者) は Windows 側の管理者シェル、PowerShell(一般) は Windows 側の通常シェル、Ubuntu (WSL) は WSL2 上の Ubuntu ターミナルを指す。

5. Windows 側: NVIDIA ドライバ確認

1 NVIDIA ドライバを確認する
PowerShell(一般)
nvidia-smi

コマンドが実行でき、GPU 名とドライババージョンが表示されればよい。

2 必要なら Windows 側ドライバを更新する

WSL 上で CUDA を使う場合でも、基本は Windows 側の NVIDIA ドライバ を利用する。WSL 内に Linux 用 GPU ドライバを追加しないこと。

重要
WSL 上の Ubuntu 側で cuda-drivers や Linux 用 NVIDIA ドライバを入れない。WSL では Windows ドライバを利用する。
nvidia_check.png
差し替え済み: nvidia_check.png

6. VS Code の WSL 関連拡張導入

VS Code 本体はすでに Windows 側へ導入済みという前提で進める。ここでは WSL 連携に必要な拡張 を入れ、GUI で Ubuntu 側フォルダへ入る手順 も示す。

重要
まだWSL2-Ubuntuを入れていない場合、7. WSL2 + Ubuntu の導入を先に確認してください。

6.1 WSL 拡張を入れる

1 コマンドで導入する方法
PowerShell(一般)
code --install-extension ms-vscode-remote.remote-wsl

code コマンドが使えない場合は、次の UI 手順で導入する。

2 UI で導入する方法
  1. Windows 側で VS Code を起動する
  2. 左側の Extensions を開く
  3. WSL と検索する
  4. Visual Studio Code WSL を選んでインストールする
vscode_extensions.png
差し替え済み: vscode_extensions.png

6.2 GUI で WSL に接続して Ubuntu 側フォルダを開く

1 コマンドパレットから WSL 接続する
  1. VS Code を起動する
  2. F1 または Ctrl + Shift + P でコマンドパレットを開く
  3. WSL: Connect to WSL を選ぶ
  4. 既定以外のディストリビューションを使う場合は WSL: Connect to WSL using Distro... を選び、Ubuntu を指定する
2 File メニューから Ubuntu 側のフォルダを開く
  1. WSL 接続後の VS Code ウィンドウで File > Open Folder... を選ぶ
  2. Ubuntu 側のフォルダ選択画面で /home/<ユーザー名>/workspace へ移動する
  3. フォルダ一覧の中から対象ディレクトリを選び、OK または Open を押す
3 GUI で WSL 側へ移動する具体例
  1. 左下が WSL: Ubuntu になっていることを確認する
  2. File > Open Folder... を押す
  3. フォルダ選択ダイアログで /home を開く
  4. 続けて /home/<ユーザー名> を開く
  5. workspace が無ければ Ubuntu ターミナルで mkdir -p ~/workspace を実行してから、もう一度開く
  6. 最終的に /home/<ユーザー名>/workspace/<プロジェクト名> を開く
見分け方
エクスプローラーやファイル選択画面で /home/... のような Linux パスが見えていれば、Windows 側ではなく WSL 側を開いている。

左下に WSL: Ubuntu のような表示が出ていれば、現在の VS Code ウィンドウは WSL 上の Ubuntu に接続されている。

connect_to_wsl.png
差し替え済み: connect_to_wsl.png

6.3 ターミナルから Ubuntu 側フォルダを開く

Ubuntu (WSL)
mkdir -p ~/workspace
cd ~/workspace
code .

この方法でも同様に、VS Code の左下に WSL: Ubuntu の表示が出ればよい。

6.4 Python 拡張を WSL 側へ入れる

Python 拡張は、Windows 側で入っていても、WSL リモート側に別途入れる必要がある 場合がある。WSL 接続中の VS Code で拡張画面を開き、Install in WSL を押して導入する。

python.png
差し替え済み: python.png

7. WSL2 + Ubuntu の導入

1 WSL と Ubuntu を導入する
PowerShell(管理者)
wsl --install -d Ubuntu

実行後、必要に応じて再起動する。

2 WSL を更新する
PowerShell(管理者)
wsl --update
3 Ubuntu を初回起動して Linux ユーザーを作成する

スタートメニューから Ubuntu を開き、表示に従って Linux 用ユーザー名とパスワードを設定する。Windows のアカウントとは別である。

4 WSL の状態を確認する
PowerShell(一般)
wsl --status
wsl -l -v

wsl -l -vVERSION2 であることを確認する。

5 もし WSL1 なら WSL2 に変更する
PowerShell(一般)
wsl --set-version Ubuntu 2
wsl_status.png
差し替え済み: wsl_status.png

8. Ubuntu 初期設定

8.1 パッケージ更新

Ubuntu (WSL)
sudo apt update
sudo apt upgrade -y

8.2 pyenv ビルド依存を入れる

Ubuntu (WSL)
sudo apt install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev curl git wget ca-certificates \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev \
libffi-dev liblzma-dev
作業ディレクトリ
研究室の Python プロジェクトは、原則として ~/workspace などの WSL 側ファイルシステム に配置する。/mnt/c/... 配下を常用すると、権限・速度・パスの扱いで混線しやすい。

8.3 作業用ディレクトリを作成する

Ubuntu (WSL)
mkdir -p ~/workspace
cd ~/workspace

9. pyenv 導入

9.1 pyenv をインストールする

Ubuntu (WSL)
curl -fsSL https://pyenv.run | bash

9.2 シェル初期化ファイルへ追記する

Ubuntu (WSL)
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init - bash)"' >> ~/.bashrc

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile
echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile
echo 'eval "$(pyenv init - bash)"' >> ~/.profile

9.3 反映する

Ubuntu (WSL)
exec "$SHELL"

9.4 動作確認

Ubuntu (WSL)
pyenv --version
which pyenv

10. Python 導入とバージョン固定

研究室で Python のバージョンを統一しておくと、依存関係の差異を減らせる。本資料では、研究室推奨 Python を 3.12 系の最新パッチ版 とし、現時点では Python 3.12.13 を使う。

Ubuntu (WSL)
export PYTHON_VERSION=3.12.13
pyenv install $PYTHON_VERSION

mkdir -p ~/workspace/pytorch-env
cd ~/workspace/pytorch-env

pyenv local $PYTHON_VERSION

python --version
pyenv version
cat .python-version

pyenv local により、そのディレクトリ配下では指定した Python バージョンが使われる。

11. venv 作成

11.1 仮想環境を作成する

Ubuntu (WSL)
cd ~/workspace/pytorch-env
python -m venv .venv

11.2 仮想環境を有効化する

Ubuntu (WSL)
source .venv/bin/activate

11.3 基本確認

Ubuntu (WSL)
which python
python --version
python -m pip --version
確認ポイント
which python の結果が .../pytorch-env/.venv/bin/python を指していればよい。

12. 仮想環境外で pip を止める

研究室内での環境汚染を避けるため、仮想環境を有効化していない状態では pip 系の操作を禁止 する。

12.1 pip 設定ファイルを作成する

Ubuntu (WSL)
mkdir -p ~/.config/pip

cat <<'EOF' > ~/.config/pip/pip.conf
[global]
require-virtualenv = true
EOF

12.2 仮想環境の中では通常どおり使えることを確認する

Ubuntu (WSL)
source ~/workspace/pytorch-env/.venv/bin/activate
python -m pip install --upgrade pip setuptools wheel

12.3 仮想環境の外では止まることを確認する

Ubuntu (WSL)
deactivate
cd ~/workspace/pytorch-env
python -m pip install numpy
期待される結果
仮想環境外ではエラーで停止する。これで、誤ってグローバル側へパッケージを入れる事故を減らせる。

12.4 続きの作業のため、仮想環境を再度有効化する

Ubuntu (WSL)
source ~/workspace/pytorch-env/.venv/bin/activate

13. PyTorch 導入

13.1 Ubuntu から GPU が見えることを確認する

Ubuntu (WSL)
nvidia-smi

GPU 名が表示されればよい。WSL 上の nvidia-smi は制限付き表示になる場合があるが、GPU が見えていれば問題ない。

13.2 PyTorch のインストールコマンドを決める

PyTorch は、公式のインストールページから Stable / Linux / Pip / Python / CUDA を選び、表示されたコマンドをそのまま使う。研究室資料として配布する場合は、その時点で採用する CUDA 系列を決めて、次のブロックへ固定値を入れておくとよい。

Ubuntu (WSL) / 仮想環境有効化済み
python -m pip install torch torchvision torchaudio --index-url <ここに研究で採用する PyTorch の公式 index-url を入れる>

13.3 例:CUDA 12.6を使用する場合

Ubuntu (WSL) / 仮想環境有効化済み
pip3 install torch torchvision --index-url https://download.pytorch.org/whl/cu126
補足
WSL 上で PyTorch を使うだけなら、まずは PyTorch 公式 wheel で進めるのが簡潔である。Ubuntu 側に CUDA Toolkit を別途入れるのは、nvcc を使うコードや独自 CUDA 拡張を扱うときでよい。
PyTorch.png
差し替え済み: PyTorch.png

14. 動作確認

14.1 バージョン確認

Ubuntu (WSL) / 仮想環境有効化済み
python -c "import torch; print(torch.__version__)"

14.2 GPU 利用可否の確認

Ubuntu (WSL) / 仮想環境有効化済み
python -c "import torch; print(torch.cuda.is_available())"

14.3 デバイス名まで確認する

Ubuntu (WSL) / 仮想環境有効化済み
python -c "import torch; print(torch.cuda.get_device_name(0) if torch.cuda.is_available() else 'GPU unavailable')"

14.4 まとめて確認する

Ubuntu (WSL) / 仮想環境有効化済み
python - <<'PY'
import torch

print("torch version:", torch.__version__)
print("cuda available:", torch.cuda.is_available())
if torch.cuda.is_available():
    print("device count:", torch.cuda.device_count())
    print("device name:", torch.cuda.get_device_name(0))
PY
完了条件
torch.cuda.is_available()True を返し、GPU 名が取得できれば、この資料の構築目標は達成である。

15. よくある問題

15.1 wsl -l -v で VERSION が 1 になっている

PowerShell(一般)
wsl --set-version Ubuntu 2

15.2 Ubuntu 側で nvidia-smi が見えない

  • Windows 側ドライバが古い、または WSL 対応ドライバが未導入の可能性がある
  • wsl --update を実行して WSL を更新する
  • Windows を再起動して再確認する

15.3 code . が動かない

  • VS Code インストール時に PATH 追加が有効でない可能性がある
  • Windows 側から VS Code を起動し、WSL 拡張を導入済みか確認する

15.4 pyenv install が途中で失敗する

  • Ubuntu のビルド依存が不足している場合がある
  • 先に記載した apt install 群を再確認する

15.5 python -m pip install ... が仮想環境外で失敗する

正常である。require-virtualenv = true を設定しているため、仮想環境外では停止する。

16. 補足: CUDA の複数バージョンを使い分ける

この補足は、PyTorch の仮想環境を用途ごとに分けたい場合 と、nvcc を使う CUDA 開発や拡張ビルドを行う場合 の両方を想定している。

cuda-toolkit-11-8を入れる場合
WSL2のOSのUbuntu24.04のバージョンにとってCUDAの11.8バージョンは古いため正式にはサポートされていません。よって下記に説明する内容は11.8のバージョンで説明をしていますが、Ubuntu24.04を使用する際は留意してください。
Ubuntu (WSL)
lsb_release -a
これでOSのバージョンを確認してみてください。
重要
WSL では Windows 側の NVIDIA ドライバ を利用する。Ubuntu 側に Linux 用 GPU ドライバを追加しないこと。

16.1 どの使い分け方を採用するか

方法 向いている用途 特徴
方法 A: PyTorch wheel を仮想環境ごとに分ける 学習・推論・既存研究コードの実行が主目的 最も簡単で安全。プロジェクトごとに cu118 / cu126 / cu128 などを切り替える。
方法 B: Ubuntu 側に CUDA Toolkit を複数入れる nvcc を使うビルド、CUDA サンプル、PyTorch C++/CUDA 拡張 cuda-toolkit-12-6 のような固定版パッケージを side-by-side で共存させる。

16.2 方法 A: 仮想環境ごとに PyTorch wheel を分ける

PyTorch を使うだけなら、まずはこちらを優先する。CUDA の差分を 仮想環境単位 で分離できるため、運用が簡単である。

例: CUDA 11.8 系の仮想環境

Ubuntu (WSL)
mkdir -p ~/workspace/torch-cu118
cd ~/workspace/torch-cu118
pyenv local 3.12.13
python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip setuptools wheel
python -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

例: CUDA 12.6 系の仮想環境

Ubuntu (WSL)
mkdir -p ~/workspace/torch-cu126
cd ~/workspace/torch-cu126
pyenv local 3.12.13
python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip setuptools wheel
python -m pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126
推奨
研究室で複数のプロジェクトを同時に扱う場合は、まず 方法 A で十分なことが多い。Ubuntu 側の CUDA Toolkit を増やさずに済む。

16.3 方法 B: Ubuntu 側に CUDA Toolkit を複数入れる

nvcc を使う場合は、WSL 向けの CUDA 手順に従って version-pinned package を入れる。研究室資料では、WSL-Ubuntu 用の公式ページをその時点で再確認 してから配布する運用が安全である。

方針
cudacuda-drivers を無造作に入れず、cuda-toolkit-12-6 のような固定版パッケージを明示的に選ぶ。

例: 12.6 と 11.8 を共存させる

Ubuntu (WSL)
sudo apt update
sudo apt install cuda-toolkit-12-6 cuda-toolkit-11-8
上記のコマンドで入らない場合(WSL2-Ubuntuの場合)
CUDA Toolkitのダウンロードページに入り、希望のリリースバージョンを選択後、下の参照画像の選択を行い画像内の出力されたコマンドをコピーしコマンド画面から実行してください。
CUDA-Toolkit_install.png
差し替え済み: CUDA-Toolkit_install.png

指定したバージョンが入っているかを確認

Ubuntu (WSL)
ls -d /usr/local/cuda*

例: プロジェクト単位で CUDA 12.6 を使う

Ubuntu (WSL)
cat <<'EOF' > ~/workspace/use-cuda-12.6.sh
export CUDA_HOME=/usr/local/cuda-12.6
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:${LD_LIBRARY_PATH}
nvcc --version
EOF

source ~/workspace/use-cuda-12.6.sh

例: プロジェクト単位で CUDA 11.8 を使う

Ubuntu (WSL)
cat <<'EOF' > ~/workspace/use-cuda-11.8.sh
export CUDA_HOME=/usr/local/cuda-11.8
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:${LD_LIBRARY_PATH}
nvcc --version
EOF

source ~/workspace/use-cuda-11.8.sh

16.4 /usr/local/cuda の向き先を切り替える方法

ビルドスクリプトが /usr/local/cuda を前提にしている場合だけ、シンボリックリンクを切り替える。

Ubuntu (WSL)
sudo ln -sfn /usr/local/cuda-12.6 /usr/local/cuda
ls -l /usr/local/cuda
nvcc --version
Ubuntu (WSL)
sudo ln -sfn /usr/local/cuda-11.8 /usr/local/cuda
ls -l /usr/local/cuda
nvcc --version
注意
共有資料では、グローバルなシンボリックリンク切替より、プロジェクト別の環境変数切替 を先に推奨する方が事故が少ない。
CUDA-multi.png
差し替え済み: CUDA-multi.png

17. 参考リンク

環境構築班用設定
この HTML は画像埋め込み済みです。