ClearML在单个脚本中的多个任务更改记录值名称



我训练了多个具有不同配置的模型,用于自定义超参数搜索。我使用pytorch_lightning和它的日志(TensorboardLogger)。当在Task.init()之后运行我的训练脚本时,ClearML自动创建一个Task并将记录器输出连接到服务器。

对于train,valtest的每个应变阶段,我在每个历元记录以下标量:loss,acciou

当我有多个配置时,例如networkAnetworkB,第一次训练将其值记录为loss,acciou,但第二次记录为networkB:loss,networkB:accnetworkB:iou。这使得值无法比较。

我的训练循环与任务初始化是这样的:

names = ['networkA', networkB']
for name in names:
task = Task.init(project_name="NetworkProject", task_name=name)
pl_train(name)
task.close()

方法pl_train是Pytorch lightning整体训练的包装器。此方法中没有ClearML代码。

你有任何提示,如何正确使用循环的使用在一个脚本中使用完全分离的任务?


编辑:ClearML版本为0.17.4。修复主分支的问题。

免责声明我是ClearML(以前的Trains)团队的一员。

pytorch_lightning正在为每个实验创建一个新的Tensorboard。当ClearML记录TB标量时,它会捕获再次被重新发送的相同标量,它会添加一个前缀,这样如果您报告相同的度量,它就不会覆盖前一个。一个很好的例子是在训练阶段和验证阶段报告loss标量(产生"损失");和"验证:loss")。可能是task.close()调用没有清除以前的日志,所以它"认为";这是相同的实验,因此将前缀networkB添加到loss。只要您在培训完成后关闭任务,您就应该拥有具有相同度量/变体(标题/系列)的所有实验日志。我建议打开GitHub问题,这可能应该被认为是一个bug。

最新更新