系统/ PyTorch版本 | 1.3(最低标准) | 1.4 | 1.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
这是一个没有验证或测试循环的最少代码的示例。
# 这只是一个简单的有一些结构的nn.Moduleclass 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)
Lightning是一种组织PyTorch代码,以使科学代码(science code)与工程分离的方法。它不仅仅是框架,而是PyTorch样式指南。
在Lightning中,您可以将代码分为3个不同的类别:
这是一个如何将研究代码重构为LightningModule的示例。
其余的代码由Trainer自动执行!
每个新的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()
对于您可能需要的其他任何内容,我们都有一个广泛的回调系统,您可以使用它来添加trainer中未实现的任意功能。
如果您只是要学习深度学习,我们建议您先学习PyTorch!一旦实现了模型,请回来并使用Lightning的所有高级功能:)
一切都是蓝色的!
这就是lightning将科学(红色)与工程(蓝色)分开的方式。
如果您的代码不是一团糟,那么您应该可以在不到1小时的时间内将其组织成一个LightningModule。如果您的代码一团糟,那么您无论如何都要清理您的代码;)
尽管您的研究/生产项目可能开始很简单,但是一旦添加了GPU和TPU训练,16位精度等功能,最终您将花费比研究更多的时间进行工程设计。Lightning会自动为您进行严格测试。
Lightning也是PyTorch生态系统的一部分,该生态系统要求项目具有可靠的测试,文档和支持。
这是您将真实的PyTorch项目组织到Lightning中的方法。
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 Trainermodel = LitSystem()# 最基本的trainer, 使用默认值trainer = Trainer()trainer.fit(model)
任何! 请记住,这只是组织的PyTorch代码。训练步骤定义了训练循环中发生的核心复杂度。
# 在这里定义训练的过程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个GPUtrainer = Trainer(max_epochs=1, gpus=8)# 256个GPUtrainer = 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具有流行的日志记录/可视化框架的开箱即用的集成
查看这份很棒的研究论文列表以及使用Lightning实现的例子。
欢迎来到Lightning社区!
如有任何疑问,请随时:
1. 阅读文档。
2. 搜索问题。
3. 使用pytorch-lightning标签在stackoverflow进行提问。
4. 加入我们的slack。
如何使用Lightning进行快速研究?
Here’s a walk-through
为什么创建Lightning?
Lightning有3个目标:
Lightning跟Ignite和fast.ai相比如何?
这是一个彻底的比较。
这是我必须要去学习的另一个库吗?
不!我们在任何地方都使用纯的Pytorch代码,并且不会添加不必要的抽象!
有计划要支持Python 2吗?
不。
有计划要支持virtualenv吗?
不。请使用anaconda或miniconda。
conda activate my_envpip install pytorch-lightning
如果您迫不及待想安装下一个发布版本,请使用以下命令安装最新版本:
* 使用GIT(在本地克隆具有完整历史记录的整个仓库)
bash pip install git+https://github.com/PytorchLightning/pytorch-lightning.git@master --upgrade
* 使用即时zip(没有git历史记录的仓库的最后状态)
bash 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进行联系!
如果您想引用框架,请随时引用它(但前提是您喜欢它 :)):
@article{falcon2019pytorch, title={PyTorch Lightning}, author={Falcon, WA}, journal={GitHub. Note: https://github. com/williamFalcon/pytorch-lightning Cited by}, volume={3}, year={2019}}
原创文章,作者:pytorch,如若转载,请注明出处:http://pytorchchina.com/2020/06/15/pytorch-lightning-%e4%b8%93%e9%97%a8%e4%b8%ba%e6%9c%ba%e5%99%a8%e5%ad%a6%e4%b9%a0%e7%a0%94%e7%a9%b6%e8%80%85%e5%bc%80%e5%8f%91%e7%9a%84pytorch%e8%bd%bb%e9%87%8f%e5%8c%85%e8%a3%85%e5%99%a8/
联系客服