Quickstart
This page takes you from an empty file to a queued job: one vLLM service on one GPU node, and one benchmark that evaluates it.
Prerequisites
- NeMo Gym installed on the machine you submit from (
gym eval submitruns there, not on the cluster). - A Slurm cluster with Pyxis so that
srun --container-imageworks. - Either to be logged in to the cluster’s login node, or SSH access to it from your machine. With SSH,
sshandrsyncmust be available locally. - A shared filesystem path on the cluster that the job can write to (
job.output_path). - A benchmark config. List the available ones with
gym list benchmarks; the example below usesbenchmarks/gpqa/config.yamlfrom the Gym repository.
1. Write the config
Save this as submit.yaml:
Things worth knowing about this file:
- Every
envvalue needs a prefix:lit:(literal),host:VAR(read from the submitting shell), orruntime:VAR(read from the job’s environment when it runs). See env values. driver.policy_modelnames a service. Submit fills inpolicy_base_url,policy_model_name, andpolicy_api_keyfor every benchmark, so you do not repeat the address.gpus_per_nodelets submit check thattensor_parallel_size x number_of_instancesfits the node (2 x 4 = 8 here). A footprint larger than the GPUs available is an error; a smaller one is a warning about idle GPUs.gym_installmakes the driver clone Gym at that ref and install it before running. Without it, the driver container must already contain Gym.
otel.enabled defaults to true. An enabled collector requires otel.endpoint, otel.service_name, and a token in the submitting shell, and the submit fails before anything is staged if they are missing. This quickstart turns the collector off. To keep it, see Collector for Submitted Jobs.
2. Validate the config
This composes and validates the file and prints the resolved result. It does not contact the cluster. Every host: variable must be set in your shell even for this step; the resolved output shows the host:HF_TOKEN reference, never the secret itself.
3. Inspect the generated script
This prints the sbatch script for each benchmark and stops. Read it once before your first submission: it shows the #SBATCH directives, the srun step for each service, the health checks, and the driver command. See Slurm Executor for how to read it.
--dry-run prints the generated script with host: values resolved, including HF_TOKEN. Unlike --resolve-only, its output is not redacted. Do not share it or capture it in public logs.
4. Submit
Add --json to get the submission record as JSON, which is easier to parse in scripts.
5. Find the results
Everything for the run is under the run directory on the cluster:
Follow progress with the logs (logs/policy-<slurm job id>.log for the service, logs/driver-<slurm job id>.log for the benchmark) and the usual Slurm tools (squeue, sacct). The cluster-side layout is described in detail in Slurm Executor.
Next steps
- Scale beyond one node: Multi-Node vLLM.
- Survive walltime limits and preemption: Resumable Runs.
- Look up a field: Configuration Reference.
- Something failed: Troubleshooting.