我训练了多个具有不同配置的模型,用于自定义超参数搜索。我使用pytorch_lightning和它的日志(TensorboardLogger)。当在Task.init()之后运行我的训练脚本时,ClearML自动创建一个Task并将记录器输出连接到服务器。
对于train
,val
和test
的每个应变阶段,我在每个历元记录以下标量:loss
,acc
和iou
当我有多个配置时,例如networkA
和networkB
,第一次训练将其值记录为loss
,acc
和iou
,但第二次记录为networkB:loss
,networkB:acc
和networkB: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。