【CUDA】venv+PyTorchの環境構築【Windows】

【CUDA】venv+PyTorch環境構築

本記事はアフィリエイト広告(PR)を含みます

GPU版PyTorchはバージョンの依存関係が強いので仮想環境を作ってインストールするのが基本です。
Windowsの場合、仮想環境の構築はAnacondaが便利ですが商用利用には有償ライセンスを購入する必要があるようです。

そこで今回はPython標準機能のvenvで仮想環境を構築し、GPU版PyTorch(CUDA)をインストールしてみます。

OSとGPU環境は以下の通りです。

  • Windows 11 Home
  • Geforce RTX 5070 Ti

1. venvで環境構築する際の注意点

本記事はPyTorchをvenv+pipで導入するところまでを対象とします。
OpenCV(CUDA対応版)やONNX Runtime GPUなど、PyTorch 以外にも CUDA を使用するライブラリは存在しますが、これらを併用する場合はCUDAのバージョンを揃える必要があります

AnacondaはCUDAや各種ライブラリの依存関係を自動的に解決してくれるため、個人の検証環境では非常に便利です。一方、本記事では商用利用や再配布のしやすさを重視し、Python標準のvenvを使用して構築します。

また、venvはPythonに付属する機能のため、事前にPython本体をインストールしておく必要があります
PyTorchはバージョンごとに対応するPythonのバージョンが決まっているため、Pythonをインストールする前に、使用したいPyTorchに対応するPythonバージョンを必ず確認してください。

スポンサーリンク

2. NVIDIAドライバーのインストール

Windowsの場合、実質CUDA版PyTorchしかサポートされていないのでCUDAが利用可能なNVIDIAのGPUが必要になります。

NVIDIAドライバーがインストールされていない場合は公式サイトから環境に合わせたインストーラーをダウンロードしてインストールしてください。

動画編集などクリエイターの場合はNVIDIA Studioドライバーを選択します。

そしてダウンロードボタンを押してダウンロードします。

インストーラーを起動したら一時ファイルを展開する場所を指定するウィンドウが表示されるのでOKを押します。

インストーラーが起動するので、ドライバーだけインストールする場合は「NVIDIAグラフィックスドライバー」を選択します。
NVIDIA Appはゲーマー向けの統合アプリなので今回はインストールしません。

インストールオプションは「カスタム」を選択します。
ゲーム用途の場合は設定を引き継ぐ必要があるので高速が推奨されるのですが、今回は開発用途でドライバーのみクリーンインストールするためカスタムを選択します。

NVIDIA Appのチェックが外れていることを確認し、「クリーンインストールの実行」にチェックを入れてインストールを開始します。
※インストール中に画面が消えたり画質が悪くなったりしますがインストールが終われば戻ります。

無事にインストールが完了しました。

3. NVIDIAドライバーとCUDAバージョンの確認

コマンドプロンプトを開き、以下のコマンドでドライバーのバージョンを確認します。

nvidia-smi

ドライバーがインストールしたバージョンになっていることが確認できます。
ここで対応CUDAバージョンを確認します。
13.1になっているのでCUDAバージョン13.1までのAPIをサポートしていることになります。

スポンサーリンク

4. PyTorchとPythonのバージョン確認

4.1. PyTorchのバージョンを決める

まずはどのPyTorchをインストールするかを決めます。
PyTorchも対応するCUDAバージョンによってインストーラーが分かれており、ここを間違えるとCUDAが認識しないといったトラブルが起こります。
先ほどインストールしたNVIDIAドライバーではCUDAバージョン13.1まで対応していたのでCUDA13.1まで対応しているPyTorchをインストールすれば良いことになります。
※ CUDA 13.1でビルドされたアプリケーションを実行できるという意味であり、CUDA Toolkit 13.1 がインストールされているわけではありません。

公式サイトでは安定板として13.0まで配布されているのでどれを入れてもいいように見えますが、ここにも落とし穴があります

RTX 50シリーズで採用されているBlackwellと呼ばれるアーキテクチャはCUDA 12.8で全面サポートされました。つまりCUDA 12.6以下だと最適化されていない可能性があります。
以前5070 Tiが入ったPCでCUDA 11.8対応版LibTorchの推論を実行しようとした際にライブラリの読み込みでエラーが出て、CUDA 12.8対応のライブラリに差し替えたら動作したという経験があります。
よってRTX 50シリーズの場合はCUDA 12.8以降を選択するのが安全だと思います。

4.2. Pythonバージョンを決める

次に、インストールする予定のPyTorchに対応するPythonのバージョンを確認します。
2026年1月現在、PyTorchの最新バージョンは2.10.0なので、これに対応するPythonバージョンを探します。

CUDAバージョンPythonバージョン
12.63.10~3.14
12.83.10~3.14
13.03.10~3.14

CUDA 12.4以下は最新のPyTorchバージョンに対応していないので省きます。
現状ではPython3.10~3.14なら問題なさそうです。

ここは最新の3.14…といきたいところですが、PyTorchやNumPyなどの周辺ライブラリとの互換性が高く、安定している3.11か3.12を選ぶのが無難です。

4.3. torchvisionのバージョン確認

torchvisionはPytorchで画像処理や画像認識を行うための公式拡張ライブラリで、

  • データセット
  • 学習済みモデル(ResNet50やVGG16など)
  • 前処理(リサイズやデータ拡張など)

などの機能が提供されています。
PyTorchをインストールするなら必須といってもいいので、こちらも併せてインストールします。

ただ、torchvisionもPyTorchのバージョンごとに対応しているバージョンが異なるので、事前に確認しておく必要があります。

PyTorchバージョンとtorchvisionバージョンの対応関係は公式のGitHubから確認することができます。
今回はPyTorch2.10.0なのでtorchvisionは0.25.0をインストールします。

ということで、今回インストールするバージョンは以下の通りです。

  • Python 3.12
  • PyTorch 2.10.0 (CUDA 13.0対応版)
  • torchvision 0.25.0

5. PyTorchのインストール

PyTorchをインストールする前にPythonのインストールとvenvの環境構築を行います。

Pythonインストールとvenvの環境構築はそれぞれ別記事で解説しています。
※ Pythonは公式サイトからダウンロードしましょう。
一応Microsoft Storeでもダウンロードできますが、こちらはPyTorchなどを使用する環境ではDLLのロード制限により動作しないケースがあるため、本記事では公式サイトからダウンロードします。

5.1. 仮想環境構築

Visual Studio Codeのインタープリターでも仮想環境の作成は可能です。

そしてターミナルを開くと仮想環境が生成されてアクティベートされたのが確認できました。
この時、pipは自動で更新されます。

5.2. PyTorchのインストール

ようやくPyTorchのインストールに入ります。
公式サイトに記載されているコマンドなら現環境のPythonに対応した最新のPyTorchを自動でインストールされますが、本記事では再現性を重視してバージョン指定でインストールすることにします。

python -m pip install torch==2.10.0 torchvision==0.25.0 --index-url https://download.pytorch.org/whl/cu130
コマンド・オプション解説
python -m pip installアクティブなPythonのpip installを実行
torch==2.10.0PyTorch 2.10.0指定
torchvision==0.25.0torchvision 0.25.0指定
–index-url https://download.pytorch.org/whl/cu130パッケージの取得先をPyTorch公式のCUDA 13.0(cu130)対応ホイール置き場に指定

Looking in indexes: https://download.pytorch.org/whl/cu130
Collecting torch==2.10.0
  Downloading https://download.pytorch.org/whl/cu130/torch-2.10.0%2Bcu130-cp312-cp312-win_amd64.whl.metadata (29 kB)
Collecting torchvision==0.25.0
  Downloading https://download.pytorch.org/whl/cu130/torchvision-0.25.0%2Bcu130-cp312-cp312-win_amd64.whl.metadata (5.5 kB)
Collecting filelock (from torch==2.10.0)
  Downloading filelock-3.20.0-py3-none-any.whl.metadata (2.1 kB)
Collecting typing-extensions>=4.10.0 (from torch==2.10.0)
  Downloading https://download.pytorch.org/whl/typing_extensions-4.15.0-py3-none-any.whl.metadata (3.3 kB)
Collecting sympy>=1.13.3 (from torch==2.10.0)
  Downloading sympy-1.14.0-py3-none-any.whl.metadata (12 kB)
Collecting networkx>=2.5.1 (from torch==2.10.0)
  Downloading networkx-3.6.1-py3-none-any.whl.metadata (6.8 kB)
Collecting jinja2 (from torch==2.10.0)
  Downloading https://download.pytorch.org/whl/jinja2-3.1.6-py3-none-any.whl.metadata (2.9 kB)
Collecting fsspec>=0.8.5 (from torch==2.10.0)
  Downloading fsspec-2025.12.0-py3-none-any.whl.metadata (10 kB)
Collecting setuptools (from torch==2.10.0)
  Downloading https://download.pytorch.org/whl/setuptools-70.2.0-py3-none-any.whl.metadata (5.8 kB)
Collecting numpy (from torchvision==0.25.0)
  Downloading numpy-2.3.5-cp312-cp312-win_amd64.whl.metadata (60 kB)
Collecting pillow!=8.3.*,>=5.3.0 (from torchvision==0.25.0)
  Downloading pillow-12.0.0-cp312-cp312-win_amd64.whl.metadata (9.0 kB)
Collecting mpmath<1.4,>=1.1.0 (from sympy>=1.13.3->torch==2.10.0)
  Downloading mpmath-1.3.0-py3-none-any.whl.metadata (8.6 kB)
Collecting MarkupSafe>=2.0 (from jinja2->torch==2.10.0)
  Downloading https://download.pytorch.org/whl/MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl (17 kB)
Downloading https://download.pytorch.org/whl/cu130/torch-2.10.0%2Bcu130-cp312-cp312-win_amd64.whl (1867.4 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.9/1.9 GB 8.4 MB/s  0:04:07
Downloading https://download.pytorch.org/whl/cu130/torchvision-0.25.0%2Bcu130-cp312-cp312-win_amd64.whl (8.9 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.9/8.9 MB 7.1 MB/s  0:00:01
Downloading fsspec-2025.12.0-py3-none-any.whl (201 kB)
Downloading networkx-3.6.1-py3-none-any.whl (2.1 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 7.7 MB/s  0:00:00
Downloading pillow-12.0.0-cp312-cp312-win_amd64.whl (7.0 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 7.0/7.0 MB 10.3 MB/s  0:00:00
Downloading sympy-1.14.0-py3-none-any.whl (6.3 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.3/6.3 MB 9.0 MB/s  0:00:00
Downloading mpmath-1.3.0-py3-none-any.whl (536 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 536.2/536.2 kB 17.1 MB/s  0:00:00
Downloading https://download.pytorch.org/whl/typing_extensions-4.15.0-py3-none-any.whl (44 kB)
Downloading filelock-3.20.0-py3-none-any.whl (16 kB)
Downloading https://download.pytorch.org/whl/jinja2-3.1.6-py3-none-any.whl (134 kB)
Downloading numpy-2.3.5-cp312-cp312-win_amd64.whl (12.8 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 12.8/12.8 MB 10.4 MB/s  0:00:01
Downloading https://download.pytorch.org/whl/setuptools-70.2.0-py3-none-any.whl (930 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 930.8/930.8 kB 7.1 MB/s  0:00:00
Installing collected packages: mpmath, typing-extensions, sympy, setuptools, pillow, numpy, networkx, MarkupSafe, fsspec, filelock, jinja2, torch, torchvision
Successfully installed MarkupSafe-2.1.5 filelock-3.20.0 fsspec-2025.12.0 jinja2-3.1.6 mpmath-1.3.0 networkx-3.6.1 numpy-2.3.5 pillow-12.0.0 setuptools-70.2.0 sympy-1.14.0 torch-2.10.0+cu130 torchvision-0.25.0+cu130 typing-extensions-4.15.0
スポンサーリンク

6. 動作確認

まずはPyTorchとtorchvisionのバージョン確認、cudaが利用可能か確認してみます。

import torch
import torchvision

print(torch.__version__)
print(torchvision.__version__)

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print(device)

実行結果はこちら。
正常にインストールされていることが確認できました。

6.1. MNISTの実行

最後にMNISTを実行して正しく動作することを確認します。

import torch
from torchvision import datasets, transforms
from torch.utils.data import DataLoader

# 使用デバイスの決定(最新スタイル)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
print("デバイス:", device)

# 前処理
transform = transforms.Compose([
    transforms.ToTensor(),                      #Tensor変換
    transforms.Normalize((0.1307,), (0.3081,))  #正規化(Mnistの平均と標準偏差)
])

# MNISTデータセット読み込み
train_dataset = datasets.MNIST(
    root="./data",
    train=True,
    download=True,
    transform=transform
)

# データローダー
train_loader = DataLoader(
    train_dataset,
    batch_size=64,
    shuffle=True
)

# 1バッチだけ取り出して実行確認
images, labels = next(iter(train_loader))
images = images.to(device)
labels = labels.to(device)

print("画像データ形状:", images.shape)
print("ラベルデータ形状:", labels.shape)
print("出力[10個]:", labels[:10])

実行結果はこちら。

デバイス: cuda
100.0%
100.0%
100.0%
100.0%
画像データ形状: torch.Size([64, 1, 28, 28])
ラベルデータ形状: torch.Size([64])
出力[10個]: tensor([5, 7, 0, 8, 3, 8, 5, 4, 2, 2], device='cuda:0')

正常に動作することが確認できました。

今回は以上です。

7. 参考サイト

https://download.pytorch.org/whl/torch

8. 関連書籍

スポンサーリンク

コメント

タイトルとURLをコピーしました