跳到主要内容

PyTorch Ignite ClearMLLogger

`ignite` 仓库包含 mnist_with_clearml_logger.py 示例脚本,该脚本使用 ignite 并集成了 ClearMLLogger 及其 辅助处理程序

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

该示例脚本执行以下操作

  • 训练一个模型来分类 MNIST 数据集中的图像。
  • 在 `examples` 项目中创建名为 `ignite` 的 ClearML 任务。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 次调用处理程序时处理直方图值)。影响 `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 下查看标量,包括训练和验证指标。

Task scalars Task scalars

模型快照

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

Task Artifacts Task Artifacts

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

Model details Model details