PyTorch Ignite ClearMLLogger
`ignite` 仓库包含 mnist_with_clearml_logger.py 示例脚本,该脚本使用 ignite 并集成了 ClearMLLogger 及其 辅助处理程序。
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 标签页中,点击模型名称(或下载它)。