想使用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的信息,請繼續關注中培偉業。