精选文章

使用NeptuneAI跟踪PyTorch闪电实验

2020-08-04 19:07:00 | 来源:中培企业IT培训网

想使用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的信息,请继续关注中培伟业。

标签: NeptuneAI PyTorch