PyTorch Lightning:專門為機器學習研究者開發的PyTorch輕量 wrapper

2022-01-06 磐創AI
系統/ PyTorch版本1.3(最低標準)1.41.5 (最新)Linux py3.6 [CPU]Linux py3.7 [GPU]--Linux py3.6 / py3.7 / py3.8-OSX py3.6 / py3.7 / py3.8-Windows py3.6 / py3.7 / py3.8-

使用PyPI進行輕鬆安裝

pip install pytorch-lightning

文檔master(https://pytorch-lightning.readthedocs.io/en/latest)0.7.6(https://pytorch-lightning.readthedocs.io/en/0.7.6/)0.7.5(https://pytorch-lightning.readthedocs.io/en/0.7.5/)0.7.3(https://pytorch-lightning.readthedocs.io/en/0.7.3/)0.7.1(https://pytorch-lightning.readthedocs.io/en/0.7.1/)0.6.0(https://pytorch-lightning.readthedocs.io/en/0.6.0/)0.5.3.2(https://pytorch-lightning.readthedocs.io/en/0.5.3.2/)重構您的PyTorch代碼+好處+完整演練tutorial_cover演示

這是一個沒有驗證或測試循環的最少代碼的示例。

# 這只是一個簡單的有一些結構的nn.Module

class LitClassifier(pl.LightningModule):

    def __init__(self):
        super().__init__()
        self.l1 = torch.nn.Linear(28 * 28, 10)

    def forward(self, x):
        return torch.relu(self.l1(x.view(x.size(0), -1)))

    def training_step(self, batch, batch_nb):
        x, y = batch
        loss = F.cross_entropy(self(x), y)
        tensorboard_logs = {'train_loss': loss}
        return {'loss': loss, 'log': tensorboard_logs}

    def configure_optimizers(self):
        return torch.optim.Adam(self.parameters(), lr=0.02)

# 訓練!
train_loader = DataLoader(MNIST(os.getcwd(), train=True, download=True, transform=transforms.ToTensor()), batch_size=32)

model = LitClassifier()
trainer = pl.Trainer(gpus=8, precision=16)    
trainer.fit(model, train_loader) 

(https://colab.research.google.com/drive/1F_RNcHzTfFuQf-LeKvSlud6x7jXYkG31#scrollTo=P0bSmCw57aV5) (https://colab.research.google.com/drive/1F_RNcHzTfFuQf-LeKvSlud6x7jXYkG31#scrollTo=7uQVI-xv9Ddj)(https://colab.research.google.com/drive/1F_RNcHzTfFuQf-LeKvSlud6x7jXYkG31#scrollTo=NWvMLBDySQI5)(https://colab.research.google.com/drive/1-_LKx4HwAxl5M6xPJmqAAu444LTDQoa3)它是什麼?

閱讀這個快速入門的網頁(https://pytorch-lightning.readthedocs.io/en/stable/new-project.html)

Lightning是一種組織PyTorch代碼,以使科學代碼(science code)與工程分離的方法。它不僅僅是框架,而是PyTorch樣式指南。

在Lightning中,您可以將代碼分為3個不同的類別:

研究代碼(位於LightningModule中)。

這是一個如何將研究代碼重構為LightningModule的示例(https://pytorch-lightning.readthedocs.io/en/latest/lightning-module.html)。

pt_to_pl

其餘的代碼由Trainer自動執行!

嚴格測試(Testing Rigour)

每個新的PR都會自動測試Trainer的所有代碼。

實際上,我們還使用vanilla PyTorch循環訓練了一些模型,並與使用Trainer訓練的同一模型進行比較,以確保我們獲得完全相同的結果。在此處檢查奇偶校驗測試。

總體而言,Lightning保證了自動化零件經過嚴格測試,改正,是現代的最佳實踐。

它有多靈活?

如您所見,您只是在組織PyTorch代碼-沒有抽象。

對於Trainer所提取的內容,您可以覆蓋任何您想做的事情,例如實現自己的分布式訓練,16位精度甚至是自定義的反向傳遞梯度。

例如,在這裡您可以自己進行向後傳遞梯度

class LitModel(LightningModule):
  def optimizer_step(self, current_epoch, batch_idx, optimizer, optimizer_idx,
                     second_order_closure=None):
      optimizer.step()
      optimizer.zero_grad()

對於您可能需要的其他任何內容,我們都有一個廣泛的回調系統(https://pytorch-lightning.readthedocs.io/en/latest/introduction_guide.html#callbacks),您可以使用它來添加trainer中未實現的任意功能。

Lightning是專門為了誰?

如果您只是要學習深度學習,我們建議您先學習PyTorch!一旦實現了模型,請回來並使用Lightning的所有高級功能:)

lightning能為我控制什麼?

一切都是藍色的!

這就是lightning將科學(紅色)與工程(藍色)分開的方式。

pl_overview轉換成lightning代碼需要多少耗費多少時間?

如果您的代碼不是一團糟,那麼您應該可以在不到1小時的時間內將其組織成一個LightningModule。如果您的代碼一團糟,那麼您無論如何都要清理您的代碼;)

請查看此分步指南(http://qiniu.aihubs.net/pl_overview.gif)](https://github.com/PyTorchLightning/pytorch-lightning/blob/master/docs/source/_images/general/pl_overview.gif)。或觀看此視頻(https://www.youtube.com/watch?v=QHww1JH7IDU)。

開始一個新項目?

使用我們種子項目!該項目的目的是重現代碼

(https://github.com/PytorchLightning/pytorch-lightning-conference-seed)

為什麼要使用lightning?

儘管您的研究/生產項目可能開始很簡單,但是一旦添加了GPU和TPU訓練,16位精度等功能,最終您將花費比研究更多的時間進行工程設計。Lightning會自動為您進行嚴格測試。

支持8位核心貢獻者均由專業工程師,研究科學家,和來自頂級AI實驗室的博士生組成。

Lightning也是PyTorch生態系統的一部分,該生態系統要求項目具有可靠的測試,文檔和支持。

README目錄(https://github.com/PytorchLightning/pytorch-lightning#how-do-i-do-use-it)(https://github.com/PytorchLightning/pytorch-lightning#what-does-lightning-control-for-me)(https://github.com/PytorchLightning/pytorch-lightning#tensorboard)(https://github.com/PytorchLightning/pytorch-lightning#lightning-automates-all-of-the-following-each-is-also-configurable)(https://github.com/PytorchLightning/pytorch-lightning#examples)(https://github.com/PytorchLightning/pytorch-lightning#tutorials)(https://github.com/PytorchLightning/pytorch-lightning#asking-for-help)(https://github.com/PytorchLightning/pytorch-lightning/blob/master/.github/CONTRIBUTING.md)(https://github.com/PytorchLightning/pytorch-lightning#bleeding-edge)(https://github.com/PytorchLightning/pytorch-lightning#lightning-design-principles)(https://github.com/PytorchLightning/pytorch-lightning#lightning-team)(https://github.com/PytorchLightning/pytorch-lightning#faq)實際例子

這是您將真實的PyTorch項目組織到Lightning中的方法。

pt_to_pl

LightningModule定義了一個*系統,*例如seq-2-seq,GAN等。它還可以定義一個簡單的分類器。

總結來說,您只需要做:

    class LitSystem(pl.LightningModule):

        def __init__(self):
            super().__init__()
            # 不是最好的模型...
            self.l1 = torch.nn.Linear(28 * 28, 10)

        def forward(self, x):
            return torch.relu(self.l1(x.view(x.size(0), -1)))

        def training_step(self, batch, batch_idx):
            ...

from pytorch_lightning import Trainer

model = LitSystem()

# 最基本的trainer, 使用默認值
trainer = Trainer()
trainer.fit(model)

哪些類型的研究有效?

任何!請記住,這只是組織的PyTorch代碼。訓練步驟定義了訓練循環中發生的核心複雜度。

可能像seq2seq一樣複雜

# 在這裡定義訓練的過程
def training_step(self, batch, batch_idx):
    x, y = batch

    # 定義自己的前向傳播和計算損失
    hidden_states = self.encoder(x)

    # 甚至與seq-2-seq + attn模型一樣複雜
    # (這只是一個用於說明的小示例)
    start_token = '<SOS>'
    last_hidden = torch.zeros(...)
    loss = 0
    for step in range(max_seq_len):
        attn_context = self.attention_nn(hidden_states, start_token)
        pred = self.decoder(start_token, attn_context, last_hidden)
        last_hidden = pred
        pred = self.predict_nn(pred)
        loss += self.loss(last_hidden, y[step])

    # 小示例
    loss = loss / max_seq_len
    return {'loss': loss}

或像CNN圖像分類一樣

# 在這裡定義驗證代碼
def validation_step(self, batch, batch_idx):
    x, y = batch

    # 或者像CNN分類一樣
    out = self(x)
    loss = my_loss(out, y)
    return {'loss': loss}

而且,無需更改一行代碼,您就可以在CPU上運行

trainer = Trainer(max_epochs=1)

或者在GPU上運行

# 8個GPU
trainer = Trainer(max_epochs=1, gpus=8)

# 256個GPU
trainer = Trainer(max_epochs=1, gpus=8, num_nodes=32)

或者在TPU上運行

# 分發給TPU進行訓練
trainer = Trainer(tpu_cores=8)

# 單個TPU進行訓練
trainer = Trainer(tpu_cores=[1])

當您完成訓練後,測試準確度

trainer.test()

可視化

Lightning具有流行的日誌記錄/可視化框架的開箱即用的集成

Tensorboard(https://pytorch.org/docs/stable/tensorboard.html)MLFlow(https://mlflow.org/)Neptune.ai(https://neptune.ai/)Comet.ml(https://www.comet.ml/site/)Wandb(https://www.wandb.com/)Trains(https://github.com/allegroai/trains)tf_lossLightning使40多個DL / ML研究的部分自動化(https://pytorch-lightning.readthedocs.io/en/latest/#common-use-cases)例子

查看這份很棒的研究論文列表以及使用Lightning實現的例子。

Contextual Emotion Detection (DoubleDistilBert)(https://pytorch-lightning.readthedocs.io/en/latest/#common-use-cases)Generative Adversarial Network(https://colab.research.google.com/drive/1F_RNcHzTfFuQf-LeKvSlud6x7jXYkG31#scrollTo=TyYOdg8g77P0)Hyperparameter optimization with Optuna(https://github.com/optuna/optuna/blob/master/examples/pytorch_lightning_simple.py)Image Inpainting using Partial Convolutions(https://github.com/ryanwongsa/Image-Inpainting)(https://colab.research.google.com/drive/1-_LKx4HwAxl5M6xPJmqAAu444LTDQoa3#scrollTo=BHBz1_AnamN_)NER (transformers, TPU, huggingface)(https://colab.research.google.com/drive/1dBN-wwYUngLYVt985wGs_OKPlK_ANB9D)(https://github.com/PyTorchLightning/neuraltexture)Recurrent Attentive Neural Process(https://github.com/PyTorchLightning/attentive-neural-processes)Siamese Nets for One-shot Image Recognition(https://github.com/PyTorchLightning/Siamese-Neural-Networks)(https://github.com/PyTorchLightning/speech-transformer-pytorch_lightning)Transformers transfer learning (Huggingface)(https://colab.research.google.com/drive/1F_RNcHzTfFuQf-LeKvSlud6x7jXYkG31#scrollTo=yr7eaxkF-djf)Transformers text classification(https://github.com/ricardorei/lightning-text-classification)VAE Library of over 18+ VAE flavors(https://github.com/AntixK/PyTorch-VAE)教程

查看我們的入門指南(https://pytorch-lightning.readthedocs.io/en/latest/introduction_guide.html)來開始使用。或直接進入我們的教程(https://pytorch-lightning.readthedocs.io/en/latest/#tutorials)。

尋求幫助

歡迎來到Lightning社區!

如有任何疑問,請隨時:

閱讀文檔。(https://pytorch-lightning.rtfd.io/en/latest/)搜索問題。(https://github.com/PytorchLightning/pytorch-lightning/issues?utf8=✓&q=my++question)使用pytorch-lightning標籤在stackoverflow進行提問。(https://stackoverflow.com/questions/ask?guided=false)(https://join.slack.com/t/pytorch-lightning/shared_invite/enQtODU5ODIyNTUzODQwLTFkMDg5Mzc1MDBmNjEzMDgxOTVmYTdhYjA1MDdmODUyOTg2OGQ1ZWZkYTQzODhhNzdhZDA3YmNhMDhlMDY4YzQ)常見問題

如何使用Lightning進行快速研究?
Here's a walk-through

(https://pytorch-lightning.readthedocs.io/en/latest/introduction_guide.html)

為什麼創建Lightning?
Lightning有3個目標:

最大限度地提高靈活性,同時在整個研究項目中抽象出通用樣板代碼。重現性。如果所有項目都使用LightningModule模板,則將更容易了解正在發生的事情以及發生事情的地方!這也意味著每種實現都遵循標準格式。使PyTorch高級用戶功能民主化。分布式訓練?16位?知道您需要它們,但又不想花時間實現?很好...這些功能都內置在Lightning中。

Lightning跟Ignite和fast.ai相比如何?
這是一個徹底的比較。(https://medium.com/@_willfalcon/pytorch-lightning-vs-pytorch-ignite-vs-fast-ai-61dc7480ad8a)

這是我必須要去學習的另一個庫嗎?
不!我們在任何地方都使用純的Pytorch代碼,並且不會添加不必要的抽象!

有計劃要支持Python 2嗎?
不。

有計劃要支持virtualenv嗎?
不。請使用anaconda或miniconda。

conda activate my_env
pip install pytorch-lightning

自定義安裝最前沿

如果您迫不及待想安裝下一個發布版本,請使用以下命令安裝最新版本:

使用GIT(在本地克隆具有完整歷史記錄的整個倉庫)

pip install git+https://github.com/PytorchLightning/pytorch-lightning.git@master --upgrade

使用即時zip(沒有git歷史記錄的倉庫的最後狀態)

pip install https://github.com/PytorchLightning/pytorch-lightning/archive/master.zip --upgrade

安裝任何發行版

您還可以從存儲庫中安裝任何以前的0.X.Y發行版:

pip install https://github.com/PytorchLightning/pytorch-lightning/archive/0.X.Y.zip --upgrade

Lightning 團隊領導William Falcon (williamFalcon) (Lightning創始人)Ethan Harris (ethanwharris) (Torchbearer創始人)Matthew Painter (MattPainter01) (Torchbearer創始人)Justus Schock (justusschock) (前PyTorch Ignite的核心成員)核心維護者Jeremy Jordan (jeremyjordan)Adrian Wälchli (awaelchli)Nicki Skafte (skaftenicki)資金

僅由幾個兼職人員構建開源軟體是非常困難!我們已獲得資金,以確保我們可以聘請專職人員,參加會議並實現您要求的功能,以便更快地前行。

我們的目標是建立一個令人難以置信的研究平臺和龐大的社區支持。許多開源項目已經通過諸如對大公司的支持和特殊幫助之類的活動來為運營籌集資金!

如果您是這些公司之一,請隨時與will@pytorchlightning.ai進行聯繫!

Bibtex

如果您想引用框架,請隨時引用它(但前提是您喜歡它 :)):

@article{falcon2019pytorch,
title={PyTorch Lightning},
author={Falcon, WA},
journal={GitHub. Note: https://github. com/williamFalcon/pytorch-lightning Cited by},
volume={3},
year={2019}
}

相關焦點

  • 使用PyTorch Lightning自動訓練你的深度神經網絡
    你可以使用pip或者conda安裝pytorch lightning。從第一次安裝開始,它就自帶了許多標準機器學習和數據處理庫包。基本代碼的比較在我們進入代碼之前,我想讓你看看下面的圖片。下面有2張圖片解釋了pytorch和pytorch lightning在編碼、建模和訓練上的區別。在左邊,你可以看到,pytorch需要更多的代碼行來創建模型和訓練。
  • 【他山之石】pytorch_lightning 全程筆記
    「他山之石,可以攻玉」,站在巨人的肩膀才能看得更高,走得更遠。
  • 分離硬體和代碼、穩定 API,PyTorch Lightning 1.0.0 版本正式發布
    還記得那個看起來像 Keras 的輕量版 PyTorch 框架 Lightning 嗎?它終於出了 1.0.0 版本,並增添了很多新功能,在度量、優化、日誌記錄、數據流、檢查點等方面均進行了完善。Keras 和 PyTorch 都是對初學者非常友好的深度學習框架,兩者各有優勢,很多研究者和開發者在選擇框架時可能會舉棋不定。
  • 【他山之石】Pytorch Lightning 完全攻略
    自動添加所有Trainer會用到的命令行參數:from argparse import ArgumentParserdef main(args): model = LightningModule() trainer = Trainer.from_argparse_args(args)
  • 【他山之石】Ray和Pytorch Lightning 使用指北
    地址:https://www.zhihu.com/people/chea-simhttps://docs.ray.io/en/master/tune/tutorials/tune-pytorch-lightning.html本文默認已對pytorch lightning較為熟悉。
  • PyTorch Lightning工具學習
    PyTorch Lightning中提供了以下比較方便的功能:Pytorch LightningPyTorch lightning 是為AI相關的專業的研究人員、研究生、博士等人群開發的。被抽象為LightningModule類。工程代碼,這部分代碼重複性強,比如16位精度,分布式訓練。被抽象為Trainer類。非必要代碼,這部分代碼和實驗沒有直接關係,不加也可以,加上可以輔助,比如梯度檢查,log輸出等。被抽象為Callbacks類。
  • PyTorch Lightning 工具學習
    簡單介紹PyTorch lightning 是為AI相關的專業的研究人員、研究生、博士等人群開發的。PyTorch就是William Falcon在他的博士階段創建的,目標是讓AI研究擴展性更強,忽略一些耗費時間的細節。
  • 實操教程|Pytorch-lightning的使用
    Pytorch-lightning(以下簡稱pl)可以非常簡潔得構建深度學習代碼。但是其實大部分人用不到很多複雜得功能。而pl有時候包裝得過於深了,用的時候稍微有一些不靈活。通常來說,在你的模型搭建好之後,大部分的功能都會被封裝在一個叫trainer的類裡面。
  • 像 Keras 一樣優雅地使用 pytorch-lightning
    本篇文章為大家介紹一個可以幫助大家優雅地進行深度學習研究的工具:pytorch-lightning。公眾號後臺回復關鍵字:源碼,獲取本文原始碼!pytorch-lightning 是建立在pytorch之上的高層次模型接口,pytorch-lightning之於pytorch,就如同keras之於tensorflow。關於pytorch-lightning的完整入門介紹,可以參考我的另外一篇文章。
  • 具有PyTorch Lightning的TensorBoard
    與表格相比,圖表和圖形傳達的內容更多直覺是從隨機的混亂中弄清楚,了解給定情況並根據需要提出可行解決方案的最有效方法。實際上,數據科學和機器學習日復一日地利用它幾乎所有的機器學習愛好者都可以使用可視化工具。我們用它來基於精度曲線的模型調試根據PR曲線測試模型的魯棒性分析基於學習收斂的損失曲線使用混淆矩陣 描述模型性能這篇文章涵蓋了什麼我們內心深處知道,我們需要可視化工具來補充我們的開發。
  • 超參搜索調優【Ray】與模型設計工具【Pytorch Lightning 】詳解
    作者:知乎—Chea Sim地址:https://www.zhihu.com/people/chea-sim本文翻譯來源:https://docs.ray.io/en/master/tune/tutorials/tune-pytorch-lightning.html本文默認已對pytorch lightning較為熟悉。
  • PyTorch Lightning 1.0 正式發布!從0到1,有這9大特點
    pytorch_lightning.metrics 是一個為了在 PyTorch 和 PyTorch Lightning 中方便度量開發和使用而創建的度量 API。更新的 API 提供了一種內置方法,可以跨多個 GPU (進程)計算每步的度量,同時存儲統計信息,允許你在一個 epoch 結束時計算度量,而不必擔心與分布式後端相關的任何複雜性。
  • 【Pytorch】新手如何入門pytorch?
    來自 | 知乎地址 | https://www.zhihu.com/question/55720139/answer/147148105作者 | 陳雲編輯 | 機器學習算法與自然語言處理公眾號還可以關注官方倉庫的issue/pull request, 了解pytorch開發進展,以及避坑。還可以加入 slack群組討論,e-mail訂閱等總之  pytorch入門很簡單,代碼很優雅,是我用過的最Pythonic的框架. 歡迎入坑。
  • 從PyTorch到PyTorch Lightning —一個簡要介紹
    1_9fnIoPevuZHJnvNqlte40g然而,簡單的界面使「專業的生產團隊」和「新手」可以使用Pytorch和PyTorch Lightning社區開發的最新技術,我們只需將nn.Module替換為pl.LightningModule
  • 基於PyTorch的「Keras」:除了核心邏輯通通都封裝
    很多研究者和開發者都在考慮到底哪一個框架更好,但目前兩個框架都非常流行,它們都各有優勢。最近,Facebook 研究員 William Falcon 為 PyTorch 披上了一件 Keras 的外衣,他表明用這樣的框架做研究簡直不要太爽。
  • 用Pytorch Lightning重構代碼速度更慢,修復後速度倍增
    兩周前,我將一些深度學習代碼重構為 Pytorch Lightning,預計大約有 1.5 倍的加速。然而,訓練、評估和測試任務的速度卻降為原來的 1/4。重構之後的神經網絡需要運行幾天才能得出結果,因此我想找出原因,並儘可能地減少訓練時間。事情是這樣的,我使用的是一些開源深度學習代碼,這些代碼是用來展示某些機器學習任務最新架構的。然而這些代碼本身既不整潔也沒進行優化。
  • PyTorch、TensorFlow最新版本對比,2021年了你選誰?
    自深度學習重新獲得公認以來,許多機器學習框架層出不窮,爭相成為研究人員以及行業從業人員的新寵。從早期的學術成果 Caffe、Theano,到獲得龐大工業支持的 PyTorch、TensorFlow,許多研究者面對大量的學習框架不知該如何選擇?機器學習框架。
  • 【Pytorch】pytorch權重初始化方式與原理
    來自 | 知乎地址 | https://zhuanlan.zhihu.com/p/100937718作者 | 機器學習入坑者
  • PyTorch 正式版上線:Android
    PyTorch 是一個開源的 Python 機器學習庫,基於 Torch,底層由 C++ 實現,主要應用於人工智慧領域,如自然語言處理,它最初由 Facebook 的人工智慧研究團隊開發。由於 PyTorch 定義網絡結構簡單等特點,自發布以來便受到眾多研究人的青睞。經過研究者的不斷努力,現在, PyTorch 更新到 PyTorch 1.10 版本。
  • 讓PyTorch更輕便,這款深度學習框架你值得擁有!在GitHub上斬獲6.6k星
    這樣,更加易於理解,不易出錯,本來很冗長的代碼一下子就變得輕便了,對AI研究者十分的友好。話不多說,我們就來看看這個輕量版的「PyTorch」。關於LightningLightning將DL/ML代碼分為三種類型:研究代碼、工程代碼、非必要代碼。針對不同的代碼,Lightning有不同的處理方式。