PyTorch(パイトーチ)は、Pythonでニューラルネットワークを組み、学習させ、推論に使うためのオープンソースのライブラリです。この記事では、PyTorchで何ができるのか、TensorFlowやKerasとどう違うのかを整理したうえで、2026年10月時点の最新版2.14.1を前提にOS別のインストール手順と最小コードを示します。2.x系で起きた変化(torch.compileの導入、TorchServeの開発終了、conda配布の終了)も扱うので、数年前の解説記事で覚えた手順を更新したい人にも使えます。
まとめ
- PyTorchとは:Meta(旧Facebook)のAI研究部門が開発し、2022年9月からLinux Foundation傘下のPyTorch Foundationが運営する機械学習ライブラリ。ライセンスはBSD-3-Clauseで、商用利用も無料。
- 最新版は2.14.1(2026年9月30日公開):Python 3.10以上が必要。2026年はおよそ2か月ごとにマイナー版が出ている。
- インストールは pip が基本:公式のconda配布は2.6以降では行われない。LinuxではそのままpipするとCUDA 13.0版、WindowsではCPU版が入る。GPU版は公式の
--index-urlを指定する。 - TensorFlowとの選び方:これから学ぶなら、生成AI・LLMの周辺ツールがPyTorch前提でそろっているPyTorchを選ぶ。既存のTensorFlow資産を使い続ける場合はTensorFlowを優先する。モバイル向けのLiteRTはPyTorchモデルも変換できるので、それだけでTensorFlowを選ぶ理由にはならない。
- 2.x系での変化:高速化は
torch.compileが標準の入口になり、TorchScriptは非推奨になった。推論サーバーのTorchServeは2025年8月にアーカイブされたため、新規採用はしない。
PyTorchとは:読み方・開発元・ライセンス
PyTorchは「パイトーチ」と読みます。Lua言語で書かれた機械学習ライブラリ「Torch」の設計をPython向けに作り直したもので、名前はPythonとTorchを組み合わせています。開発を始めたのはMetaのAI研究部門FAIRで、2016年に開発が始まり、2017年に一般公開されました。
2022年9月12日、PyTorchはLinux Foundationの最上位プロジェクト「PyTorch Foundation」へ移管されました(PyTorch公式ブログの移管告知)。現在はMeta単独の製品ではなく、複数企業が参加する中立の団体が運営しています。
ライセンスは、本体の pyproject.toml に「The main Pytorch project license is BSD-3-Clause.」と明記されています。BSD-3-Clauseは商用利用を認めており、再配布時の条件は著作権表示・条件・免責条項の保持と、権利者や貢献者の名前を許可なく宣伝に使わないことです。なお、PyPIのtorchパッケージのライセンス欄にはApache-2.0やMITなども並びます。これは同梱しているサードパーティ部品のライセンスで、配布物に組み込む場合はそれらの表示義務も確認してください。
torchとPyTorchの違い
Pythonで使うときのパッケージ名とimport名は、どちらも torch です。PyPIの pytorch という名前のパッケージは誘導用の空箱で、入れようとするとYou tried to install "pytorch". The package named for PyTorch is "torch"と表示されます。一方、単に「Torch」と書かれている場合は、PyTorchの前身であるLua版を指していることがあります。
PyTorchでできること:画像・言語・音声・生成AI
主な分野と、分野ごとに使う公式・周辺ライブラリは次のとおりです。
- 画像認識:画像分類、物体検出、セグメンテーション。公式のtorchvisionに学習済みモデルとデータセットの読み込み機能があります。分類モデルの実装例は「EfficientNetV2をPyTorchで使う画像分類の実装ガイド(S・M・Lの選び方と転移学習)」で扱っています。
- 自然言語処理・LLM:文章分類、翻訳、要約、LLMのファインチューニングと推論。Hugging Face Transformersは READMEで動作要件を「PyTorch 2.6+」としており、v5でモデル定義のバックエンドをPyTorchに一本化しました。周辺のエコシステムは「Hugging Face(ハギングフェイス)とは?できること・料金・使い方【2026年9月】」にまとめています。
- 音声処理:音声認識、話者分離、音声合成。torchaudioはスペクトログラムやMFCCなどの前処理を提供しますが、後述のとおり保守フェーズに入っています。
- 生成AI・研究:拡散モデルによる画像生成や、新しいアーキテクチャの再現実験。論文の公開実装がPyTorchで書かれていることが多く、読んで動かすにはPyTorchの知識が要ります。
PyTorchの仕組み:テンソル・autograd・nn.Module
PyTorchのコードは、ほぼ次の3つの部品の組み合わせでできています。
テンソル:GPUで計算できる多次元配列
テンソル(torch.Tensor)はNumPyの配列に近い多次元配列で、スライスや行列積の書き方もほぼ同じです。違いは、.to("cuda") のように1行でGPUへ移せることと、計算の履歴を記録して微分に使えることです。NumPy自体の基本は「NumPyとは?読み方・インストール・基本的な使い方をPythonで解説」を参照してください。
autograd:計算グラフと勾配の自動計算
requires_grad=True を付けたテンソルから計算すると、PyTorchは計算の手順をその場でグラフとして記録します(define-by-run、動的計算グラフ)。backward() を呼ぶと、そのグラフを逆にたどって勾配を自動で求めます。Pythonの if や for で計算の形が毎回変わってもそのまま微分でき、途中でprintやデバッガーを挟めるのが、PyTorchが研究で好まれた理由です。勾配計算の原理は「誤差逆伝播法とは?連鎖律で勾配を求める仕組みと自動微分の実装判断を解説」で詳しく扱っています。
nn.Module:層とパラメータをまとめる単位
モデルは torch.nn.Module を継承したクラスで定義し、__init__ で層を作り、forward で計算の流れを書きます。層が持つ重みは自動でパラメータとして登録され、model.parameters() でまとめて最適化器(torch.optim)に渡せます。データは Dataset と DataLoader でミニバッチに分けて流します。
PyTorchのインストール:2.14時点のOS別コマンド
2026年10月時点の最新安定版は2.14.1で、PyPIのtorchによるとPython 3.10以上が必要です。PyPIで配布されるのは3.10〜3.14向けです。2.14のリリース告知によるとPython 3.15向けはdownload.pytorch.orgからのみ配布され、3.15では torch.compile を呼ぶとRuntimeErrorになります。compileを使うなら3.14以下にしてください。インストールは仮想環境を作ってからpipで行います。
環境ごとの公式コマンド
公式のGet Startedページのセレクターが2.14.1で表示するコマンドを、環境別に並べると次のとおりです。同じ pip3 install torch torchvision でも、OSによって入るビルドが違う点に注意してください。
| OS | 計算環境 | --index-url の指定 |
|---|---|---|
| Linux | CUDA 13.0 | 不要(PyPIの既定) |
| Linux | CUDA 12.6 | whl/cu126 |
| Linux | CUDA 13.2(試験提供) | whl/cu132 |
| Linux | CPUのみ | whl/cpu |
| Linux | AMD GPU(ROCm 7.14) | whl/rocm7.14 |
| Windows | CPUのみ | 不要(PyPIの既定) |
| Windows | CUDA 12.6/13.0/13.2 | whl/cu126/cu130/cu132 |
| macOS | CPU・Apple GPU(MPS) | 不要(CUDAは非対応) |
たとえばWindowsでCUDA 13.0版を入れる場合と、LinuxでGPUを使わない場合のコマンドは次のようになります。
# Windows・CUDA 13.0
pip3 install torch torchvision --index-url https://download.pytorch.org/whl/cu130
# Linux・CPUのみ(CUDA版より大幅に小さい)
pip3 install torch torchvision --index-url https://download.pytorch.org/whl/cpu
CUDA版は、ドライバーの対応範囲とGPUの世代の両方で選びます。CUDA 13.x版はMaxwell・Pascal・Volta世代(GTX 10シリーズやTesla V100など)に対応しないため、PyTorchの告知どおりこれらのGPUではCUDA 12.6版を選びます。CUDAとドライバーの関係は「CUDAとは?読み方・仕組み・CUDAコア・バージョン13までNVIDIAのGPU並列計算を解説」を参照してください。
condaとtorchaudioの扱い
以前の解説記事でよく見る conda install pytorch -c pytorch では、公式チャネルから2.6以降を導入できません。旧版の配布は残っています。PyTorch 2.6のリリース告知に「Starting with this release we are not going to publish on Conda」とあり、公式のconda配布は2.6以降では行われません。conda環境を使う場合も、環境の中でpipを実行して入れます。
公式コマンドから torchaudio が外れているのにも理由があります。torchaudioのリポジトリは保守フェーズへの移行を告知しており、最新版の2.11は「torch 2.11以降のすべての版で動く」とされています。torchの版を上げるたびにtorchaudioを入れ直す必要はなく、音声の前処理が要るときだけ pip install torchaudio を追加します。
インストールの確認
入ったかどうかは、次の1行で版とGPUの認識を確かめられます。
python -c "import torch; print(torch.__version__, torch.cuda.is_available())"
NVIDIA GPUがあるのに False と出る場合、多くはCPU版が入っています。Windowsで --index-url を付けずにpipした場合がこれに当たります。pip uninstall torch torchvision で消してから、上の表のCUDA版を入れ直してください。Apple Silicon搭載のMacでは torch.backends.mps.is_available() でGPU(MPS)の可否を確かめます。
PyTorchの基本的な使い方:テンソルから学習・保存まで
ここからのコードは、torch 2.2.2(Python 3.11、macOSのCPU)で実行し、記載の出力を得たものです。使っているAPIは2.14でも変わっていません。
テンソルの演算とNumPyとの変換
四則演算や行列積(@)はNumPyと同じ感覚で書けます。torch.from_numpy() で作ったテンソルは元の配列とメモリを共有するため、片方を書き換えるともう片方も変わります。コピーが必要なら torch.tensor(a) を使います。
import numpy as np
import torch
x = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
y = torch.ones(2, 2)
print(x + y) # tensor([[2., 3.], [4., 5.]])
print(x @ y) # tensor([[3., 3.], [7., 7.]])
a = np.array([1.0, 2.0, 3.0])
t = torch.from_numpy(a) # aとメモリを共有する
a[0] = 100.0
print(t) # tensor([100., 2., 3.], dtype=torch.float64)
print(t.numpy()) # [100. 2. 3.]
autogradによる微分計算の実装例
(w+1)² をw=3で微分すると、理論値は 2w+2=8 です。backward() を呼ぶと、その値が w.grad に入ります。
import torch
w = torch.tensor(3.0, requires_grad=True)
loss = w ** 2 + 2 * w + 1 # (w + 1)^2
loss.backward()
print(w.grad.item()) # 8.0
nn.ModuleとDataLoaderによる学習ループの実装
傾き2.0・切片0.5の直線にノイズを足したデータを、ミニバッチ32件ずつ学習させます。「予測→損失→zero_grad→backward→step」の5行が、画像分類でもLLMのファインチューニングでも変わらないPyTorchの学習の骨格です。device を切り替えるだけで、同じコードがCUDAやApple GPUでも動きます。
import torch
from torch import nn
from torch.utils.data import TensorDataset, DataLoader
torch.manual_seed(0)
X = torch.linspace(-1, 1, 200).unsqueeze(1)
Y = 2.0 * X + 0.5 + 0.1 * torch.randn_like(X) # 正解: 傾き2.0・切片0.5
loader = DataLoader(TensorDataset(X, Y), batch_size=32, shuffle=True)
class LinearModel(nn.Module):
def __init__(self):
super().__init__()
self.fc = nn.Linear(1, 1)
def forward(self, x):
return self.fc(x)
if torch.cuda.is_available():
device = "cuda"
elif torch.backends.mps.is_available():
device = "mps"
else:
device = "cpu"
model = LinearModel().to(device)
optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
loss_fn = nn.MSELoss()
for epoch in range(50):
for xb, yb in loader:
xb, yb = xb.to(device), yb.to(device)
loss = loss_fn(model(xb), yb)
optimizer.zero_grad() # 前回の勾配を消す
loss.backward() # 勾配を計算
optimizer.step() # パラメータを更新
print(f"傾き={model.fc.weight.item():.3f}, 切片={model.fc.bias.item():.3f}")
# CPUでの出力: 傾き=1.982, 切片=0.500
zero_grad() を書き忘れると、前のバッチの勾配が累積し、意図した更新にならず学習が不安定になることがあります。PyTorchは勾配を自動では消さない設計なので、初心者が最初につまずく箇所です。より深いネットワークの組み方は「ニューラルネットワークとは?仕組み・種類・PyTorch実装まで実装目線で解説」で扱っています。
学習済みモデルの保存と読み込み
保存はモデル全体ではなく、パラメータの辞書(state_dict)を保存するのが公式の推奨です。上のコードの続きで次のように書きます。
torch.save(model.state_dict(), "model.pt")
restored = LinearModel()
restored.load_state_dict(torch.load("model.pt", map_location="cpu", weights_only=True))
restored.eval() # 推論モードに切り替える
with torch.no_grad(): # 推論では勾配を記録しない
print(restored(torch.tensor([[1.0]]))) # tensor([[2.4820]])
torch.load の weights_only は、2.6のリリースノートでセキュリティ対策として既定値が変わりました。現在の既定は True で、任意のPythonオブジェクトを含むファイルは読み込みを拒否します。古い記事のとおりモデル全体を torch.save(model) で保存すると、2.6以降では読み込みでエラーになることがあります。信頼できない配布元のファイルに weights_only=False を付けて読むのは避けてください。
PyTorch 2.x系で変わったこと:compile・TorchScript・TorchServe
2023年3月の2.0以降、性能と配布の面で次の3点が変わりました。2020年前後の記事で覚えた知識は更新が必要です。
高速化の入口はtorch.compile
torch.compile は、2023年3月15日公開の2.0で導入された機能です。既存のモデルを1行包むだけで、初回の呼び出し時にグラフを取り出して最適化したコードを生成します。
import torch
from torch import nn
model = nn.Sequential(nn.Linear(1, 16), nn.ReLU(), nn.Linear(16, 1))
compiled = torch.compile(model) # 初回の呼び出し時にコンパイルされる
x = torch.randn(8, 1)
print(torch.allclose(compiled(x), model(x))) # True
初回のコンパイルに数秒から数分かかるため、数回しか呼ばない処理では逆に遅くなります。同じ形の入力を何千回も流す学習ループや推論で使ってください。
TorchScriptは非推奨
モデルをPythonから切り離して保存・実行するTorchScript(torch.jit)は、PyTorch本体のソース(torch/jit/__init__.py)に「TorchScript is deprecated, please use torch.compile instead.」と書かれています。Hugging Face Transformersもv5でTorchScript対応を削除しました。新しくモデルを書き出すなら、torch.export か、他の実行環境へ持ち出せるONNX形式を使います。ONNXへの変換は「ONNXとは?.onnxファイルの中身・変換・ONNX Runtimeでの推論【onnx 1.23対応】」で解説しています。
TorchServeの開発終了と代替推論基盤
PyTorch公式の推論サーバーだったTorchServeは、GitHubリポジトリが2025年8月7日にアーカイブされました。READMEには「no planned updates, bug fixes, new features, or security patches」とあり、脆弱性が見つかっても修正されません。新規には採用しないでください。代わりの選択肢(Triton Inference Server、KServe、LLMならvLLMなど)は「モデルサービングとは?推論APIの構成とKServe・Triton・BentoMLの選定基準を解説【2026年版】」で比べています。
PyTorchとTensorFlow・Kerasの違いと選び方
比較対象になりやすいTensorFlowとKerasの現在の位置づけを表にまとめます。
| 項目 | PyTorch | TensorFlow | Keras |
|---|---|---|---|
| 開発・運営 | PyTorch Foundation | Google(Kerasチーム) | |
| 最新版(2026年10月) | 2.14.1 | 2.21.0 | 3.15.1 |
| 位置づけ | 深層学習の基盤 | 深層学習の基盤 | 複数基盤の上で動く高レベルAPI |
| 計算の実行方式 | 逐次実行が既定 | Eager実行が既定(2.0以降) | 選んだ基盤に従う |
| モバイル・エッジ展開 | ExecuTorch | LiteRT(旧TensorFlow Lite) | 基盤側の仕組みを使う |
計算グラフの方式は、かつて最大の違いでした。TensorFlow 1.x はグラフを先に定義してから実行する方式(define-and-run)で、PyTorchの逐次実行のほうがデバッグしやすいと言われていました。TensorFlowも2.0からEager実行が既定になり、この差は現在ほぼありません。
Kerasは、Keras 3のREADMEにあるとおりJAX・TensorFlow・PyTorchを切り替えて動くマルチバックエンドの枠組みになりました。「KerasはTensorFlow専用の簡単API」という理解は古く、PyTorchの上でKerasを使うこともできます。TensorFlow側の詳細は「TensorFlowをPythonで使う方法:対応版・インストール・GPU設定と動くコード【2026年10月】」を参照してください。
PyTorchとTensorFlowの用途別選定基準
これから機械学習を学ぶ人、LLMや画像生成のモデルを動かしたい人は、PyTorchを選んでください。Hugging Face TransformersがPyTorch専用になったことで、公開モデルの多くはPyTorchで読み込む前提になっています。
TensorFlowを選ぶ理由が残るのは、社内に学習済みのTensorFlowモデルや学習パイプラインがある場合、既存のTensorFlowからLiteRTへの変換工程を使い続ける場合、ブラウザーやNode.jsでTensorFlow.jsを使う場合です。端末に載せること自体は理由になりません。LiteRTはPyTorchモデルの変換経路(LiteRT Torch)を公式に用意しています。
PyTorchが向かない環境と注意点
次のどれかに当てはまる場合は、導入前に環境か計画を見直してください。
- Intel CPUのMac:PyPIにmacOS(x86_64)向けのwheelがあるのは2.2.2が最後です。それ以降の版を使うには、Apple Silicon搭載のMacかLinux・Windowsのマシン、またはGoogle Colabなどのクラウド環境が要ります。
- Python 3.9以前:2.14はPython 3.10以上が必要です。古いPythonのままpipすると、要件を満たす古いtorchが入るか、インストールに失敗します。
- Apple GPU(MPS)での学習:一部の演算はMPSに未実装で、CPUへの切り替えやエラーが起きます。大きなモデルの学習はCUDA環境で行い、Macで手軽に動かしたいならApple純正のMLXも候補です(「MLXとは?Apple SiliconでLLMを動かすmlx-lmの導入手順と採用判断」)。
- 学習コードの量:PyTorchは学習ループを自分で書く設計なので、検証用のログ出力や複数GPUへの分散まで含めるとコードが長くなります。定型部分を任せたい場合は「PyTorch Lightningのインストール方法とpip install lightning/pytorch-lightningの違い」で紹介しているLightningを併用します。
PyTorchで作ったモデルを業務システムへ組み込むときは、データ準備から推論APIの運用までの設計が別途必要になります。社内で体制を組めない場合は、機械学習モデル開発の支援の利用も検討してください。
よくある質問
PyTorchの読み方は?
「パイトーチ」と読みます。Python(パイソン)とTorch(トーチ)を合わせた名前です。
PyTorchは無料で商用利用できますか?
できます。本体はBSD-3-Clauseで、再配布時に著作権表示・条件・免責条項を残し、権利者や貢献者の名前を許可なく宣伝に使わなければ、商用製品にも組み込めます。同梱するサードパーティ部品のライセンス表示も必要です。
PyTorchとTensorFlowはどっちを学ぶべきですか?
特に制約がなければPyTorchです。Hugging Face Transformersなど生成AIの主要ライブラリがPyTorchを前提にしています。勤務先のシステムがTensorFlowで作られている場合は、そちらに合わせてください。
GPUがなくてもPyTorchは使えますか?
使えます。この記事のコードもすべてCPUで実行しています。大きなモデルの学習には十分なメモリと計算資源が必要です。NVIDIA GPU(CUDA)が代表的ですが、対応するAMD GPU(ROCm)なども利用できます。手元にGPUがなければ、Google Colabの無料枠でもGPUを試せます。ただし、利用制限や空き状況によりGPUを割り当てられない場合があります。
pip install pytorch でインストールできないのはなぜですか?
PyPI上のパッケージ名が torch だからです。pip install torch torchvision と入力してください。GPU版が必要な場合は、OSとCUDAの版に合った --index-url を付けます。