PyTorch
PyTorchは、GPUテンソルと自動微分を使ってニューラルネットワークを構築・学習するためのオープンソースPythonフレームワークです。基本概念とデプロイまでの流れを解説します。
PyTorchは、Pythonでニューラルネットワークを構築、学習、デプロイするためのオープンソースフレームワークです。GPUで高速化されたテンソル、自動微分、レイヤー、オプティマイザー、損失関数のライブラリを提供します。また、コードを1行ずつ即時実行するため、通常のPythonプログラムと同じようにモデルを記述してデバッグできます。Facebook AI Research(現在のMeta AI)で開発されたPyTorchは、2022年以降、Linux Foundation傘下のベンダー中立なPyTorch Foundationによって運営されています。コンピュータービジョンや言語分野のディープラーニング研究および本番モデルで広く使われています。
基本概念#
- テンソル: NumPy配列のような多次元配列で、CPUまたはアクセラレーター上に配置できます。PyTorchはCUDA経由でNVIDIA GPUを、ROCm経由でAMD GPUを、Metal(MPS)経由でApple siliconをサポートします。それらの間でデータを移動するには、
.to(device)を1回呼び出します。 - Autograd: テンソル演算の実行時に、PyTorchは演算を計算グラフに記録します。
.backward()を呼び出すと、そのグラフを逆順にたどり、勾配が必要な各テンソルについて出力に対する勾配を計算します。これが学習時の誤差逆伝播の処理です。 - 即時実行: 順伝播のたびにグラフが再構築されるため、モデル内でPythonのループ、条件分岐、print文を使用でき、エラーが発生すると失敗した正確な行が示されます。
- モジュールとオプティマイザー:
torch.nnは畳み込み、アテンション、正規化などのレイヤーを提供し、torch.optimは計算された勾配に基づいて重みを更新するSGDやAdamなどのオプティマイザーを提供します。 - torch.compile: PyTorch 2.0で追加されました。即時実行されるプログラムをグラフとして取り込み、融合カーネルを生成します。モデルコードを変更せずに、学習や推論を高速化できる場合があります。
以下の例では、利用可能な場合はGPU上で小さな計算を実行し、autogradで勾配を計算します。
import torch
# Use a GPU when PyTorch can see one, otherwise fall back to the CPU
device = "cuda" if torch.cuda.is_available() else "cpu"
# Tensors record the operations applied to them when requires_grad=True
w = torch.tensor([2.0, -1.0], device=device, requires_grad=True)
x = torch.tensor([3.0, 4.0], device=device)
# Ordinary Python runs eagerly: each line executes immediately
loss = (w * x).sum() ** 2
# Autograd walks the recorded graph backward to get d(loss)/dw
loss.backward()
print(f"device={device}, loss={loss.item()}, grad={w.grad.tolist()}")GPUのないマシンでは、device=cpu, loss=4.0, grad=[12.0, 16.0]が出力されます。損失は(2·3 − 1·4)² = 4で、autogradは手計算なしに導関数2·(w·x)·x = [12, 16]を返します。これは、数十億個の重みを持つネットワークを学習させる仕組みと同じです。
PyTorchとその他のツール#
- TensorFlow: Googleのフレームワークです。TensorFlow 2で即時実行がデフォルトになるまでは、実行前に静的グラフを構築していました。KerasやGoogleのデプロイツールを中心に構築された本番システムで、現在も広く使われています。
- JAX: XLAでコンパイルされる
grad、jit、vmapの各演算を使って、純粋なPython関数を変換するGoogleの数値計算ライブラリです。TPUを使った大規模研究で人気があります。 - OpenCV: 古典的なアルゴリズムを使って画像の読み込み、変換、解析を行うコンピュータービジョンライブラリです。多くのパイプラインでは、PyTorchモデルで処理する前にOpenCVでフレームを読み込み、前処理します。
- Hugging Face: 主にPyTorchを基盤とするハブおよびライブラリ群です。Transformersライブラリは、事前学習済みの言語モデルとビジョンモデルをPyTorchモジュールとして提供します。
研究からデプロイへ#
学習済みのPyTorchモデルはチェックポイントとして保存され、通常は重みを格納した.ptまたは.pthファイルになります。そのままPythonサービスで実行できますが、エッジデバイスや最適化されたサーバーでは、通常、ハードウェア向けに構築されたランタイム形式に変換する必要があります。
Ultralytics YOLO26はPyTorchで実装されています。yolo26n.ptはPyTorchチェックポイントであり、学習にはPyTorchのautogradとオプティマイザーを使用します。また、model.export()はモデルをデプロイ形式に変換します。形式にはONNX、TensorRT、OpenVINO、Core ML、LiteRTなどがあります。










