PUBLIC
AI COMPUTEDEEP LEARNING11 MIN READ

STACK / TENSOR · AUTOGRAD · DEVICE

PyTorchML FRAMEWORK

機械学習の計算を、Pythonで組み立てて動かす

PyTorchは、テンソル(Tensor)と呼ばれる多次元配列と自動微分を中心に、機械学習モデルを柔軟に組み立てるためのPythonフレームワークです。NVIDIA GPUならCUDA、Apple SiliconならMPS、アクセラレータがなければCPUへと、同じコードのまま実行先を切り替えられます。

01INPUTデータをTensorへ
02MODELLayerを順に通す
03AUTOGRADLossから勾配を計算
04UPDATEWeightを更新する
COMPUTE FLOW

データをデバイスへ移し、並列計算を実行して結果を戻します。

CONTENTSこの記事の目次

01 — POSITION

PyTorchとは
何か

PyTorchでは、画像や文章などのデータをテンソルとして表現し、nn.Moduleでモデル構造を定義し、損失関数から勾配を逆伝播してオプティマイザで重みを更新します。Pythonで記述した処理の裏側では、選択したデバイスに応じた最適化演算カーネルが動作します。

02 — COMPUTE PIPELINE

データが計算結果へ
変わるまで

CPUとGPUの役割を分け、どこでデータが動くのかを順番に見ます。

INPUT TENSORx (多次元配列)shape, dtype, devicerequires_grad=TrueForwardNEURAL NETWORKy = w · x + b動的計算グラフの構築演算履歴を内部で記録GPU/MPSで並列実行LOSS FUNCTIONloss = L(y, target)正解との誤差を算出loss.backward() で自動微分(勾配計算)Optimizerが重みを更新
PIPELINE

テンソルをデバイスに配置し、順伝播で計算グラフを構築。誤差から自動微分(Autograd)で各重みの勾配を逆伝播計算します。

HOST → DEVICEPARALLEL COMPUTE
01INPUT

データをTensorへ

画像、テキスト、数値データなどの入力を、形状(shape)とデータ型(dtype)を持つテンソルに変換します。

02MODEL

Layerを順に通す

nn.Moduleで定義した各層(レイヤー)がテンソルを順次変換し、予測値を出力します。

03AUTOGRAD

Lossから勾配を計算

計算グラフを逆方向にたどる自動微分(backward)により、各パラメータ(重み)の勾配を算出します。

04UPDATE

Weightを更新する

オプティマイザが算出した勾配に基づいて重みを更新し、次のバッチ処理へ進みます。

PIPELINE

小さなデータでは移動の時間が勝つこともあるため、計算量と転送量を一緒に見積もります。

03 — LAYER MAP

PyTorchの下でCUDAが計算を担当する

PyTorchのコードは、テンソルをどのデバイスに配置するかによって実行先が切り替わります。NVIDIA GPUを指定すればCUDAへ、Apple Siliconを指定すればMPSへ演算が渡されます。

APPLICATION → HARDWAREWHO DOES WHAT
01PYTORCH

model(x)を書く

開発者はPythonコードでデータセット、モデル構造、損失関数、オプティマイザを組み立てます。

02DISPATCH

Deviceを選ぶ

テンソルとモデルが配置されたデバイスに応じて、背後で動くバックエンドと演算カーネルが決定されます。

03CUDA / MPS

Backendが実行する

NVIDIAではCUDA、Apple SiliconではMetal系のMPSが演算を受け持ちます。

04DEVICE

結果を返す

選択したGPUまたはCPU上で演算を実行し、得られた結果を次のレイヤーや損失関数の計算へ渡します。

LAYER MAP

PyTorchは上位のAPI、CUDAやMPSはDeviceごとのBackendです。役割を分けて考えると、MacでCUDAがなくても学習を始められます。

01TENSOR API

データと演算を表す

テンソルの形状・データ型・配置デバイスを意識しながら、行列演算やモデルの入力パイプラインを組み立てます。

02AUTOGRAD

学習の計算を自動化

順伝播(forward)で記録された計算履歴から、逆伝播(backward)によって各重みの勾配を自動計算します。

03BACKEND

CUDA・MPS・CPUへつなぐ

同じPyTorchのコードでもデバイスごとに裏側の実装が異なるため、実行環境ごとの動作確認が重要です。

04 — QUICK START

使えるDeviceを選んで計算する

利用可能な環境に応じてCUDA、Apple SiliconのMPS、CPUの順に自動フォールバックする最小実装例です。モデル側にも同じデバイスを指定して整合性を保ちます。

device_check.pyPYTORCH DEVICE SELECT
import torch

if torch.cuda.is_available():
    device = torch.device("cuda")
elif hasattr(torch.backends, "mps") and torch.backends.mps.is_available():
    device = torch.device("mps")
else:
    device = torch.device("cpu")

x = torch.tensor([1.0, 2.0, 3.0], device=device)
print(device, x * 2)
# model.to(device) も忘れない

01CHECK CUDAおよびMPSの利用可否を実行時に自動判定

02MOVE テンソルとモデルを同一のデバイスへ配置

03FALLBACK GPUがなくてもCPUで学習の流れを試せる

05 — CHOOSE YOUR DEVICE

手元の環境に
合わせる

「CUDAがないと機械学習できない」わけではありません。使えるバックエンドを確認してから始めます。

01NVIDIA

CUDAで高速化する

LinuxやWindowsのNVIDIA GPU環境では、PyTorch公式サイトの「Start Locally」からOS・パッケージ管理・Python・CUDAの組み合わせを選択してインストールします。導入後はtorch.cuda.is_available()がTrueを返すことを確認します。

02APPLE SILICON

MPSでMacのGPUを使う

Apple Silicon搭載MacではCUDAの代わりにMPSバックエンドを利用します。torch.backends.mps.is_available()がTrueになることを確認し、device="mps"を指定してテンソルとモデルを転送します。

03CPU / AMD

CPUやROCmも選択肢

まずはコードの書き方や学習の流れを学ぶだけであればCPU環境でも十分に動作します。また、Linux上でAMD製GPUを利用する場合は、PyTorch公式のROCm対応ビルドを選択します。

06 — WATCH OUT

最初につまずきやすい
3つの点

GPUが見えること、速くなること、安定して動くことは別々に確認します。

01

TensorとModelのDeviceをそろえる

CPU上の入力テンソルをGPU上のモデルへ直接渡すことはできません。x.to(device)とmodel.to(device)のように共通のdevice変数を指定することで、デバイス不一致エラー(Device mismatch)を未然に防げます。

02

形状と型も計算の契約

GPUが正常に認識されていても、バッチ次元の欠落やデータ型(dtype)の不一致があると計算エラーになります。まずは小さなテンソルを使ってshape、dtype、deviceの3点を出力し、期待通りか確認する習慣をつけます。

03

GPUがあれば必ず速いわけではない

小規模なモデルや軽量な処理では、GPUの初期化やCPU・GPU間のデータ転送にかかるオーバーヘッドの方が大きくなり、かえって遅くなることがあります。バッチサイズをまとめて処理効率を上げ、実際の処理時間を計測した上で適切なデバイスを選択します。

IN ONE SENTENCE

PyTorchとは?

テンソル計算と自動微分を中心に、機械学習モデルの構築から学習・推論までをPythonで柔軟に記述し、CUDA・MPS・CPUで実行できるフレームワーク。

KEEP EXPLORING

AICUDA掲載中AIvLLM掲載中AIllama.cpp掲載中WEBAPI掲載中

SOURCES / OFFICIAL DOCS

PyTorch — Start Locally ↗Tensor — Beginner Basics ↗Autograd — Beginner Basics ↗PyTorch CUDA Semantics ↗torch.cuda API ↗MPS Backend for Mac ↗