想使用PyTorch Lightning來(lái)構(gòu)建您的深度學(xué)習(xí)代碼,并且不介意學(xué)習(xí)它的日志記錄功能嗎?不知道閃電具有強(qiáng)大的海王星集成嗎?為什么選擇PyTorchLightning?如果您從未聽(tīng)說(shuō)過(guò),PyTorch Lightning是PyTorch之上非常輕便的包裝器,它更像是編碼標(biāo)準(zhǔn),而不是框架。該格式可讓您擺脫大量樣板代碼,同時(shí)使其易于遵循。結(jié)果是一個(gè)框架,為研究人員,學(xué)生和生產(chǎn)團(tuán)隊(duì)提供了最大的靈活性,使他們可以靈活地嘗試瘋狂的想法,而無(wú)需學(xué)習(xí)另一個(gè)框架,同時(shí)自動(dòng)刪除所有工程細(xì)節(jié)。
您可以立即使用的一些很棒的功能是:
· 在CPU,GPU或TPU上進(jìn)行訓(xùn)練而無(wú)需更改代碼,
· 簡(jiǎn)單的多GPU和多節(jié)點(diǎn)訓(xùn)練
· 普通的16位精度支持
· 內(nèi)置性能分析器(Trainer(profile=True))
· 以及其他眾多功能。
但是,通過(guò)這種強(qiáng)大的功能輕松進(jìn)行實(shí)驗(yàn),以及靈活地調(diào)整所需的任何東西,都會(huì)帶來(lái)問(wèn)題。如何跟蹤所有變化,例如:
· 損失和指標(biāo),
· 超參數(shù),
· 模型二進(jìn)制文件,
· 驗(yàn)證預(yù)測(cè),
還有其他可以幫助您組織實(shí)驗(yàn)過(guò)程的東西?
幸運(yùn)的是,PyTorch閃電為您提供了一個(gè)選項(xiàng),可輕松將記錄儀連接到 pl.Trainer可以跟蹤前面提到的所有內(nèi)容(以及許多其他內(nèi)容)的受支持記錄器之一是 NeptuneLogger將您的實(shí)驗(yàn)保存在……您猜中了海王星。海王星不僅跟蹤您的實(shí)驗(yàn)工件,而且:
· 讓我們監(jiān)視所有實(shí)時(shí)情況
· 提供了一個(gè)不錯(cuò)的用戶界面,您可以在其中過(guò)濾,分組和比較各種實(shí)驗(yàn)運(yùn)行
· 訪問(wèn)您從Python腳本或Jupyter Notebook以編程方式記錄的實(shí)驗(yàn)數(shù)據(jù)。最好的部分是,這種集成確實(shí)使用起來(lái)很簡(jiǎn)單。
注意:
您也可以查看此colab筆記本,并嘗試我們將要討論的示例。
基本整合
在最簡(jiǎn)單的情況下,您只需創(chuàng)建 NeptuneLogger:
from pytorch_lightning.logging.neptune import NeptuneLogger
neptune_logger = NeptuneLogger(
api_key="ANONYMOUS",
project_name="shared/pytorch-lightning-integration")
并將其傳遞給的logger參數(shù) Trainer并適合您的模型。
from pytorch_lightning import Trainer
trainer = Trainer(logger=neptune_logger)
trainer.fit(model)
這樣,您將獲得:
· 記錄度量和損失并創(chuàng)建圖表,
· 保存超參數(shù)(如果通過(guò)閃電參數(shù)定義)
· ,記錄硬件利用率
· Git信息和執(zhí)行腳本已記錄
高級(jí)選項(xiàng)
海王星為您提供了許多自定義選項(xiàng),您可以簡(jiǎn)單地記錄更多特定于實(shí)驗(yàn)的內(nèi)容,例如圖像預(yù)測(cè),模型權(quán)重,性能圖表等。
所有這些功能都可供Lightning用戶使用,在接下來(lái)的部分中,我將向您展示如何充分利用Neptune。
在創(chuàng)建NeptuneLogger時(shí)記錄其他信息
創(chuàng)建記錄器時(shí),可以記錄其他有用的信息:
· 代碼:快照腳本,jupyter筆記本,配置文件等。
· 超參數(shù):對(duì)數(shù)學(xué)習(xí)率,歷元數(shù)和其他事物(如果您使用的是閃電) hparams來(lái)自閃電的對(duì)象將被自動(dòng)記錄。
· 屬性:日志數(shù)據(jù)位置,數(shù)據(jù)版本或其他內(nèi)容。
· 標(biāo)簽:添加“ resnet50”或“ no-augmentation”之類的標(biāo)簽來(lái)組織跑步。
· 名稱:每個(gè)實(shí)驗(yàn)都應(yīng)使用一個(gè)有意義的名稱,因此我們不要每次都使用“默認(rèn)”。
只需將此信息傳遞給記錄器即可:
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,
)
并像以前一樣繼續(xù)進(jìn)行操作,以獲得像這樣的組織好的儀表板。
訓(xùn)練期間記錄多余的東西
培訓(xùn)期間可以記錄很多有趣的信息。
您可能對(duì)監(jiān)視以下內(nèi)容感興趣:
每個(gè)時(shí)期之后的模型預(yù)測(cè)(考慮預(yù)測(cè)蒙版或覆蓋的邊界框)
模型檢查點(diǎn)或其他對(duì)象
真的很簡(jiǎn)單。只是去你的LightningModule 和海王星實(shí)驗(yàn)的調(diào)用方法 self.logger.experiment。
例如,我們可以記錄每個(gè)時(shí)期之后的損失直方圖:
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}
您在訓(xùn)練期間可能想要記錄的其他內(nèi)容是:
· self.logger.experiment.log_metric#記錄自定義指標(biāo)
· self.logger.experiment.log_text#記錄文本值
· self.;ogger.experiment.log_artifact# 日志文件
· self.logger.experiment.log_image#記錄圖像,圖表
· self.logger.experiment.set_property#添加鍵:值對(duì)
· self.logger.experiment.append_tag#為組織添加標(biāo)簽
很酷吧?但這不是您能做的!
培訓(xùn)結(jié)束后記錄日志
.fit循環(huán)結(jié)束后,不必完成對(duì)實(shí)驗(yàn)的跟蹤。
您可能要跟蹤 trainer.test(model) 或計(jì)算一些其他驗(yàn)證指標(biāo)并將其記錄下來(lái)。
為此,您只需要告訴 NeptuneLogger 適合后不關(guān)閉:
neptune_logger = NeptuneLogger(
api_key="ANONYMOUS",
project_name="shared/pytorch-lightning-integration",
close_after_fit=False,
...
)
…并且您可以繼續(xù)記錄
測(cè)試指標(biāo):
trainer.test(model)
其他(外部)指標(biāo):
from sklearn.metrics import accuracy_score
...
accuracy = accuracy_score(y_true, y_pred)
neptune_logger.experiment.log_metric('test_accuracy', accuracy)
測(cè)試集上的性能圖表:
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)
整個(gè)模型檢查點(diǎn)目錄:
neptune_logger.experiment.log_artifact('my/checkpoints')
直接將實(shí)驗(yàn)信息提取到筆記本中
您可以在實(shí)驗(yàn)完成后獲取實(shí)驗(yàn),分析結(jié)果并根據(jù)需要更新指標(biāo),工件或其他內(nèi)容。
例如,讓我們將實(shí)驗(yàn)儀表板獲取到pandas DataFrame:
import neptune
project = neptune.init('shared/pytorch-lightning-integration')
project.get_leaderboard().head()
或通過(guò)海王星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'])
或獲取單個(gè)實(shí)驗(yàn)并使用訓(xùn)練后計(jì)算出的一些外部指標(biāo)對(duì)其進(jìn)行更新:
exp = project.get_experiments(id='PYTOR-63')[0]
exp.log_metric('some_external_metric', 0.92)
如您所見(jiàn),您可以從Pytorch Lightning登錄到Neptune。
如果您想更深入地了解這一點(diǎn):
· 閱讀集成文檔
· 去看看海王星,看看它可以做的其他事情,
· 在colab上試用Lightning + Neptune
最終思想
Pytorch Lightning是一個(gè)很棒的庫(kù),可以幫助您:
· 整理您的深度學(xué)習(xí)代碼,使其他人容易理解它,
· 將開(kāi)發(fā)樣板外包給經(jīng)驗(yàn)豐富的工程師團(tuán)隊(duì),
· 無(wú)需更改代碼即可訪問(wèn)許多最新功能,
借助Neptune集成,您可以免費(fèi)獲得其他一些功能:
· 您可以監(jiān)控并跟蹤您的深度學(xué)習(xí)實(shí)驗(yàn),
· 您可以輕松地與他人分享您的研究,
· 您和您的團(tuán)隊(duì)可以訪問(wèn)實(shí)驗(yàn)元數(shù)據(jù)并更有效地協(xié)作。
以上即是關(guān)于使用NeptuneAI跟蹤PyTorch閃電實(shí)驗(yàn)的全部?jī)?nèi)容,想了解更多關(guān)于NeptuneAI的信息,請(qǐng)繼續(xù)關(guān)注中培偉業(yè)。