这类问题我又碰上了一次。inspect-ai 0.3.55 跑 swe_bench 任务,docker 沙箱拉镜像阶段超过 60 秒被判超时,报 TimeoutError: sandbox failed to start,本机镜像列表里其实已经有对应镜像。
第一反应是「Docker 守护进程的资源配额被占满」,验证下来不成立。
真正麻烦的地方在于,几个原因的现象几乎一样。镜像虽在本地,容器启动仍要解压层,超过默认超时;并发 sample 数超过 CPU 核数,启动互相排队;沙箱网络初始化卡在 DNS 上。
手动起一个同镜像容器测启动耗时
docker run --rm python:3.12-slim python -c "print(1)"
接着把并发沙箱数压到核数以内
python -c "print({'max_sandboxes':4,'max_connections':4})"
调大沙箱启动超时后单条试跑
python -c "from inspect_ai import eval;print(eval('swe_bench', sandbox_timeout=300, limit=1))"
剩下的就是确认镜像已完整拉取而不是只有元数据
docker image inspect python:3.12-slim --format '{{.Size}}'
恢复的判定其实很直接。单条样本在 90 秒内完成,日志里沙箱启动耗时稳定在 12 秒,批量跑十条不再出现超时。
评测框架的默认超时是按无冷启动的场景写的,第一次跑必然要拉镜像解压层,先用 limit=1 预热一遍再上量。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
