1.

PyTorch とは?深層学習フレームワークの使い方・TensorFlow との比較

編集

本稿は 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.dataDataset / DataLoader でデータ供給
torchvision画像系のモデル zoo・前処理・データセット
torchaudio音声系
torchtextテキスト系 (保守モード気味、Transformers 推奨)
torch.distributed分散学習 API
torch.compileJIT コンパイルで実行高速化 (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 による高速化
APIPythonic・命令型 (eager)Keras 高レベル / tf.function関数型 (jit / vmap / grad)
論文実装圧倒的多数減少傾向Google 系研究で増加中
本番デプロイTorchScript、ONNX、TorchServeTF Serving、TFLite、TF.jsJAX2TF、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 / NLPHugging Face TransformersvLLMllama.cpp(一部 ONNX 経由)
学習補助PyTorch LightningHugging Face Accelerate
画像torchvisiontimm、Detectron2、MMDetection
音声torchaudio、SpeechBrain、ESPnet
3D / GraphicsPyTorch3D、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 を使う
  • DataLoadernum_workers 多め+pin_memory=True
  • 大規模モデルは FSDP / DeepSpeed でメモリ削減
  • 推論は torch.inference_mode() + .eval() を必ず
  • 非対称量子化 (INT8 / 4-bit) で推論メモリ削減 (bitsandbytes)

注意点

よくある落とし穴
  • CUDA / cuDNN / Python のバージョン整合で詰まる — 公式のインストールジェネレータを使う
  • 勾配がリセットされない — 各バッチで opt.zero_grad() を忘れない
  • 非リーフテンソルの .grad は得られないretain_graph=Trueregister_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 推奨)

関連

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. PyTorch
  2. TensorFlow(テンソルフロー)
  3. scikit-learn
  4. Hugging Face Transformers
  5. LangChain
  6. LlamaIndex
  7. JAX
  8. ONNX Runtime

最近更新/作成されたページ