Skip to main content

PyTorch Ignite ClearMLLogger

ignite 仓库包含了一个使用 ignite 并集成 ClearMLLogger 及其 辅助处理器 的示例脚本 mnist_with_clearml_logger.py

PyTorch Ignite 支持一个 ClearMLLogger 处理程序,用于在训练和验证期间记录指标、文本、模型/优化器参数、图表和模型检查点。

示例脚本执行以下操作:

  • 训练一个模型来分类来自MNIST数据集的图像。
  • examples项目中创建一个名为igniteClearML 任务。ClearMLLogger 连接到 ClearML,因此通过它及其处理程序记录的所有内容都会自动被 ClearML 捕获。
  • 使用以下ClearMLLogger辅助处理程序:
    • ClearMLSaver - 将输入的快照保存为ClearML工件。

    • GradsHistHandlerWeightsHistHandler - 分别记录模型的梯度和权重为直方图。

    • GradsScalarHandlerWeightsScalarHandler - 分别将梯度和权重记录为标量。

ClearMLLogger

按照以下步骤集成ClearML:

  1. 创建一个ClearMLLogger对象。当代码运行时,它会连接到ClearML后端,并在ClearML中创建一个任务 (参见ClearMLLogger的参数下方)。

    from ignite.contrib.handlers.clearml_logger import ClearMLLogger

    clearml_logger = ClearMLLogger(project_name="examples", task_name="ignite")
  2. 将辅助处理程序附加到 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次调用处理程序时处理直方图值)。影响 GradsHistHandlerWeightsHistHandler。默认值为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下。

image

模型快照

ARTIFACTS标签中查看保存的快照。

image

要查看模型详细信息,请在ARTIFACTS选项卡中点击模型名称(或下载它)。

image