如何禁用 PyTorch-Lightning 记录器的日志记录?

Posted

技术标签:

【中文标题】如何禁用 PyTorch-Lightning 记录器的日志记录?【英文标题】:How to disable logging from PyTorch-Lightning logger? 【发布时间】:2021-10-18 19:17:57 【问题描述】:

PyTorch-Lightning 中的 Logger 打印有关要训练(或评估)的模型以及训练过程中的进度的信息,

但是,就我而言,我想隐藏来自记录器的所有消息,以免将输出淹没在Jupyter Notebook

我在官方文档页面https://pytorch-lightning.readthedocs.io/en/latest/common/trainer.html#trainer-flags 上查看了 Trainer 类的 API,似乎没有关闭来自记录器的消息的选项。

有一个参数log_every_n_steps可以设置成很大的值,但还是会显示每个epoch后的记录结果。

如何禁用日志记录?

【问题讨论】:

【参考方案1】:

我假设在输出流泛滥方面有两件事特别困扰您:

一、“体重汇总”:

  | Name | Type   | Params
--------------------------------
0 | l1   | Linear | 100 K 
1 | l2   | Linear | 1.3 K 
--------------------------------
...

二、进度条:

Epoch 0:  74%|███████████   | 642/1874 [00:02<00:05, 233.59it/s, loss=0.85, v_num=wxln]

PyTorch Lightning 为关闭它们提供了非常清晰和优雅的解决方案:Trainer(progress_bar_refresh_rate=0) 用于关闭进度条,Trainer(weights_summary=None) 用于关闭重量摘要。

【讨论】:

progress_bar_refresh_rate 现在似乎已被弃用。推荐使用enable_progress_bar=False。或者添加一个TQDMProgressBar 回调并修改为refresh_rate【参考方案2】:

或许可以这样试试?

logging.getLogger("package").propagate = False

【讨论】:

感谢您的建议。但是,问题仍然存在【参考方案3】:

解决方案是结合@Artyrm Sergeev 的建议和此处建议的答案https://***.com/a/52559560/13614416。

    获取所有pytorch_lightning 记录器:

    pl_loggers = [ logging.getLogger(名称) logging.root.manager.loggerDict 中的名称 如果名称中有“pytorch_lightning” ]

    trainer.fit 放入以下构造中:

    捕获 io.capture_output():trainer.fit(...)

【讨论】:

以上是关于如何禁用 PyTorch-Lightning 记录器的日志记录?的主要内容,如果未能解决你的问题,请参考以下文章

pytorch-lightning入门—— 初了解

Pytorch-Lightning 是不是具有多处理(或 Joblib)模块?

pytorch-lightning 中的正态分布采样

无法从 Pytorch-Lightning 中的检查点加载模型

PyTorch-lightning 模型在第一个 epoch 后内存不足

使用 pytorch-lightning 进行简单预测的示例