vllm-project/vllm · error · ValueError
This recipe is a multi-process deployment and cannot be repr
Error message
This recipe is a multi-process deployment and cannot be represented by one config.yml. Found fields: {', '.join(multi_process_fields)} What it means
The recipe has no 'argv' field, but contains one of the known multi-process field names: head_argv, worker_argv, worker_argvs, prefill, decode, or vllm_argv. Such recipes describe multi-process deployments (head/worker split or prefill/decode disaggregation) that cannot be captured in a single config.yml, so the tool names the offending fields and aborts.
Source
Thrown at tools/recipes/recipe_json_to_vllm_config.py:570
"A single config.yml would not fully represent this deployment."
)
return recipe["argv"]
# Give a useful failure for other known rendered shapes.
multi_process_fields = [
k
for k in (
"head_argv",
"worker_argv",
"worker_argvs",
"prefill",
"decode",
"vllm_argv",
)
if k in recipe
]
if multi_process_fields:
raise ValueError(
"This recipe is a multi-process deployment and cannot be represented "
"by one config.yml. Found fields: " + ", ".join(multi_process_fields)
)
raise ValueError("Recipe JSON does not contain an `argv` field")
def write_config(
path: str,
source: str,
recipe: dict[str, Any],
config: dict[str, Any],
) -> None:
metadata = [
"# Generated from vLLM Recipes JSON.",
f"# Source: {source}",
]
for key in ("hardware", "strategy", "variant", "deploy_type"):View on GitHub (pinned to c794754062)
Solutions
- jq the recipe for the listed fields to confirm which process roles it renders
- Select a single-process rendering of the same model (different --hardware/--strategy choice, or a single_node recipe)
- Deploy multi-process recipes using the Recipes API instructions or head/worker argvs directly instead of config.yml
Defensive patterns
Strategy: validation
Validate before calling
MULTI = {"head_argv", "worker_argv", "worker_argvs", "prefill", "decode", "vllm_argv"}
found = MULTI & set(recipe)
if found:
raise SystemExit(f"multi-process recipe, fields: {sorted(found)}") Type guard
def is_single_process_recipe(recipe: dict) -> bool:
MULTI = {"head_argv", "worker_argv", "worker_argvs", "prefill", "decode", "vllm_argv"}
return isinstance(recipe.get("argv"), list) and not (MULTI & set(recipe)) Prevention
- Check the recipe's process-role fields before conversion
- Choose non-disaggregated hardware/strategy renderings when you need config.yml output
When it happens
Trigger: Passing a disaggregated (P/D) or head/worker recipe JSON to the converter; these shapes are rendered for distributed setups and intentionally lack a unified 'argv'.
Common situations: Fetching the wrong hardware/strategy variant from the Recipes API (e.g. a disagg prefill recipe) and feeding it to the single-config converter; schema additions where the API renders per-process argvs by default.
Related errors
- Recipe deploy_type={deploy_type!r} is not a single-node depl
- Selected model {model.get('hf_id')!r} has no JSON API path.
- {model_json_url} did not return a JSON object.
- Model {model.get('hf_id')!r} has no rendered recommended_com
- Model {model.get('hf_id')!r} has no per-hardware renderings
AI-assisted analysis of vllm-project/vllm@c794754062 (2026-08-14).
Data as JSON: /api/errors/49b870acd36821db.
Report an issue: GitHub.