Skip to content

Commit 953b392

Browse files
committed
Test llm-d's default scheduler at srt-slurm#45 0c209710
Carry SemiAnalysisAI/srt-slurm#45 at 0c209710 and add a DNM key that runs the llm-d frontend without an epp_config. Signed-off-by: Cam Quilici <cjquilici@gmail.com>
1 parent 79c5b9d commit 953b392

3 files changed

Lines changed: 53 additions & 4 deletions

File tree

‎inferencex-e2e/benchmarks/multi_node/srt-slurm-recipes/minimaxm3/vllm/gb300-fp4/agentx/llm-d-precise-dnm.yaml‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,3 +291,15 @@ override_offload_1p1d:
291291
args:
292292
<<: *args
293293
kv-transfer-config: '{"kv_connector":"MultiConnector","kv_role":"kv_both","kv_connector_extra_config":{"connectors":[{"kv_connector":"NixlConnector","kv_role":"kv_both"},{"kv_connector":"OffloadingConnector","kv_role":"kv_both","kv_connector_extra_config":{"cpu_bytes_to_use":107374182400}}]}}'
294+
295+
# No frontend.epp_config: srtctl runs the scorers of llm-d's no-Kubernetes guide (queue
296+
# depth, KV-cache utilization, approximate prefix cache, no-hit LRU) over two TP4 workers.
297+
override_default_agg:
298+
name: "minimax-m3-vllm-agg-gb300-2xtp4-llm-d-default-agentic"
299+
roles:
300+
agg:
301+
nodes: 2
302+
workers: 2
303+
gpus: 4
304+
env: *env
305+
args: *args

‎inferencex-e2e/configs/nvidia-master.yaml‎

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6362,6 +6362,33 @@ minimaxm3-fp4-gb300-vllm-llm-d-offload-agentic-disagg-dnm:
63626362
- "CONFIG_FILE=recipes/minimaxm3/vllm/gb300-fp4/agentx/llm-d-precise-dnm.yaml:override_offload_1p1d"
63636363
decode: { num-worker: 1, tp: 4, ep: 1, dp-attn: false }
63646364

6365+
# [DNM] llm-d without an epp_config: srtctl's default scheduler (the no-Kubernetes guide's scorers) over two TP4 workers.
6366+
minimaxm3-fp4-gb300-vllm-llm-d-default-agentic-agg-dnm:
6367+
image: quay.io/rh-ee-imarkov/llm-d-nokube-vllm:dspark-0814-nightly@sha256:00742fdd10e572172d49559e44c357a68c388933c74db2c4e819bf61377a6a95
6368+
model: nvidia/MiniMax-M3-NVFP4
6369+
model-prefix: minimaxm3
6370+
runner: cluster:gb300-nv
6371+
precision: fp4
6372+
framework: vllm
6373+
router: { name: llm-d-router, version: "0.10.0" }
6374+
multinode: true
6375+
disagg: false
6376+
scenarios:
6377+
agentic-coding:
6378+
- dram-utilization: 1.0
6379+
search-space:
6380+
- spec-decoding: none
6381+
kv-offloading: none
6382+
conc-list: [8]
6383+
num-nodes: 2
6384+
worker:
6385+
num-worker: 2
6386+
tp: 4
6387+
ep: 1
6388+
dp-attn: false
6389+
additional-settings:
6390+
- "CONFIG_FILE=recipes/minimaxm3/vllm/gb300-fp4/agentx/llm-d-precise-dnm.yaml:override_default_agg"
6391+
63656392
dsv4-fp4-gb200-dynamo-vllm-agentic-mtp-agg:
63666393
image: vllm/vllm-openai:nightly-3ee2df30337a301164c46ae444b76ee67e71c106
63676394
model: deepseek-ai/DeepSeek-V4-Pro

‎inferencex-e2e/runners/srt-slurm/patches/llm-d-frontend.patch‎

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ index db321a70..716b46a0 100644
3030
| `num_additional_frontends` | int | 9 | Additional routers beyond master |
3131
diff --git a/docs/llm-d.md b/docs/llm-d.md
3232
new file mode 100644
33-
index 00000000..1531e5d8
33+
index 00000000..e9cb0888
3434
--- /dev/null
3535
+++ b/docs/llm-d.md
36-
@@ -0,0 +1,247 @@
36+
@@ -0,0 +1,252 @@
3737
+# llm-d router
3838
+
3939
+`frontend.type: llm-d` routes requests with the [llm-d](https://llm-d.ai) router: the
@@ -262,6 +262,11 @@ index 00000000..1531e5d8
262262
+- The token producer's `vllm.url` is the first prefill worker's (else the first worker's)
263263
+ own vLLM API, and `modelName` defaults to the served model name.
264264
+
265+
+With vLLM's `OffloadingConnector` and its `self_describing_kv_events: true`, a worker also
266+
+reports the blocks it offloads to host memory; the producer indexes them as the `cpu` tier
267+
+and weights tiers by `indexerConfig.kvCacheBackendConfigs` (`gpu` 1.0, `cpu` 0.8 by
268+
+default).
269+
+
265270
+The roles that publish and the producer go together: either without the other is
266271
+rejected, as are a producer `kvEventsConfig` that sets the socket or discovery, a
267272
+`token-producer` `vllm.url`, and a router not on the head node. A role with
@@ -1977,10 +1982,10 @@ index 73ebd73a..0bde38cd 100644
19771982
return None
19781983
diff --git a/src/srtctl/frontends/llm_d.py b/src/srtctl/frontends/llm_d.py
19791984
new file mode 100644
1980-
index 00000000..48c17a25
1985+
index 00000000..a78c9349
19811986
--- /dev/null
19821987
+++ b/src/srtctl/frontends/llm_d.py
1983-
@@ -0,0 +1,516 @@
1988+
@@ -0,0 +1,521 @@
19841989
+# SPDX-FileCopyrightText: Copyright (c) 2026 SemiAnalysis LLC. All rights reserved.
19851990
+# SPDX-License-Identifier: Apache-2.0
19861991
+
@@ -2002,6 +2007,11 @@ index 00000000..48c17a25
20022007
+Envoy's admin ``/ready`` answers and the EPP reports every endpoint ready
20032008
+(``llm_d_epp_ready_endpoints``: endpoints whose metrics it scrapes).
20042009
+
2010+
+An external-LB DP rank (``data-parallel-external-lb``) is an endpoint of its own.
2011+
+With ``roles.<role>.kv_events`` the workers publish their KV-cache events to the
2012+
+EPP's precise prefix-cache producer on one socket srtctl owns
2013+
+(``kv_events_subscriber``, ``with_kv_events``).
2014+
+
20052015
+Upstream, pinned: llm-d-router v0.11.0
20062016
+(https://github.com/llm-d/llm-d-router/tree/a5cbe600ebade00cf3e9885beaf2bfacddeabce1):
20072017
+``cmd/epp/runner/runner.go`` (``runWithFileDiscovery``),

0 commit comments

Comments
 (0)