Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
8420094
feat(frontends): add the llm-d router
cquil11 Oct 5, 2026
90632aa
fix(llm-d): answer /metrics at Envoy instead of routing it to a worker
cquil11 Oct 5, 2026
f847fc7
chore(llm-d): add NVIDIA SPDX headers to llm-d files
cquil11 Oct 6, 2026
ab0b08f
feat(llm-d): route to DP ranks and by the workers' KV-cache events
cquil11 Oct 6, 2026
1c3080e
feat(llm-d): run the no-Kubernetes guide's scorers without an epp_config
cquil11 Oct 6, 2026
d04b5d2
feat(llm-d): run the P/D sidecar for NIXL inside a MultiConnector
cquil11 Oct 6, 2026
1ac5bc6
docs(llm-d): describe DP-rank and KV-event routing and offloaded tiers
cquil11 Oct 7, 2026
35234a6
fix(llm-d): type-check the sidecar's default command after the upstre…
cquil11 Oct 7, 2026
9d5cb47
fix(llm-d): reject unsupported nginx readiness topology
cquil11 Oct 8, 2026
bd53c28
fix(vllm): include context parallelism in DP rank placement
cquil11 Oct 8, 2026
c00ec85
fix(tests): distinguish subscriber destinations from listener ports
cquil11 Oct 8, 2026
3138690
refactor(vllm): share effective KV connector resolution
cquil11 Oct 8, 2026
41616ad
refactor(llm-d): rename the Envoy template to llm_d_envoy.yaml.j2
cquil11 Oct 8, 2026
9fe40b6
fix(llm-d): load the renamed Envoy template
cquil11 Oct 8, 2026
35637e8
docs(llm-d): tighten implementation comments
cquil11 Oct 8, 2026
2c093c0
fix(llm-d): reject frontend.epp_config on other frontends
cquil11 Oct 8, 2026
01947da
fix(llm-d): reject unsupported and conflicting configuration
cquil11 Oct 8, 2026
1f0836d
chore: keep upstream's CODEOWNERS
cquil11 Oct 8, 2026
28f34b8
chore: drop the fork's launch-plan recording from the llm-d branch
cquil11 Oct 8, 2026
e475df0
refactor(vllm): expose DP mode to frontends
cquil11 Oct 8, 2026
f33d6ee
refactor: read typed process DP ranks directly
cquil11 Oct 8, 2026
bdd7ddd
refactor(llm-d): validate EPP arguments only at config load
cquil11 Oct 8, 2026
572a844
refactor(llm-d): centralize and document KV event port offsets
cquil11 Oct 8, 2026
e238f6a
docs(llm-d): pin upstream references to llm-d-router v0.10.0
cquil11 Oct 9, 2026
e4f5c0e
test: give worker-stage fake processes a dp_rank
cquil11 Oct 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Default owners for all files
* @alec-flowers @nlevin-ui @csahithi
* @alec-flowers @ishandhanani @nlevin-ui @csahithi

# Curated examples owners
/examples/ @kyleliang-nv @hjjq @qiching @kedarpotdar-nv
2 changes: 0 additions & 2 deletions docs/cluster-config.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,6 @@ reporting:

**output_dir**: When set, job logs are written to `output_dir/{job_id}/logs` instead of `srtctl_root/outputs/{job_id}/logs`. Useful for CI/CD and ephemeral environments.

**record_launch_plan**: Set `true` to record the realized launch plan (`output.record_launch_plan`) for every recipe on the cluster. Because the launch plan lives under the normal log directory, existing S3 postprocessing and external collectors that archive the complete log directory include it without a separate upload path.

**containers**: A map from alias to image path or registry URI. One resolver replaces image aliases in `model.container`, `roles.<role>.container`, frontend/benchmark images, exporter images and `services[].container`. Literal paths and registry URIs pass through untouched. Free-form maps (`environment`, `roles.<role>.env`, `roles.<role>.args`, `services[].env`, `container_mounts`) and the `identity` block are never rewritten.

**default_bash_preamble**: A shell snippet (e.g. `"ulimit -n 1048576 -s unlimited -u 1048576"`) prepended to every container srun launched by srtctl: workers, frontends, telemetry, benchmark, postprocess. Runs before per-call `bash_preamble` and the main command, so cluster-wide ulimits apply to everything downstream. Silently dropped for distroless containers (e.g. `prom/node-exporter`) that bypass the bash wrapper; a WARNING log is emitted in that case.
Expand Down
10 changes: 1 addition & 9 deletions docs/config-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,23 +55,15 @@ Fields: [ModelConfig](schema-reference.md#modelconfig).

## output

Output paths and optional reproducibility artifacts.
Output configuration with formattable paths.

```yaml
output:
log_dir: "./outputs/{job_id}/logs"
record_launch_plan: false # Save exact realized srun scripts and a manifest
```

The `log_dir` supports FormattablePath templating. See [FormattablePath Template System](runtime-env.md#formattablepath-template-system).

When `record_launch_plan` is enabled, srtctl creates `logs/launch-plan/manifest.json` and one executable shell
script for every realized `srun` invocation. Recording happens after Slurm assigns nodes, ports, heterogeneous
groups, mounts, and container paths, so the scripts describe what was actually launched rather than a pre-submit
estimate. Secret-like environment values are never persisted; the scripts name the environment variables that
must be supplied for replay. The resolved recipe, outer `sbatch_script.sh`, lockfile, and resource snapshot remain
alongside this directory and are referenced by the manifest.

## health_check

Health check configuration for worker readiness, and the worker log watch that fails a run early.
Expand Down
2 changes: 1 addition & 1 deletion docs/engines.md
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ Set `engine.dp_launch_mode: per_gpu` only when temporarily preserving the legacy

When `TP x PP` fits on one node, srtslurm derives `--data-parallel-size-local` and `--data-parallel-start-rank`, then enables `--data-parallel-hybrid-lb` so every node-local process registers with the Dynamo frontend. When `TP x PP` is larger than the node-local GPU allocation, srtslurm instead derives the multi-node rendezvous arguments and makes every process except the global leader headless. For example, both DP4 x TP4 and DP2 x TP8 are selected automatically on four-GPU nodes.

Do not set `data-parallel-size-local`, `data-parallel-start-rank`, `data-parallel-hybrid-lb`, or `headless` manually; srtslurm owns those values. The allocation must be regular: `DP x TP x PP` must match the endpoint GPU count, and a TP/PP replica must divide evenly within or across nodes.
Do not set `data-parallel-size-local`, `data-parallel-start-rank`, `data-parallel-hybrid-lb`, or `headless` manually; srtslurm owns those values. Behind a router frontend, `data-parallel-external-lb: true` instead launches every DP rank as its own `vllm serve --data-parallel-rank <r>` on its own HTTP port, so the router addresses each rank ([llm-d](llm-d.md#routing-to-dp-ranks)). The allocation must be regular: `DP x TP x PP` must match the endpoint GPU count, and a TP/PP replica must divide evenly within or across nodes.

### TRT-LLM metrics publication

Expand Down
4 changes: 2 additions & 2 deletions docs/frontends.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
# Frontends and Dynamo

The `frontend:` block (which router fronts the workers) and the `dynamo:` block (how Dynamo is installed and wired). Router-specific pages: [SGLang Router](sglang-router.md), [vLLM Router](vllm-router.md), [Shepherd Model Gateway](smg.md).
The `frontend:` block (which router fronts the workers) and the `dynamo:` block (how Dynamo is installed and wired). Router-specific pages: [SGLang Router](sglang-router.md), [vLLM Router](vllm-router.md), [Shepherd Model Gateway](smg.md), [llm-d Router](llm-d.md).

## frontend

Frontend/router configuration.

```yaml
frontend:
# Frontend type: "dynamo" (default), "sglang-router", "vllm-router", "smg", direct "sglang", "vllm", "trtllm_serve",
# Frontend type: "dynamo" (default), "sglang-router", "vllm-router", "smg", "llm-d", direct "sglang", "vllm", "trtllm_serve",
# or "none" for a services-only job (no router, no OpenAI endpoint, no worker-count health gate; only
# valid without engine roles, see services[].nodes)
type: dynamo
Expand Down
Loading
Loading