mmengine/docs/zh_cn/common_usage/visualize_training_log.md

7.6 KiB
Raw Blame History

可视化训练日志

MMEngine 集成了 TensorBoardWeights & Biases (WandB)MLflowClearMLNeptuneDVCLiveAim 实验管理工具,你可以很方便地跟踪和可视化损失及准确率等指标。

下面基于 15 分钟上手 MMENGINE 中的例子介绍如何一行配置实验管理工具。

TensorBoard

设置 Runner 初始化参数中的 visualizer,并将 vis_backends 设置为 TensorboardVisBackend

runner = Runner(
    model=MMResNet50(),
    work_dir='./work_dir',
    train_dataloader=train_dataloader,
    optim_wrapper=dict(optimizer=dict(type=SGD, lr=0.001, momentum=0.9)),
    train_cfg=dict(by_epoch=True, max_epochs=5, val_interval=1),
    val_dataloader=val_dataloader,
    val_cfg=dict(),
    val_evaluator=dict(type=Accuracy),
    visualizer=dict(type='Visualizer', vis_backends=[dict(type='TensorboardVisBackend')]),
)
runner.train()

WandB

使用 WandB 前需安装依赖库 wandb 并登录至 wandb。

pip install wandb
wandb login

设置 Runner 初始化参数中的 visualizer,并将 vis_backends 设置为 WandbVisBackend

runner = Runner(
    model=MMResNet50(),
    work_dir='./work_dir',
    train_dataloader=train_dataloader,
    optim_wrapper=dict(optimizer=dict(type=SGD, lr=0.001, momentum=0.9)),
    train_cfg=dict(by_epoch=True, max_epochs=5, val_interval=1),
    val_dataloader=val_dataloader,
    val_cfg=dict(),
    val_evaluator=dict(type=Accuracy),
    visualizer=dict(type='Visualizer', vis_backends=[dict(type='WandbVisBackend')]),
)
runner.train()

image

可以点击 WandbVisBackend API 查看 WandbVisBackend 可配置的参数。例如 init_kwargs,该参数会传给 wandb.init 方法。

runner = Runner(
    ...
    visualizer=dict(
        type='Visualizer',
        vis_backends=[
            dict(
                type='WandbVisBackend',
                init_kwargs=dict(project='toy-example')
            ),
        ],
    ),
    ...
)
runner.train()

MLflow (WIP)

ClearML

使用 ClearML 前需安装依赖库 clearml 并参考 Connect ClearML SDK to the Server 进行配置。

pip install clearml
clearml-init

设置 Runner 初始化参数中的 visualizer,并将 vis_backends 设置为 ClearMLVisBackend

runner = Runner(
    model=MMResNet50(),
    work_dir='./work_dir',
    train_dataloader=train_dataloader,
    optim_wrapper=dict(optimizer=dict(type=SGD, lr=0.001, momentum=0.9)),
    train_cfg=dict(by_epoch=True, max_epochs=5, val_interval=1),
    val_dataloader=val_dataloader,
    val_cfg=dict(),
    val_evaluator=dict(type=Accuracy),
    visualizer=dict(type='Visualizer', vis_backends=[dict(type='ClearMLVisBackend')]),
)
runner.train()

image

Neptune

使用 Neptune 前需先安装依赖库 neptune 并登录 Neptune.AI 进行配置。

pip install neptune

设置 Runner 初始化参数中的 visualizer,并将 vis_backends 设置为 NeptuneVisBackend

runner = Runner(
    model=MMResNet50(),
    work_dir='./work_dir',
    train_dataloader=train_dataloader,
    optim_wrapper=dict(optimizer=dict(type=SGD, lr=0.001, momentum=0.9)),
    train_cfg=dict(by_epoch=True, max_epochs=5, val_interval=1),
    val_dataloader=val_dataloader,
    val_cfg=dict(),
    val_evaluator=dict(type=Accuracy),
    visualizer=dict(type='Visualizer', vis_backends=[dict(type='NeptuneVisBackend')]),
)
runner.train()

image

请注意:若未提供 projectapi_token neptune 将被设置成离线模式,产生的文件将保存到本地 .neptune 文件下。 推荐在初始化时提供 projectapi_token ,具体方法如下所示:

runner = Runner(
    ...
    visualizer=dict(
        type='Visualizer',
        vis_backends=[
            dict(
                type='NeptuneVisBackend',
                init_kwargs=dict(project='workspace-name/project-name',
                                 api_token='your api token')
            ),
        ],
    ),
    ...
)
runner.train()

更多初始化配置参数可点击 neptune.init_run API 查询。

DVCLive

使用 DVCLive 前需先安装依赖库 dvclive 并参考 iterative.ai 进行配置。常见的配置方式如下:

pip install dvclive
cd ${WORK_DIR}
git init
dvc init
git commit -m "DVC init"

设置 Runner 初始化参数中的 visualizer,并将 vis_backends 设置为 DVCLiveVisBackend

runner = Runner(
    model=MMResNet50(),
    work_dir='./work_dir_dvc',
    train_dataloader=train_dataloader,
    optim_wrapper=dict(optimizer=dict(type=SGD, lr=0.001, momentum=0.9)),
    train_cfg=dict(by_epoch=True, max_epochs=5, val_interval=1),
    val_dataloader=val_dataloader,
    val_cfg=dict(),
    val_evaluator=dict(type=Accuracy),
    visualizer=dict(type='Visualizer', vis_backends=[dict(type='DVCLiveVisBackend')]),
)
runner.train()
推荐将 `work_dir` 设置为 `work_dirs`。否则,你在 OpenMMLab 仓库中运行试验时DVC 会给出警告 `WARNING:dvclive:Error in cache: bad DVC file name 'work_dirs\xxx.dvc' is git-ignored`。

打开 work_dir_dvc 下面的 report.html 文件,即可看到如下图的可视化效果。

image

你还可以安装 VSCode 扩展 DVC 进行可视化。

更多初始化配置参数可点击 DVCLive API Reference 查询。

Aim

使用 Aim 前需先安装依赖库 aim

pip install aim

设置 Runner 初始化参数中的 visualizer,并将 vis_backends 设置为 AimVisBackend

runner = Runner(
    model=MMResNet50(),
    work_dir='./work_dir',
    train_dataloader=train_dataloader,
    optim_wrapper=dict(optimizer=dict(type=SGD, lr=0.001, momentum=0.9)),
    train_cfg=dict(by_epoch=True, max_epochs=5, val_interval=1),
    val_dataloader=val_dataloader,
    val_cfg=dict(),
    val_evaluator=dict(type=Accuracy),
    visualizer=dict(type='Visualizer', vis_backends=[dict(type='AimVisBackend')]),
)
runner.train()

在终端中输入

aim up

或者在 Jupyter Notebook 中输入

%load_ext aim
%aim up

即可启动 Aim UI界面如下图所示。

image

初始化配置参数可点击 Aim SDK Reference 查询。