bench: survive transient hub errors — retry with backoff, per-task isolation, atomic writes (#304)
One HF 504 killed the whole bench. Now: load_dataset retries with exponential backoff (hf_hub resumes partial downloads from cache); a task that still fails is skipped instead of killing the rest; JSONLs are written atomically (coli only checks existence, so a truncated file from an interrupted run would block re-download forever); coli bench drops still-missing tasks with a warning and refuses to run eval with none. Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -631,6 +631,16 @@ def cmd_bench(a):
|
||||
print(f" {C.dim}downloading missing datasets: {', '.join(missing)}{C.r}")
|
||||
subprocess.call([py, os.path.join(TOOLS,"fetch_benchmarks.py"),
|
||||
"--out", a.data, "--tasks", ",".join(missing), "--limit", str(max(a.limit,200))])
|
||||
# il fetch riprova da solo (#304), ma se l'hub resta giu' il bench gira sui task
|
||||
# disponibili invece di passare a eval file inesistenti.
|
||||
# EN: the fetch retries on its own (#304), but if the hub stays down the bench
|
||||
# runs on the available tasks instead of handing eval nonexistent files.
|
||||
still=[t for t in tasks.split(",") if not os.path.exists(os.path.join(a.data,f"{t}.jsonl"))]
|
||||
if still:
|
||||
tasks=",".join(t for t in tasks.split(",") if t not in still)
|
||||
print(f" {C.yel}skipping (download failed, rerun later): {', '.join(still)}{C.r}")
|
||||
if not tasks:
|
||||
print(f" {C.yel}no datasets available — nothing to bench{C.r}"); sys.exit(1)
|
||||
cmd=[py, os.path.join(TOOLS,"eval_glm.py"), "--glm", GLM, "--snap",a.model,
|
||||
"--tasks", tasks, "--limit", str(a.limit), "--data", a.data]
|
||||
if a.ram: cmd+=["--ram",str(a.ram)]
|
||||
|
||||
Reference in New Issue
Block a user