ホーム / オープンソース / pytorch-lightning

pytorch-lightning

PyTorchの軽量ラッパーであり、深層学習コードを整理し、コードを一切変更することなく単一のCPUから数千のGPUへと学習をスケールさせます。

PythonApache-2.0Framework
⭐ GitHubhttps://github.com/Lightning-AI/pytorch-lightning
31,259
スター数
+0
スター増加率
2026年7月30日
最終更新
0
クリック数

1. プロジェクト概要

PyTorch Lightningは、PyTorchの軽量かつ高レベルなラッパーであり、深層学習コードをクリーンで標準化された構造に整理します。これにより、研究者やエンジニアは、コアロジックを書き直したり分散学習の定型コードを手作業で記述したりすることなく、単一のCPUから10,000以上のGPUに至るまで、あらゆるモデルの学習とスケーリングが可能になります。

2. 背景と位置づけ

PyTorch Lightningは、深層学習の研究において繰り返し発生する問題を解決するために作成されました。具体的には、同じエンジニアリングコード(分散学習ループ、チェックポイント、混合精度、ロギング、マルチノードオーケストレーション)が新規プロジェクトごとにコピー&ペーストされ、再デバッグされる一方で、実際の研究アイデアはコードベースのごく一部に過ぎないという問題です。Lightningの中心的な使命は、「研究コード」(モデル、損失、最適化ステップ)を「エンジニアリングコード」(学習ループ、ハードウェアオーケストレーション、精度処理)から分離することです。これにより、ラップトップのCPUからマルチノードのGPUクラスターへの移行において、モデル定義を一切変更する必要がなくなります。

生のPyTorch学習ループを記述する場合と比較して、Lightningは何百行もの繰り返しの定型コードを削減しつつ、すべてのコンポーネントを純粋なtorch.nn.Moduleとして維持するため、何も隠蔽されず「魔法」も存在しません。より重厚で独自の規約が強いフレームワークと比較しても、Lightningはモデルアーキテクチャやデータに対して独自の規約を設けず、学習の構成方法のみを構造化します。完全に管理されたTrainerではなく、学習ループ自体に対してよりきめ細かい制御を必要とするチーム向けに、同じリポジトリではLightning Fabricも提供しています。これは既存のPyTorchループを最小限のコード変更でスケールさせる薄いレイヤーであり、標準的なモデル学習と、カスタム基盤モデルの事前学習といった高度なユースケースの両方に有用です。

3. 機能カテゴリ

🧩 コア抽象化
3つの主要な構成要素です。代表的な例:LightningModule(モデル、学習/検証/テストステップ、オプティマイザをラップ)、Trainer(学習ループ、デバイス、精度を管理)、LightningDataModule(データセットの準備とデータローダをカプセル化)、Callback(学習ループに触れずにカスタムロジックを注入)。目的:研究ロジックをエンジニアリングの懸念事項から明確に分離すること。

⚡ 分散・高速化された学習
ハードウェア全体でのスケーリングのための組み込み戦略です。代表的な例:マルチGPUのデータ並列およびモデル並列学習、マルチノードオーケストレーション、TPUやHPUのサポート、16/32/64ビット混合精度学習。目的:コードを変更することなく、同一のモデルコードを1つのデバイスから数千のアクセラレータへとスケールさせること。

📊 実験追跡とロギング
学習実行の監視のためのネイティブ統合です。代表的な例:TensorBoard、Weights & Biases、MLflow、Comet、Neptuneのロガー、および組み込みのself.log()メトリクスロギング。目的:追加の計測コードなしで学習の進行状況を可視化すること。

🛠️ 学習ユーティリティとコールバック
Trainerに組み込む即時利用可能な機能です。代表的な例:自動チェックポイント、早期終了、学習率検索、確率的重み平均、勾配蓄積。目的:命令的ではなく宣言的に一般的な学習のニーズを満たすこと。

🪶 Lightning Fabric
独自の学習ループを維持したいチーム向けの、より軽量なスケーリングレイヤーです。代表的な例:モデルとオプティマイザのためのfabric.setup()fabric.backward()、分散サンプラー、精度プラグイン。目的:数行追加するだけで、既存のPyTorchコードにマルチGPU/マルチノードのスケーリングを追加すること。

4. 主な特徴

  • コード変更不要のスケーリング — 同じLightningModuleが、Trainerのフラグを変更するだけでCPU、単一のGPU、複数のGPU、複数のノード、またはTPU上で実行されます。
  • 40以上の組み込み学習機能 — チェックポイント、早期終了、勾配クリッピング、混合精度などが初期状態で提供され、Trainerの引数で設定可能です。
  • 完全な柔軟性の維持LightningModuleは引き続き標準的なPyTorchのnn.Moduleであるため、既存のPyTorchモデルやレイヤーはそのまま機能します。
  • 再現性と厳密さ — すべてのプルリクエストは、サポートされているPyTorch/Pythonバージョンの組み合わせ、オペレーティングシステム、およびマルチGPU/TPU構成にわたってテストされます。
  • 最小限のオーバーヘッド — この抽象化は、手書きのPyTorchループと比較して、わずかな測定可能な実行時コスト(エポックあたり数ミリ秒程度)しか追加しません。
  • 多数のエコシステム統合 — 一般的なロガー、プロファイラ、およびスケーラブルなメトリクス計算のためのTorchMetricsなどの関連ライブラリと連携します。

5. 役割別のユースケース

  • 一般開発者 — 個人または本番環境のモデルをLightningModuleに構造化することで、カスタムの学習ループコードを記述することなく、チェックポイント、ロギング、マルチGPUサポートを取得します。
  • データ/研究科学者 — 新しいアーキテクチャを迅速にプロトタイピングしてベンチマークし、大規模な実験や基盤モデルの学習のために、ラップトップからマルチノードのGPUクラスターへとまったく同じコードをスケールさせます。
  • DevOps/SRE — Lightningの組み込みの分散戦略と精度プラグインを利用して、共有のGPU/TPUインフラ全体で学習ジョブがどのようにデプロイおよびスケールされるかを標準化します。

6. はじめに

必要な情報を見つけるTrainerLightningModule、分散戦略に関するガイドは公式ドキュメントを、実行可能なエンドツーエンドのスクリプトはリポジトリ内のexamples/ディレクトリを参照してください。

インストール / 統合

pip install pytorch-lightning

最小限の使用パターン:

import lightning.pytorch as pl

model = LitModel()
trainer = pl.Trainer(max_epochs=10, accelerator="auto", devices="auto")
trainer.fit(model, train_dataloaders=train_loader)

貢献する — セットアップとコーディングスタイルのガイドラインについてはリポジトリ内のCONTRIBUTING.mdを読み、masterブランチに対してプルリクエストを開いてください。アイデアについては、まずGitHub IssuesやLightningコミュニティのDiscordで議論してください。

7. プロジェクト構造

pytorch-lightning/
├── src/
│   ├── lightning/            # 統合パッケージ (pytorch + fabric + app)
│   ├── pytorch_lightning/    # Trainer, LightningModule, callbacks, loggers
│   └── lightning_fabric/     # Fabric: 軽量スケーリングレイヤー
├── examples/                 # 実行可能なエンドツーエンド学習例
├── tests/                    # ユニットおよび結合テスト
├── docs/                     # 公式ドキュメントのソース
└── requirements/              # コンポーネントごとの依存関係リスト

src/pytorch_lightning/trainer/trainer.pyがコアの学習ループを実装し、src/pytorch_lightning/core/module.pyLightningModuleの基底クラスを定義しています。これらは、ほとんどのユーザーがサブクラス化を通じて間接的に操作する2つのファイルです。

8. 関連エコシステム

PyTorch LightningはPyTorchの上に直接構築されており、Lightning AIによってメンテナンスされています。同社は、TorchMetrics(スケーラブルなメトリクス計算)、Lightning Fabric(同じリポジトリに含まれる)、および学習ジョブの実行とデプロイのためのLightning Studioクラウドプラットフォームも開発しています。一般的な実験トラッカーであるTensorBoardWeights & BiasesMLflowCometNeptuneと統合されており、NVIDIA NCCLDeepSpeedのような分散学習バックエンドと連携します。

9. ライセンス

  • ✅ Apache-2.0ライセンスの下で、商用および非商用での使用、変更、再配布が許可されています。
  • ✅ 貢献者からの特許許諾が含まれており、ユーザーに追加の法的保護を提供します。
  • ℹ️ Apache-2.0の条件に従い、変更されたファイルには変更が加えられたことを示す通知を記載する必要があります。
  • ❌ ライセンスはいかなる保証も提供しません。「Lightning」の商標とブランディングはコードライセンスの対象外です。

10. FAQ

Q: TrainerとLightning Fabricの違いは何ですか?
A: Trainerは標準的なユースケース向けの完全に管理された学習ループです。Fabricは、独自のループを書き続けながらマルチGPU/マルチノードのスケーリングを維持したいチーム向けのより薄いレイヤーです。比較ガイドを参照してください。

Q: Lightningを使用するために、既存のPyTorchモデルを書き直す必要はありますか?
A: いいえ。LightningModuleはいくつかのメソッド(training_stepconfigure_optimizersなど)が追加されたtorch.nn.Moduleであるため、既存のモデルコードは通常、最小限の変更で移行できます。

Q: 複数のGPUやノードで学習を実行するにはどうすればよいですか?
A: 関連するTrainerの引数を設定します。例:Trainer(accelerator="gpu", devices=4, strategy="ddp", num_nodes=2)LightningModuleの変更は不要です。

Q: Lightningは混合精度やTPU学習をサポートしていますか?
A: はい、混合精度の場合はTrainer(precision="16-mixed")、TPU学習の場合はTrainer(accelerator="tpu")を使用します。

Q: バグを報告したり、機能をリクエストしたりするにはどうすればよいですか?
A: 提供されたテンプレートに従って、GitHubリポジトリでIssueを開いてください。

11. クイックリンク

12. まとめ

PyTorch Lightningは、研究者やエンジニアに対し、モデルコードを一度記述すれば、基盤となるロジックに触れることなくどこへでもスケールさせる手段を提供します — ラップトップのCPUから大規模なマルチノードGPUクラスターまで対応します。学習ループの定型コードを排除したい個人開発者や、最小限のエンジニアリングオーバーヘッドで再現可能かつ大規模な実験を必要とする研究チームに適しています。