首頁 / 開源排行榜 / pytorch-lightning

pytorch-lightning

一個輕量級的 PyTorch 封裝,能組織深度學習程式碼,並在無需更改任何程式碼的情況下,將訓練規模從單一 CPU 擴展至數千個 GPU。

PythonApache-2.0Framework
⭐ GitHubhttps://github.com/Lightning-AI/pytorch-lightning
31,259
Star 數
+0
Star 增速
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. 功能分類

🧩 核心抽象
三個主要建構區塊。代表性範例:LightningModule(封裝模型、訓練/驗證/測試步驟及最佳化器)、Trainer(管理訓練迴圈、裝置與精度)、LightningDataModule(封裝資料集準備與資料載入器),以及 Callback(在不觸碰訓練迴圈的情況下注入自訂邏輯)。目的:將研究邏輯與工程關注點乾淨地分離。

⚡ 分散式與加速訓練
用於跨硬體擴展的內建策略。代表性範例:多 GPU 資料平行與模型平行訓練、多節點協調、TPU 與 HPU 支援,以及 16/32/64 位元混合精度訓練。目的:將相同的模型程式碼從單一裝置擴展至數千個加速器,且無需更改程式碼。

📊 實驗追蹤與日誌記錄
用於監控訓練執行的原生整合。代表性範例: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 迴圈相比,此抽象僅增加微小且可測量的執行成本(每個 epoch 約幾毫秒)。
  • 數十種生態系整合 —— 與受歡迎的日誌記錄器、效能分析器及輔助函式庫(例如用於可擴展指標運算的 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.py 定義了 LightningModule 基底類別——這是大多數使用者透過子類別化間接互動的兩個檔案。

8. 相關生態系

PyTorch Lightning 直接建構於 PyTorch 之上,並由 Lightning AI 維護,該團隊也開發了 TorchMetrics(可擴展指標運算)、Lightning Fabric(包含在同一程式碼庫中),以及用於執行與部署訓練任務的 Lightning Studio 雲端平台。它與常見的實驗追蹤器(如 TensorBoardWeights & BiasesMLflowCometNeptune)整合,並與分散式訓練後端(如 NVIDIA NCCLDeepSpeed)協同運作。

9. 授權條款

  • ✅ 在 Apache-2.0 授權條款下,允許商業與非商業用途、修改及重新散布。
  • ✅ 包含貢獻者的專利授權,為使用者提供額外的法律保護。
  • ℹ️ 依 Apache-2.0 條款,修改過的檔案必須帶有說明已進行更改的註記。
  • ❌ 此授權不提供任何擔保;「Lightning」商標與品牌並不包含在程式碼授權範圍內。

10. 常見問題

Q:Trainer 與 Lightning Fabric 有何不同?
A:Trainer 是用於標準使用情境的完全代管訓練迴圈;Fabric 則是為希望繼續編寫自身迴圈同時仍需獲得多 GPU/多節點擴展能力的團隊提供的更輕量層。請參閱比較指南

Q:我需要重寫現有的 PyTorch 模型才能使用 Lightning 嗎?
A:不需要——LightningModule 本身就是一個 torch.nn.Module,只是增加了幾個方法(training_stepconfigure_optimizers 等),因此現有的模型程式碼通常只需極少修改即可移入。

Q:我該如何在多個 GPU 或節點上執行訓練?
A:設定相關的 Trainer 參數,例如 Trainer(accelerator="gpu", devices=4, strategy="ddp", num_nodes=2)——不需要對 LightningModule 進行任何修改。

Q:Lightning 支援混合精度或 TPU 訓練嗎?
A:支援,透過 Trainer(precision="16-mixed") 進行混合精度訓練,以及透過 Trainer(accelerator="tpu") 進行 TPU 訓練。

Q:我該如何回報錯誤或請求新功能?
A:遵循提供的範本,在 GitHub 程式碼庫上開啟一個議題。

11. 快速連結

12. 總結

PyTorch Lightning 為研究人員與工程師提供了一種方式,讓他們只需編寫一次模型程式碼,即可將其擴展至任何地方——從筆記型電腦的 CPU 到大型多節點 GPU 叢集——而無需觸碰底層邏輯。它非常適合想要消除訓練迴圈樣板的個人開發者,以及需要以最少工程開銷進行可重現、大規模實驗的研究團隊。