Skip to content

[Core][Engine] allow DP ray placement groups to be set on specific nodes#44669

Merged
robertgshaw2-redhat merged 2 commits into
vllm-project:mainfrom
walterbm:cohere/allow-passing-ray-node-ids-for-dp
Jun 5, 2026
Merged

[Core][Engine] allow DP ray placement groups to be set on specific nodes#44669
robertgshaw2-redhat merged 2 commits into
vllm-project:mainfrom
walterbm:cohere/allow-passing-ray-node-ids-for-dp

Conversation

@walterbm

@walterbm walterbm commented Jun 5, 2026

Copy link
Copy Markdown
Contributor

Purpose

When running a DP deployment in raycreate_dp_placement_groups scans the whole Ray cluster and greedily packs DP ranks wherever there are free devices. When multiple independent DP engines share one Ray cluster (e.g. P/D disaggregation or multi-model serving under an external orchestrator), engines race for the same devices: one engine's remote ranks land on another engine's master node, which then fails with Not enough resources to allocate ... DP ranks on DP master node ...

This adds an opt-in VLLM_RAY_DP_PLACEMENT_NODE_IPS (comma-separated node IPs). When set, DP placement is restricted to those nodes (the DP master is always included). Lets an orchestrator partition a shared cluster into per-engine node sets and remove the race by construction.

Test Plan

Added a unit test to confirm

tests/v1/engine/test_dp_placement_node_allowlist.py

Test Result


Essential Elements of an Effective PR Description Checklist
  • The purpose of the PR, such as "Fix some issue (link existing issues this PR will resolve)".
  • The test plan, such as providing test command.
  • The test results, such as pasting the results comparison before and after, or e2e results
  • (Optional) The necessary documentation update, such as updating supported_models.md and examples for a new model.

Signed-off-by: walterbm <walter.beller.morales@gmail.com>
@walterbm walterbm requested a review from njhill as a code owner June 5, 2026 16:58

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claude Code Review

This pull request is from a fork — automated review is disabled. A repository maintainer can comment @claude review to run a one-time review.

@mergify mergify Bot added the v1 label Jun 5, 2026
@robertgshaw2-redhat robertgshaw2-redhat enabled auto-merge (squash) June 5, 2026 18:16
@github-actions github-actions Bot added the ready ONLY add when PR is ready to merge/full CI is needed label Jun 5, 2026
@robertgshaw2-redhat robertgshaw2-redhat merged commit c73b0d0 into vllm-project:main Jun 5, 2026
61 checks passed
vrdn-23 added a commit to vrdn-23/vllm that referenced this pull request Jun 5, 2026
Resolves the recurring envs.py merge conflict per
docs/superpowers/specs/2026-05-14-envs-merge-conflict-resolution-design.md.

The legacy `if TYPE_CHECKING:` block and `environment_variables: dict[str,
Callable]` runtime mapping were dropped on the branch in favor of pydantic
`*Settings(BaseSettings)` subclasses. Every main-side edit to either
location therefore conflicts mechanically; structural resolution is
`--ours` for vllm/envs.py, then port the semantic delta as new `Field(...)`
declarations on the appropriate sub-model.

Main-side commits since merge base afcb580, with port disposition:

- c73b0d0 (vllm-project#44669) — adds VLLM_RAY_DP_PLACEMENT_NODE_IPS (str=""). Ported
  to DistributedSettings.ray_dp_placement_node_ips.
- 165b786 (vllm-project#40426) — adds VLLM_ROCM_USE_AITER_LINEAR_HIPBMM (bool=False).
  Ported to RocmSettings.rocm_use_aiter_linear_hipbmm. Native pydantic bool
  parsing replaces the `.lower() in ("true","1")` lambda.
- 38fd240 (vllm-project#41980) — adds VLLM_DISTRIBUTED_USE_SPLIT_GROUP (bool=False).
  Ported to DistributedSettings.distributed_use_split_group. Native
  pydantic bool parsing replaces the `bool(int(...))` lambda.
- a618356 (vllm-project#43447) — adds VLLM_PREFIX_CACHE_RETENTION_INTERVAL
  (int|None=None, tri-state). Ported to
  ServerSettings.prefix_cache_retention_interval; pydantic's
  unset-vs-explicit-zero handling matches the original
  `"X" in os.environ` guard.
- bd98e97 (vllm-project#44128) — removes dead VLLM_RPC_TIMEOUT. Mirrored on the
  branch by deleting ServerSettings.rpc_timeout.

Verification: vllm.envs imports cleanly; all four new vars read defaults
and parse env-set values (incl. tri-state INTERVAL=0); VLLM_RPC_TIMEOUT
correctly raises AttributeError; pre-commit passes ruff/format/mypy.

Signed-off-by: Vinay Damodaran <vrdn@hey.com>
knight0528 pushed a commit to knight0528/vllm that referenced this pull request Jun 8, 2026
…des (vllm-project#44669)

Signed-off-by: walterbm <walter.beller.morales@gmail.com>
ekagra-ranjan pushed a commit to ekagra-ranjan/vllm that referenced this pull request Jun 9, 2026
…des (vllm-project#44669)

Signed-off-by: walterbm <walter.beller.morales@gmail.com>
Signed-off-by: Ekagra Ranjan <3116519+ekagra-ranjan@users.noreply.github.com>
waqahmed-amd-fi pushed a commit to waqahmed-amd-fi/vllm that referenced this pull request Jun 10, 2026
…des (vllm-project#44669)

Signed-off-by: walterbm <walter.beller.morales@gmail.com>
Signed-off-by: Waqar Ahmed <waqar.ahmed@amd.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready ONLY add when PR is ready to merge/full CI is needed v1

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants