本文へスキップ
BecomeCoder

PyTorchコース · 第4章 PyTorch入門 ― 自動微分と訓練ループ · レッスン16

学習の保存と推論 ― そしてGPU

ローカル実施

導入

苦労して学習させたモデルは、毎回学習し直さず保存して再利用します。また、本格的な学習を現実的な時間で終わらせる鍵が GPU です。実務で必ず使う2点を押さえて、次章のファインチューニングへ進みます。

説明

保存と読み込みは、モデルの中身(学習した重み=state_dict)を保存するのが定石です。

# 保存
torch.save(model.state_dict(), "model.pth")

# 読み込み(同じ構造のモデルを用意してから重みを流し込む)
model = XORNet()
model.load_state_dict(torch.load("model.pth"))
model.eval()      # 推論モードに切り替え

推論(予測) のときは、勾配計算をオフにして高速・省メモリにします。

model.eval()
with torch.no_grad():
    result = model(new_input)

GPU は行列計算を桁違いに速くこなす装置です。.to(device) でモデルとデータを GPU に載せるだけで、コードの本筋は変わりません。

device = "cuda" if torch.cuda.is_available() else "cpu"
model = model.to(device)
batch_x = batch_x.to(device)
flowchart LR
  train["学習<br/>(時間がかかる)"] --> save["state_dict を保存<br/>model.pth"]
  save --> load["別の場所で読み込み"]
  load --> infer["no_grad で推論<br/>(速い・軽い)"]

なぜGPUが要るのか

第3章で見た通り、NN の計算は巨大な行列の掛け算の山です。GPU はこの掛け算を何千個も同時に処理できるため、CPU の数十〜数百倍速くなることも。だからディープラーニングの学習は GPU(や Google Colab の無料GPU)で行うのが定石です。

まとめ

  • 学習済みモデルは state_dicttorch.save / load_state_dict で保存・再利用する。
  • 推論時は model.eval()torch.no_grad() で高速・省メモリに。
  • GPU は行列計算を大量並列で高速化する。.to(device) で載せるだけ。本格学習の必須装備。