使用PyPI進行輕鬆安裝
pip install pytorch-lightning
這是一個沒有驗證或測試循環的最少代碼的示例。
# 這只是一個簡單的有一些結構的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://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_plLightningModule定義了一個*系統,*例如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}
# 在這裡定義驗證代碼
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個目標:
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
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
僅由幾個兼職人員構建開源軟體是非常困難!我們已獲得資金,以確保我們可以聘請專職人員,參加會議並實現您要求的功能,以便更快地前行。
我們的目標是建立一個令人難以置信的研究平臺和龐大的社區支持。許多開源項目已經通過諸如對大公司的支持和特殊幫助之類的活動來為運營籌集資金!
如果您是這些公司之一,請隨時與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}
}