多进程推理评测的时候有bug似乎需要修复
Bug 说明
现象
用 torchrun --nproc-per-node=8 跑 VLMEvalKit 时,推理完成后报错找不到 pkl 文件,例如:
[Errno 2] No such file or directory: 'outputs/.../18_MME.pkl'
根因
eval_id 是输出目录名(如 T20260509-174208),由这个函数生成:
def build_eval_id():
return 'T' + datetime.datetime.now().strftime('%Y%m%d-%H%M%S')
torchrun 启动 8 个进程时存在微小时间差。在 run.py 中,eval_id 在第 524 行生成,而进程组初始化(dist.init_process_group)在第 558 行才发生。这意味着:
rank 0 启动较快,在 17:42:08 生成了 eval_id = T20260509-174208
rank 1~6 启动晚了 2 秒,在 17:42:10 生成了 eval_id = T20260509-174210
结果:
rank 0 和 rank 7 把 pkl 写入了 T20260509-174208/
rank 1~6 把 pkl 写入了 T20260509-174210/
最后 rank 0 在自己的目录里合并所有分片时,找不到 rank 1~6 的文件。
修复
在 dist.init_process_group 之后,由 rank 0 将自己的 eval_id 广播给所有 rank,确保所有进程使用同一个输出目录。
用CC debug出来的结果,修改以后确实没有bug了
0 条评论