想使用PyTorch Lightning来构建您的深度学习代码,并且不介意学习它的日志记录功能吗?不知道闪电具有强大的海王星集成吗?为什么选择PyTorchLightning?如果您从未听说过,PyTorch Lightning是PyTorch之上非常轻便的包装器,它更像是编码标准,而不是框架。该格式可让您摆脱大量样板代码,同时使其易于遵循。结果是一个框架,为研究人员,学生和生产团队提供了最大的灵活性,使他们可以灵活地尝试疯狂的想法,而无需学习另一个框架,同时自动删除所有工程细节。
您可以立即使用的一些很棒的功能是:
· 在CPU,GPU或TPU上进行训练而无需更改代码,
· 简单的多GPU和多节点训练
· 普通的16位精度支持
· 内置性能分析器(Trainer(profile=True))
· 以及其他众多功能。
但是,通过这种强大的功能轻松进行实验,以及灵活地调整所需的任何东西,都会带来问题。如何跟踪所有变化,例如:
· 损失和指标,
· 超参数,
· 模型二进制文件,
· 验证预测,
还有其他可以帮助您组织实验过程的东西?
幸运的是,PyTorch闪电为您提供了一个选项,可轻松将记录仪连接到 pl.Trainer可以跟踪前面提到的所有内容(以及许多其他内容)的受支持记录器之一是 NeptuneLogger将您的实验保存在……您猜中了海王星。海王星不仅跟踪您的实验工件,而且:
· 让我们监视所有实时情况
· 提供了一个不错的用户界面,您可以在其中过滤,分组和比较各种实验运行
· 访问您从Python脚本或Jupyter Notebook以编程方式记录的实验数据。最好的部分是,这种集成确实使用起来很简单。
注意:
您也可以查看此colab笔记本,并尝试我们将要讨论的示例。
基本整合
在最简单的情况下,您只需创建 NeptuneLogger:
from pytorch_lightning.logging.neptune import NeptuneLogger
neptune_logger = NeptuneLogger(
api_key="ANONYMOUS",
project_name="shared/pytorch-lightning-integration")
并将其传递给的logger参数 Trainer并适合您的模型。
from pytorch_lightning import Trainer
trainer = Trainer(logger=neptune_logger)
trainer.fit(model)
这样,您将获得:
· 记录度量和损失并创建图表,
· 保存超参数(如果通过闪电参数定义)
· ,记录硬件利用率
· Git信息和执行脚本已记录
高级选项
海王星为您提供了许多自定义选项,您可以简单地记录更多特定于实验的内容,例如图像预测,模型权重,性能图表等。
所有这些功能都可供Lightning用户使用,在接下来的部分中,我将向您展示如何充分利用Neptune。
在创建NeptuneLogger时记录其他信息
创建记录器时,可以记录其他有用的信息:
· 代码:快照脚本,jupyter笔记本,配置文件等。
· 超参数:对数学习率,历元数和其他事物(如果您使用的是闪电) hparams来自闪电的对象将被自动记录。
· 属性:日志数据位置,数据版本或其他内容。
· 标签:添加“ resnet50”或“ no-augmentation”之类的标签来组织跑步。
· 名称:每个实验都应使用一个有意义的名称,因此我们不要每次都使用“默认”。
只需将此信息传递给记录器即可:
neptune_logger = NeptuneLogger(
api_key="ANONYMOUS",
project_name="shared/pytorch-lightning-integration",
experiment_name="default", # Optional,
params={"max_epochs": 10,
"batch_size": 32}, # Optional,
tags=["pytorch-lightning", "mlp"] # Optional,
upload_source_files=["**/*.py", "*.yaml"] # Optional,
)
并像以前一样继续进行操作,以获得像这样的组织好的仪表板。
训练期间记录多余的东西
培训期间可以记录很多有趣的信息。
您可能对监视以下内容感兴趣:
每个时期之后的模型预测(考虑预测蒙版或覆盖的边界框)
模型检查点或其他对象
真的很简单。只是去你的LightningModule 和海王星实验的调用方法 self.logger.experiment。
例如,我们可以记录每个时期之后的损失直方图:
class CoolSystem(pl.LightningModule):
def validation_end(self, outputs):
# OPTIONAL
avg_loss = torch.stack([x['val_loss'] for x in outputs]).mean()
tensorboard_logs = {'val_loss': avg_loss}
# log debugging images like histogram of losses
fig = plt.figure()
losses = np.stack([x['val_loss'].numpy() for x in outputs])
plt.hist(losses)
self.logger.experiment.log_image('loss_histograms', fig)
plt.close(fig)
return {'avg_val_loss': avg_loss, 'log': tensorboard_logs}
您在训练期间可能想要记录的其他内容是:
· self.logger.experiment.log_metric#记录自定义指标
· self.logger.experiment.log_text#记录文本值
· self.;ogger.experiment.log_artifact# 日志文件
· self.logger.experiment.log_image#记录图像,图表
· self.logger.experiment.set_property#添加键:值对
· self.logger.experiment.append_tag#为组织添加标签
很酷吧?但这不是您能做的!
培训结束后记录日志
.fit循环结束后,不必完成对实验的跟踪。
您可能要跟踪 trainer.test(model) 或计算一些其他验证指标并将其记录下来。
为此,您只需要告诉 NeptuneLogger 适合后不关闭:
neptune_logger = NeptuneLogger(
api_key="ANONYMOUS",
project_name="shared/pytorch-lightning-integration",
close_after_fit=False,
...
)
…并且您可以继续记录
测试指标:
trainer.test(model)
其他(外部)指标:
from sklearn.metrics import accuracy_score
...
accuracy = accuracy_score(y_true, y_pred)
neptune_logger.experiment.log_metric('test_accuracy', accuracy)
测试集上的性能图表:
from scikitplot.metrics import plot_confusion_matrix
import matplotlib.pyplot as plt
...
fig, ax = plt.subplots(figsize=(16, 12))
plot_confusion_matrix(y_true, y_pred, ax=ax)
neptune_logger.experiment.log_image('confusion_matrix', fig)
整个模型检查点目录:
neptune_logger.experiment.log_artifact('my/checkpoints')
直接将实验信息提取到笔记本中
您可以在实验完成后获取实验,分析结果并根据需要更新指标,工件或其他内容。
例如,让我们将实验仪表板获取到pandas DataFrame:
import neptune
project = neptune.init('shared/pytorch-lightning-integration')
project.get_leaderboard().head()
或通过海王星HiPlot集成使用HiPlot将其可视化:
from neptunecontrib.viz import make_parallel_coordinates_plot
make_parallel_coordinates_plot(
metrics= ['train_loss', 'val_loss', 'test_accuracy'],
params = ['max_epochs', 'batch_size', 'lr'])
或获取单个实验并使用训练后计算出的一些外部指标对其进行更新:
exp = project.get_experiments(id='PYTOR-63')[0]
exp.log_metric('some_external_metric', 0.92)
如您所见,您可以从Pytorch Lightning登录到Neptune。
如果您想更深入地了解这一点:
· 阅读集成文档
· 去看看海王星,看看它可以做的其他事情,
· 在colab上试用Lightning + Neptune
最终思想
Pytorch Lightning是一个很棒的库,可以帮助您:
· 整理您的深度学习代码,使其他人容易理解它,
· 将开发样板外包给经验丰富的工程师团队,
· 无需更改代码即可访问许多最新功能,
借助Neptune集成,您可以免费获得其他一些功能:
· 您可以监控并跟踪您的深度学习实验,
· 您可以轻松地与他人分享您的研究,
· 您和您的团队可以访问实验元数据并更有效地协作。
以上即是关于使用NeptuneAI跟踪PyTorch闪电实验的全部内容,想了解更多关于NeptuneAI的信息,请继续关注中培伟业。