Parameter sweeps let you run multiple configurations with a single command. Sweeps are automatically detected from config files that contain a sweep: section.
- Add a
sweep:section to your YAML config with parameter values - Add
{placeholder}markers where you want values substituted - Run
srtctl apply -f <config>- sweep mode is auto-detected srtctlgenerates and submits one job per parameter combination
# configs/concurrency-sweep.yaml
name: "concurrency-sweep"
model:
path: "deepseek-r1"
container: "latest"
precision: "fp8"
resources:
gpu_type: "gb200"
prefill_nodes: 1
decode_nodes: 4
benchmark:
type: "sa-bench"
isl: 1024
osl: 1024
concurrencies: [{ concurrency }] # <-- placeholder
sweep:
concurrency: [128, 256, 512] # <-- sweep valuessrtctl dry-run -f configs/concurrency-sweep.yamlThis shows you what will be generated without submitting. Sweep mode is automatically detected from the sweep: section.
srtctl apply -f configs/concurrency-sweep.yamlThis submits 3 separate jobs, one for each concurrency value (128, 256, 512).
Multiple parameters create a Cartesian product:
backend:
sglang_config:
decode:
mem-fraction-static: { mem }
benchmark:
concurrencies: [{ conc }]
sweep:
mem: [0.85, 0.90]
conc: [256, 512]srtctl apply -f config.yamlThis generates 4 jobs (2 x 2):
- mem=0.85, conc=256
- mem=0.85, conc=512
- mem=0.90, conc=256
- mem=0.90, conc=512
Placeholders work anywhere in the YAML:
name: "sweep-{param}"
mem-fraction-static: { mem }
concurrencies: [{ conc }]
dp-size: { dp }Sweep configs are automatically detected by the presence of a sweep: section. You don't need to pass --sweep flag:
# Auto-detected sweep
srtctl apply -f sweep-config.yaml
# Force sweep mode (if auto-detection fails)
srtctl apply -f config.yaml --sweep- Always use
srtctl dry-run -f <config>first to verify - Start with 2-3 values before running large sweeps
- Cartesian products grow fast: 3 params x 4 values = 64 jobs
- Each job gets a unique name based on parameter values