Try in Colab PyTorch Lightning を使用して画像分類パイプラインを構築します。コードの可読性と再現性を高めるために、この スタイルガイド に従います。これに関する詳しい解説は こちら で確認できます。Documentation Index
Fetch the complete documentation index at: https://wb-21fd5541-update-training-api-26.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
PyTorch Lightning と W&B のセットアップ
このチュートリアルでは、PyTorch Lightning と W&B が必要です。DataModule - 私たちが求めるデータパイプライン
DataModule は、データ関連のフックを LightningModule から切り離す方法であり、データセットに依存しないモデルを開発できるようにします。 これにより、データパイプラインを共有可能で再利用可能な一つのクラスに整理できます。DataModule は、PyTorch におけるデータプロセッシングの 5 つのステップをカプセル化します:- ダウンロード / トークン化 / 処理
- クリーニング、および(必要に応じて)ディスクへの保存
- Dataset へのロード
- 変換(回転、トークン化など)の適用
- DataLoader へのラップ
Callbacks
コールバックは、プロジェクト間で再利用可能な自己完結型のプログラムです。PyTorch Lightning には、よく使用されるいくつかの 組み込みコールバック が用意されています。 PyTorch Lightning のコールバックについての詳細は こちら をご覧ください。組み込みコールバック
このチュートリアルでは、Early Stopping と Model Checkpoint の組み込みコールバックを使用します。これらはTrainer に渡すことができます。
カスタムコールバック
Keras のカスタムコールバックに慣れているなら、PyTorch のパイプラインでも同じことができるのは非常に魅力的です。 今回は画像分類を行っているので、いくつかの画像サンプルに対するモデルの予測を可視化できると便利です。これをコールバックの形式にすることで、早い段階でのモデルのデバッグに役立ちます。LightningModule - システムの定義
LightningModule はモデルではなく「システム」を定義します。ここでは、すべての研究コードを一つのクラスにグループ化し、自己完結型にすることをシステムと呼びます。LightningModule は、PyTorch のコードを以下の 5 つのセクションに整理します:
- 計算(
__init__) - トレーニングループ(
training_step) - 検証ループ(
validation_step) - テストループ(
test_step) - オプティマイザー(
configure_optimizers)
トレーニングと評価
DataModule を使ってデータパイプラインを、LightningModule を使ってモデルアーキテクチャーとトレーニングループを整理しました。あとは PyTorch Lightning の Trainer がすべてを自動化してくれます。
Trainer が自動化するもの:
- エポックとバッチのイテレーション
optimizer.step()、backward、zero_grad()の呼び出し.eval()の呼び出し、勾配の有効化/無効化- 重みの保存とロード
- W&B へのログ記録
- マルチ GPU トレーニングのサポート
- TPU のサポート
- 16-bit トレーニングのサポート
最後に
私は TensorFlow/Keras エコシステムの出身で、PyTorch は洗練されたフレームワークであるものの、少し敷居が高いと感じていました(あくまで個人的な経験です)。しかし、PyTorch Lightning を試してみると、PyTorch から遠ざかっていた理由のほとんどが解消されていることに気づきました。私の感動を簡単にまとめます:- 以前:従来の PyTorch のモデル定義はバラバラになりがちでした。モデルは
model.pyスクリプトにあり、トレーニングループはtrain.pyファイルにあるといった具合です。パイプラインを理解するために何度もファイルを行き来する必要がありました。 - 現在:
LightningModuleがシステムとして機能し、モデルがtraining_stepやvalidation_stepなどと一緒に定義されます。モジュール化され、共有しやすくなりました。 - 以前:TensorFlow/Keras の最大の魅力は入力データパイプラインでした。データセットカタログが豊富で成長し続けています。PyTorch のデータパイプラインは最大の懸念点でした。通常の PyTorch コードでは、データのダウンロード/クリーニング/準備が多くのファイルに分散していることがよくあります。
- 現在:DataModule がデータパイプラインを一つの共有・再利用可能なクラスにまとめます。これは単に
train_dataloader、val_dataloader、test_dataloaderと、それに対応する変換やデータ処理/ダウンロードステップの集まりにすぎません。 - 以前:Keras では、
model.fitでトレーニング、model.predictで推論を実行できました。model.evaluateはテストデータに対するシンプルで使い勝手の良い評価を提供していました。PyTorch ではそうはいかず、通常は別々のtrain.pyとtest.pyファイルが必要でした。 - 現在:
LightningModuleを導入すれば、Trainerがすべてを自動化します。trainer.fitとtrainer.testを呼び出すだけで、モデルのトレーニングと評価が完了します。 - 以前:TensorFlow は TPU が大好きですが、PyTorch は…
- 現在:PyTorch Lightning を使えば、同じモデルを複数の GPU や TPU でトレーニングするのが非常に簡単です。
- 以前:私はコールバックの大ファンで、カスタムコールバックを書くのが好きです。Early Stopping のような些細なことでさえ、従来の PyTorch では議論の的になることがありました。
- 現在:PyTorch Lightning では Early Stopping や Model Checkpointing を使うのは非常に簡単です。カスタムコールバックを書くこともできます。
🎨 結論とリソース
このレポートがお役に立てば幸いです。ぜひコードを動かして、お好みのデータセットで画像分類器をトレーニングしてみてください。 PyTorch Lightning についてさらに詳しく学ぶためのリソースをいくつか紹介します:- ステップバイステップガイド: 公式チュートリアルの一つです。ドキュメントが非常によく書かれており、学習リソースとして強くお勧めします。
- Pytorch Lightning を W&B で使用する: PyTorch Lightning で W&B を使用する方法を学べるクイックな Colab です。