在我的设置中,我运行一个脚本来训练模型并开始生成检查点。另一个脚本监视新的检查点并评估它们。脚本并行运行,因此评估只是训练的一个步骤。
支持这种情况的正确轨道配置是什么?
免责声明:我是allegro.ai 火车团队的一员
你有两个实验吗?一种用于测试,一种用于培训?
如果您确实有两个实验,那么我会确保模型都登录到它们中(如果它们存储在同一个共享文件夹/s3/etc 中将是自动的)然后您可以快速查看每个模型的性能-一。
另一种选择是共享同一个实验,然后第二个过程将报告添加到原始实验中,这意味着您必须以某种方式将实验 ID 传递给它。然后你可以这样做:
task = Task.get_task(task_id='training_task_id`)
task.get_logger().report_scalar('title', 'loss', value=0.4, iteration=1)
编辑:这两个进程总是一起启动,还是检查点测试是通用代码?
编辑2:
假设您有训练模型的主脚本。此实验具有唯一的任务 ID:
my_uid = Task.current_task().id
我们还假设您有办法将它传递给您的第二个进程(如果这是一个实际的子进程,它会继承 os 环境变量,所以您可以这样做os.environ['MY_TASK_ID']=my_uid
)
然后在评估脚本中,您可以直接向主要培训任务报告,如下所示:
train_task = Task.get_task(task_id=os.environ['MY_TASK_ID'])
train_task.get_logger().report_scalar('title', 'loss', value=0.4, iteration=1)
@MichaelLitvin,我们遇到了同样的问题,并且我们在训练和测试中登录的所有内容也具有相同的名称,因为它来自相同的代码(显然)。为了避免在训练图中出现训练/测试混乱,我们修改了 tensorflow_bind.py 为“训练”和“验证”流添加不同的前缀。Trains 的错误修复是添加一个 logdir 名称(这对我们来说不是很清楚)。
*这是1-2年前完成的,所以现在可能是多余的
干杯,大干