磐创AI分享
专门为机器学习研究者开发的PyTorch轻量包装器(wrapper)。缩放您的模型。写更少的模板代码。
使用PyPI进行轻松安装
重构您的PyTorch代码+好处+完整演练
演示
这是一个没有验证或测试循环的最少代码的示例。
# 这只是一个简单的有一些结构的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)
其他示例
GAN
(https://colab.research.google.com/drive/1F_RNcHzTfFuQf-LeKvSlud6x7jXYkG31#scrollTo=P0bSmCw57aV5)
BERT
(https://colab.research.google.com/drive/1F_RNcHzTfFuQf-LeKvSlud6x7jXYkG31#scrollTo=7uQVI-xv9Ddj)
DQN
(https://colab.research.google.com/drive/1F_RNcHzTfFuQf-LeKvSlud6x7jXYkG31#scrollTo=NWvMLBDySQI5)
MNIST on TPUs
(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的示例(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会自动为您进行严格测试。 支持
Lightning也是PyTorch生态系统的一部分,该生态系统要求项目具有可靠的测试,文档和支持。 README目录
实际例子 这是您将真实的PyTorch项目组织到Lightning中的方法。 pt_to_plLightningModule定义了一个*系统,*例如seq-2-seq,GAN等。它还可以定义一个简单的分类器。 总结来说,您只需要做:
定义一个LightningModule
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):
...
给它配备一个Trainer
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具有流行的日志记录/可视化框架的开箱即用的集成
tf_lossLightning使40多个DL / ML研究的部分自动化
例子 查看这份很棒的研究论文列表以及使用Lightning实现的例子。
教程 查看我们的入门指南(https://pytorch-lightning.readthedocs.io/en/latest/introduction_guide.html)来开始使用。或直接进入我们的教程(https://pytorch-lightning.readthedocs.io/en/latest/#tutorials)。 寻求帮助 欢迎来到Lightning社区! 如有任何疑问,请随时:
常见问题 如何使用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
自定义安装
最前沿
如果您迫不及待想安装下一个发布版本,请使用以下命令安装最新版本:
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
Lightning 团队
领导
核心维护者
资金
仅由几个兼职人员构建开源软件是非常困难!我们已获得资金,以确保我们可以聘请专职人员,参加会议并实现您要求的功能,以便更快地前行。
我们的目标是建立一个令人难以置信的研究平台和庞大的社区支持。许多开源项目已经通过诸如对大公司的支持和特殊帮助之类的活动来为运营筹集资金!
如果您是这些公司之一,请随时与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}
}
原文链接:https://github.com/PyTorchLightning/pytorch-lightning
更多资料:
PyTorch 中文文档:http://pytorch123.com/
GitHub :https://github.com/fendouai/PyTorchDocs
- End -