【DeepSeek-Math】执行submit_eval_jobs.py后程序立即返回的实验报告
·
1. 问题描述
您好,我今天在运行python submit_eval_jobs.py --n-gpus 1时观察到一个如图所示的奇怪现象,
就是脚本执行了一会之后,终端就回到了“等待输入”的状态,看起来脚本似乎执行完成了,这是什么原因呢,我感觉似乎是代码存在问题,这是evaluation/submit_eval_jobs.py还是evaluation/run_subset_parallel.py引发的问题呢
2. 『代码库存在设计缺陷』by Claude4.5-sonnet-Cursor
您问得非常好!这确实是这个代码库的一个设计缺陷。让我分析一下:
[1 tool called]
问题解析
您的疑问非常合理!看第 50 行的注释:
conf = base_conf # TODO: your conf here
这个 TODO 透露了关键信息!这个脚本可能原本的设计意图是:
猜测:原始设计可能是批量提交多个任务
# 可能原本想这样用:
for conf in [base_conf, instruct_conf, rl_conf]:
cmd = build_command(conf)
cmd += " &" # 让3个任务同时在后台运行
os.system(cmd)
这样的话,& 就有意义了——同时评估3个不同的模型,节省时间!
但现在的问题是:
只运行一个任务,加 & 就很奇怪了,因为:
- ❌ 没有办法从脚本本身知道任务是否完成
- ❌ 如果出错了,脚本也不会报错
- ❌ 父进程退出了,子进程成了"孤儿进程"
实际上如何知道是否完成?
目前您只能通过这些手动方式检查:
方法1:查看进程
ps aux | grep run_subset_parallel.py
# 如果还有输出,说明还在运行
方法2:查看日志文件
# 根据配置,日志在:
tail -f evaluation/outputs/DeepSeekMath-Base/*/logs/*.log
方法3:查看输出文件
# 检查是否生成了最终的 metrics.json
ls evaluation/outputs/DeepSeekMath-Base/*/samples/metrics.json
建议修改
移除 & 是最简单的解决方案:
cmd += f" --rank {0}" # 移除 &,改为前台执行
print(cmd, flush=True)
os.system(cmd)
print("✅ 评估完成!") # 只有任务完成才会打印
这样:
- ✅ 脚本会等待任务完成
- ✅ 可以看到完整的进度和错误信息
- ✅ 明确知道何时结束
总结: 这个代码库的 & 设计可能是为了批量提交多个任务,但目前只运行单个任务时,这个设计反而造成了困惑。去掉 & 会让代码行为更清晰!
更多推荐


所有评论(0)