PyTorch Ignite ClearMLLogger
ignite
仓库包含了一个使用 ignite 并集成 ClearMLLogger 及其 辅助处理器 的示例脚本 mnist_with_clearml_logger.py。
PyTorch Ignite 支持一个 ClearMLLogger
处理程序,用于在训练和验证期间记录指标、文本、模型/优化器参数、图表和模型检查点。
示例脚本执行以下操作:
- 训练一个模型来分类来自MNIST数据集的图像。
- 在
examples
项目中创建一个名为ignite
的ClearML 任务。ClearMLLogger 连接到 ClearML,因此通过它及其处理程序记录的所有内容都会自动被 ClearML 捕获。 - 使用以下ClearMLLogger辅助处理程序:
-
ClearMLSaver - 将输入的快照保存为ClearML工件。
-
GradsHistHandler 和 WeightsHistHandler - 分别记录模型的梯度和权重为直方图。
-
GradsScalarHandler 和 WeightsScalarHandler - 分别将梯度和权重记录为标量。
-
ClearMLLogger
按照以下步骤集成ClearML:
-
创建一个
ClearMLLogger
对象。当代码运行时,它会连接到ClearML后端,并在ClearML中创建一个任务 (参见ClearMLLogger的参数下方)。from ignite.contrib.handlers.clearml_logger import ClearMLLogger
clearml_logger = ClearMLLogger(project_name="examples", task_name="ignite") -
将辅助处理程序附加到
ClearMLLogger
对象。例如,将
OutputHandler
附加到每次迭代中记录训练损失:clearml_logger.attach(
trainer,
log_handler=OutputHandler(tag="training",
output_transform=lambda loss: {"loss": loss}),
event_name=Events.ITERATION_COMPLETED
)
参数
以下是ClearMLLogger
参数:
project_name
- 将在其中创建实验的项目的名称。task_name
– 任务的名称。task_type
– 实验的类型(参见任务类型)。report_freq
– 直方图处理频率(每X次调用处理程序时处理直方图值)。影响GradsHistHandler
和WeightsHistHandler
。默认值为100。histogram_update_freq_multiplier
– 直方图报告频率(首先报告前X个直方图,之后每X次报告一次)。默认值为10。histogram_granularity
- 直方图采样粒度。默认值为50。
日志记录
要记录标量、ignite引擎的输出和/或指标,请使用OutputHandler
。
- 在每次迭代时记录训练损失:
clearml_logger.attach(
trainer,
log_handler=OutputHandler(tag="training",
output_transform=lambda loss: {"loss": loss}),
event_name=Events.ITERATION_COMPLETED
)
- 记录训练指标:
clearml_logger.attach(
train_evaluator,
log_handler=OutputHandler(
tag="training",
metric_names=["nll", "accuracy"],
global_step_transform=global_step_from_engine(trainer)
),
event_name=Events.EPOCH_COMPLETED
)
- 验证的日志指标:
clearml_logger.attach(
evaluator,
log_handler=OutputHandler(
tag="validation",
metric_names=["nll", "accuracy"],
global_step_transform=global_step_from_engine(trainer)
),
event_name=Events.EPOCH_COMPLETED
)
要记录优化器参数,请使用attach_opt_params_handler
方法:
# Attach the logger to the trainer to log optimizer's parameters, e.g. learning rate at each iteration
clearml_logger.attach_opt_params_handler(
trainer, event_name=Events.ITERATION_COMPLETED(every=100), optimizer=optimizer
)
模型权重
要将模型权重记录为标量,请使用 WeightsScalarHandler
:
from ignite.contrib.handlers.clearml_logger import WeightsScalarHandler
clearml_logger.attach(
trainer,
log_handler=WeightsScalarHandler(model, reduction=torch.norm),
event_name=Events.ITERATION_COMPLETED
)
要将模型权重记录为直方图,请使用 WeightsHistHandler
:
from ignite.contrib.handlers.clearml_logger import WeightsHistHandler
clearml_logger.attach(
trainer,
log_handler=WeightsHistHandler(model),
event_name=Events.ITERATION_COMPLETED
)
模型快照
要将模型检查点保存为ClearML工件,请使用ClearMLSaver
:
from ignite.handlers import Checkpoint
from ignite.contrib.handlers.clearml_logger import ClearMLSaver
handler = Checkpoint(
{"model": model},
ClearMLSaver(),
n_saved=1,
score_function=lambda e: e.state.metrics["accuracy"],
score_name="val_acc",
filename_prefix="best",
global_step_transform=global_step_from_engine(trainer),
)
validation_evaluator.add_event_handler(Events.EPOCH_COMPLETED, handler)
可视化实验结果
当代码运行时,实验结果可以在ClearML Web UI中查看。
标量
在ClearML Web UI的实验页面中查看标量,包括训练和验证指标,位于SCALARS下。
模型快照
在ARTIFACTS标签中查看保存的快照。
要查看模型详细信息,请在ARTIFACTS选项卡中点击模型名称(或下载它)。