この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:1
更新日時:2026-05-13 10:11:16
タイトル: PyTorch
本稿は PyTorch (パイトーチ) に関する記事です。
| この記事の要点 |
- PyTorch は現代のディープラーニングで事実上の標準。研究論文の実装の大多数がこれ
- Pythonic で命令型 (eager mode)。普通の Python のように書ける → デバッグが容易
- Hugging Face / Transformers など主要 LLM エコシステムが PyTorch 前提
- 本番では
torch.compile や TorchScript / ONNX で高速化・他環境へエクスポート
- GPU が事実上必須。CUDA (NVIDIA) が主。ROCm (AMD) や MPS (Apple) も対応
|
PyTorch とは?
PyTorch は、Meta(旧 Facebook)AI Research が中心となって開発・公開しているオープンソースのディープラーニングフレームワークです。現在は PyTorch Foundation(Linux Foundation 配下)がガバナンスを担い、業界横断のプロジェクトとして運営されています。
Python で書く命令型 (eager) API と、自動微分・GPU 計算・分散学習・モデルエクスポートをすべて統合的に提供し、研究・実装・本番デプロイのすべての段階で使えるのが特徴です。
主な特徴
| 特徴 | 説明 |
| Pythonic な命令型 API | 普通の Python のようにステップ実行・デバッグ可能 |
| 自動微分 (autograd) | テンソル演算から逆伝播の勾配を自動計算 |
| GPU / TPU 対応 | CUDA、ROCm、Apple MPS、XPU(Intel)に対応 |
| 巨大なエコシステム | Hugging Face、Lightning、torchvision、torchaudio、timm 等 |
| 研究実装の事実上の標準 | 近年の論文・モデル公開の 8〜9 割が PyTorch ベース |
| 分散学習 | DDP、FSDP、DeepSpeed、Accelerate との連携 |
| 本番化 | torch.compile、TorchScript、ONNX エクスポート、TorchServe |
| モバイル / エッジ | PyTorch Mobile、ExecuTorch |
主要コンポーネント
| モジュール | 役割 |
torch | テンソル演算の中核 (NumPy + GPU + 自動微分) |
torch.nn | ニューラルネットワーク層・損失関数 |
torch.optim | 最適化アルゴリズム (SGD、Adam、AdamW 等) |
torch.utils.data | Dataset / DataLoader でデータ供給 |
torchvision | 画像系のモデル zoo・前処理・データセット |
torchaudio | 音声系 |
torchtext | テキスト系 (保守モード気味、Transformers 推奨) |
torch.distributed | 分散学習 API |
torch.compile | JIT コンパイルで実行高速化 (PyTorch 2.0+) |
最小サンプル: テンソルと自動微分
|
import torch
# テンソル作成 (GPU が使えれば cuda へ)
device = "cuda" if torch.cuda.is_available() else "cpu"
x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True, device=device)
# 順伝播 (forward)
y = (x ** 2).sum()
# 自動微分 (backward)
y.backward()
print(x.grad) # tensor([2., 4., 6.])
|
典型的な学習ループ
|
import torch, torch.nn as nn, torch.optim as optim
from torch.utils.data import DataLoader, TensorDataset
# データ
X = torch.randn(1000, 10); y = torch.randn(1000, 1)
loader = DataLoader(TensorDataset(X, y), batch_size=32, shuffle=True)
# モデル定義
model = nn.Sequential(
nn.Linear(10, 64), nn.ReLU(),
nn.Linear(64, 1),
)
loss_fn = nn.MSELoss()
opt = optim.AdamW(model.parameters(), lr=1e-3)
# 学習ループ
for epoch in range(10):
for xb, yb in loader:
pred = model(xb)
loss = loss_fn(pred, yb)
opt.zero_grad()
loss.backward()
opt.step()
print(f"epoch {epoch}: loss={loss.item():.4f}")
|
PyTorch vs TensorFlow vs JAX
| 項目 |
PyTorch |
TensorFlow / Keras |
JAX |
| 立ち位置 | 研究・実装の事実上の標準 | 本番 / モバイル / 既存資産 | 研究・XLA による高速化 |
| API | Pythonic・命令型 (eager) | Keras 高レベル / tf.function | 関数型 (jit / vmap / grad) |
| 論文実装 | 圧倒的多数 | 減少傾向 | Google 系研究で増加中 |
| 本番デプロイ | TorchScript、ONNX、TorchServe | TF Serving、TFLite、TF.js | JAX2TF、ONNX 経由 |
| 採用例 | Hugging Face、Meta、研究界 | Google 内製、業務系の既存資産 | Google DeepMind、Gemini |
| 初学者の入りやすさ | ◎ | ◯ (Keras) | △ (関数型に慣れが必要) |
緑行は新規プロジェクトでの推奨選択肢。
インストール
|
# 1) CPU 版 (どこでも動く)
pip install torch torchvision torchaudio
# 2) NVIDIA GPU 版 (CUDA 12.x 例)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
# 3) macOS (Apple Silicon)
pip install torch torchvision torchaudio # MPS 自動利用
# 動作確認
python -c "import torch; print(torch.__version__, torch.cuda.is_available())"
|
| 補足: GPU 環境の組合せ |
CUDA バージョンと PyTorch のビルドは厳密に対応します。公式の Get Started ページで OS / 言語 / CUDA を選ぶと、対応する pip コマンドが生成されます。CUDA 不一致は学習開始時に出る最頻のトラブル原因です。 |
主要なエコシステム
| 分野 | 主要ライブラリ |
| LLM / NLP | Hugging Face Transformers、vLLM、llama.cpp(一部 ONNX 経由) |
| 学習補助 | PyTorch Lightning、Hugging Face Accelerate |
| 画像 | torchvision、timm、Detectron2、MMDetection |
| 音声 | torchaudio、SpeechBrain、ESPnet |
| 3D / Graphics | PyTorch3D、Open3D |
| 分散・大規模 | FSDP、DeepSpeed、Megatron-LM |
| 強化学習 | Stable-Baselines3、Ray RLlib |
| ファインチューニング | PEFT、TRL(RLHF/DPO)、LoRA、QLoRA |
| 実験管理 | Weights & Biases、MLflow、TensorBoard |
パフォーマンスを引き出すコツ
| Tips |
torch.compile(model) で 1.3〜2倍の高速化を狙う (PyTorch 2.0+)
- GPU で
torch.cuda.amp (混合精度)・bfloat16 を使う
DataLoader は num_workers 多め+pin_memory=True
- 大規模モデルは
FSDP / DeepSpeed でメモリ削減
- 推論は
torch.inference_mode() + .eval() を必ず
- 非対称量子化 (INT8 / 4-bit) で推論メモリ削減 (
bitsandbytes)
|
注意点
| よくある落とし穴 |
- CUDA / cuDNN / Python のバージョン整合で詰まる — 公式のインストールジェネレータを使う
- 勾配がリセットされない — 各バッチで
opt.zero_grad() を忘れない
- 非リーフテンソルの
.grad は得られない — retain_graph=True や register_hook を検討
.eval() と .train() の切替 — BatchNorm/Dropout は挙動が変わる
- GPU メモリのリーク — 中間テンソルを
detach() したり、del + torch.cuda.empty_cache()
.cuda() / .to(device) の漏れ — 一方が CPU、もう一方が GPU で実行時エラー
- 非決定性 — 再現性が必要なら
torch.use_deterministic_algorithms(True)
- pickle 形式の
.pt ファイルは任意コード実行可能。信頼できないモデルは使わない (safetensors 推奨)
|
関連