Orchestration
gym eval submit is experimental. It prints a warning each time it runs, and its configuration schema, job layout, and record format may change or be removed without notice.
The orchestration layer turns one YAML file into batch jobs on a cluster. You describe the model services to deploy (for example vLLM), the compute to run them on, and the benchmarks to evaluate. gym eval submit validates the file, renders one job script per benchmark, copies the scripts to the cluster, queues them, and writes a record you can use to find the run again.
Use it when a benchmark needs more than one machine can offer: a model that spans GPUs or nodes, many data-parallel replicas for rollout throughput, or a prefill/decode split. For a single-machine run, use gym eval run directly.
Slurm (with Pyxis container support) is the only executor today. The configuration and the job record are executor-neutral by design, so the schema does not assume Slurm, but nothing else is implemented.
How it fits together
A submit config has four required sections and one optional one:
Submission works in these steps:
- Compose and validate. Hydra composes the YAML, resolves interpolations and
envprefixes, and validates it against a strict schema. Unknown keys are errors, so typos fail immediately. - Render. One job script is rendered for each entry in
driver.benchmarks. - Stage and copy. The scripts are staged in a temporary directory and copied to a new run directory on the cluster,
<job.output_path>/gym-job-<timestamp>-<id>/. - Queue. One
sbatchis issued per benchmark. Each benchmark is its own Slurm job and deploys its own copy of the services. - Record. A manifest (
gym-job.json) and the resolved config are written to the run directory, and a copy of the manifest to a local index on your machine.
See Slurm Executor for what each job script does and Job Records for the files left behind.
The command
Anything after the flags is passed to Hydra as an override, so job.output_path=/lustre/me/evals changes a value without editing the file.
Scratch keys
A top-level key that starts with _ is a scratch namespace. It is not part of the schema and is dropped after interpolation, so other parts of the file can reference it:
You can override an existing scratch value (_images.vllm=...), but +_images.new=... and ++_images.new=... are rejected, so a typo cannot silently create a value that nothing reads. Any other unrecognized top-level key is a validation error.
Output and exit status
On success the command prints the run directory and one line per benchmark:
If sbatch rejects a benchmark, that benchmark prints failed <name>: <error>. The other benchmarks in the same submission are still queued and recorded. The command then prints Error: N benchmark(s) failed to submit to stderr and exits with status 1.