Skip to content

feat(vllm): default DP launch to per-node hybrid LB - #272

Draft
alec-flowers wants to merge 2 commits into
NVIDIA:mainfrom
alec-flowers:agent/vllm-per-node-hybrid-default
Draft

feat(vllm): default DP launch to per-node hybrid LB#272
alec-flowers wants to merge 2 commits into
NVIDIA:mainfrom
alec-flowers:agent/vllm-per-node-hybrid-default

Conversation

@alec-flowers

@alec-flowers alec-flowers commented Jul 18, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Make one hybrid-LB vLLM parent process per node the default for DP endpoints.
  • Derive --data-parallel-size-local, --data-parallel-start-rank, DP address, and DP RPC port from the allocated topology.
  • Add backend.legacy_dp_per_gpu: true as a compatibility escape hatch for the previous one-process-per-DP-rank layout.
  • Derive Dynamo health expectations from the generated process topology.
  • Reserve non-overlapping KV-event, NIXL, DP-RPC, HTTP, and system-port ranges across the generated layout.

This builds on and supersedes #90, but makes the per-node layout opinionated rather than adding per-role launch-mode tuning.

Registration and routing model

The Dynamo routing boundary is a registered generate engine, not each internal vLLM DP rank.

  • Default per-node hybrid: one Dynamo generate registration per node/parent process. vLLM owns the node-local DP ranks below that registration and performs hybrid load balancing within the parent.
  • Legacy per-GPU: one independent Dynamo generate registration per vLLM DP process. vLLM is still launched with its global --data-parallel-rank, but Dynamo routes to each process as an independent engine.

For DEP8 on two 4-GPU nodes, the default therefore creates two Dynamo engines. The two vLLM parents own global DP ranks 0-3 and 4-7 respectively. The Dynamo router does not see eight independently routable engines in this layout.

Configuration

Per-node hybrid is automatic when a vLLM role sets data-parallel-size:

backend:
  type: vllm
  vllm_config:
    aggregated:
      data-parallel-size: 8

The previous layout remains available as a deployment-wide compatibility switch:

backend:
  type: vllm
  legacy_dp_per_gpu: true
  vllm_config:
    decode:
      data-parallel-size: 4

Validation

Local

  • 131 focused topology, config, and health tests passed.
  • Ruff check passed.
  • Ruff format check passed.

Real GB200 smoke tests

All tests used local DeepSeek-V4-Flash weights (not the Hugging Face cache), vLLM 0.25.0, and matching aarch64 nightly wheels:

  • ai-dynamo==1.3.0.dev20260718
  • ai-dynamo-runtime==1.3.0.dev20260718
Job Layout Observed topology and registration Result
2424943 Aggregated DEP8, 2 nodes x 4 GB200 Two parent processes with local size 4 and start ranks 0/4; two Dynamo decode registrations; vLLM logs global DP ranks 0-7 COMPLETED 0:0; server healthy; smoke requests passed
2424942 PD, DEP4 prefill + DEP4 decode One parent and one Dynamo registration per role; four internal DP/NIXL identities per parent (_dp0-_dp3); NIXL compatibility passed on all decode ranks COMPLETED 0:0; server healthy at 1P + 1D; smoke requests passed
2424944 PD with legacy_dp_per_gpu: true Four independent processes and Dynamo registrations per role; vLLM global DP ranks 0-3 COMPLETED 0:0; server healthy at 4P + 4D; smoke requests passed

The DEP8 logs also confirm NCCL_SYMM_MEM was selected for the DP and EP groups with the per-node parent layout.

@codecov-commenter

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 93.33333% with 5 lines in your changes missing coverage. Please review.
⚠️ Please upload report for BASE (main@c1b6b5c). Learn more about missing BASE report.

Files with missing lines Patch % Lines
src/srtctl/backends/vllm.py 92.85% 4 Missing ⚠️
src/srtctl/core/topology.py 87.50% 1 Missing ⚠️
Additional details and impacted files
@@           Coverage Diff           @@
##             main     #272   +/-   ##
=======================================
  Coverage        ?   67.40%           
=======================================
  Files           ?       69           
  Lines           ?     9108           
  Branches        ?        0           
=======================================
  Hits            ?     6139           
  Misses          ?     2969           
  Partials        ?        0           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants