Skip to content

Commit 6735da5

Browse files
committed
docs(agentic): record GB200 vLLM sweep findings
1 parent 74dfa0b commit 6735da5

1 file changed

Lines changed: 182 additions & 0 deletions

File tree

Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
# GB200 DeepSeek V4 vLLM Disaggregated Agentic Sweep Notes
2+
3+
This is the engineering log for the GB200 DeepSeek V4 Pro NVFP4 vLLM
4+
disaggregated agentic sweep. It records configuration changes, official runs,
5+
observations, and the evidence behind each decision. It must be updated as the
6+
sweep progresses.
7+
8+
## Target
9+
10+
- Model: `deepseek-ai/DeepSeek-V4-Pro` (NVFP4 checkpoint)
11+
- Hardware: GB200, four GPUs exposed per Slurm node
12+
- Runtime: vLLM behind Dynamo disaggregated serving
13+
- Workload: `semianalysis_cc_traces_weka_061526`
14+
- Required result: successful official GitHub Actions artifacts covering
15+
multiple concurrency points and multiple prefill/decode topologies
16+
- Baseline: single-node B200 aggregate vLLM results from the InferenceX results
17+
database
18+
19+
The workload has very long contexts and approximately 96% theoretical prefix
20+
reuse. Fixed-sequence recipes are not valid starting points because they use
21+
much shorter prompts and usually disable prefix caching.
22+
23+
## Methodology
24+
25+
1. Bring up a low-cost topology and prove model loading and cross-node NIXL
26+
transfer.
27+
2. Validate KV event ingestion and request transport independently of
28+
performance.
29+
3. Compare P/D balance at a constant 40-inference-GPU budget:
30+
`4P/1D`, `3P/2D`, `2P/3D`, and `1P/4D`.
31+
4. Use c64 as a topology gate, then run c32/c64/c128/c192 curves for viable
32+
topologies.
33+
5. Compare total and per-GPU throughput, TTFT, TPOT, E2E latency, request
34+
errors, and measured cache reuse against the B200 aggregate baseline.
35+
36+
Each P or D worker is TP8/TEP8 and spans two four-GPU Slurm nodes. Every
37+
constant-budget topology therefore uses ten inference nodes plus one dedicated
38+
NATS/etcd node.
39+
40+
## Configuration Changes
41+
42+
### Initial TP8 disaggregation (`444371fb`)
43+
44+
- Added a GB200 agentic vLLM configuration using vLLM `v0.23.0`.
45+
- Used TP8/TEP8 workers because the current NVFP4 checkpoint is not supported
46+
by the older vLLM images used by the fixed-sequence recipes.
47+
- Kept prefix caching enabled and used the full 061526 agentic trace.
48+
49+
### KV-aware 4P/1D topology (`76ad0903`)
50+
51+
- Added four cache-affinitized prefill replicas and one decode replica.
52+
- Enabled Dynamo KV routing and explicit vLLM KV-event publication.
53+
- Ensured each two-node TP8 prefill replica had one internally consistent and
54+
externally distinct NIXL engine ID.
55+
56+
### TEP8 correction (`b56d0d9e`)
57+
58+
- Changed prefill model sharding from TEP4 to TEP8.
59+
- Evidence: official run `27732316539` reached 182.54 GiB per GPU and failed
60+
while requesting another 1.97 GiB during MoE weight construction.
61+
- Conclusion: TEP4 cannot load this checkpoint on the available GB200 nodes.
62+
63+
### Dynamo/vLLM compatibility and request transport (`1e29f559`)
64+
65+
- Updated Dynamo from `1.2.0.dev20260426` to
66+
`1.2.0.dev20260526`.
67+
- Set `DYN_REQUEST_PLANE=tcp` for frontend, prefill, and decode workers.
68+
- Kept KV events on their separate ZMQ-to-NATS event path.
69+
- Evidence for the Dynamo change: every vLLM v0.23 `BlockStored` event failed
70+
to decode with the April 26 wheel. The compatible trailing-field parser was
71+
added upstream on April 29 and is present in the May 26 wheel.
72+
- Evidence for TCP: the earlier c64 canary returned HTTP 503 with
73+
`Rejecting request: all workers are busy` from the NATS request plane.
74+
Dynamo documents TCP as its fastest request plane.
75+
- The apparent `DYN_VLLM_KV_EVENT_PORT=5200+` versus recipe port `20080`
76+
mismatch was investigated and disproved: vLLM and its colocated Dynamo
77+
worker correctly communicate over local `tcp://127.0.0.1:20080`.
78+
79+
### P/D topology grid (`74dfa0bb`)
80+
81+
- Added constant-40-GPU recipes for `3P/2D`, `2P/3D`, and `1P/4D` alongside
82+
`4P/1D`.
83+
- Added c32/c64/c128/c192 to every topology in
84+
`.github/configs/nvidia-master.yaml`.
85+
- Multi-decode recipes use generated vLLM v0.23 engine IDs. This avoids ID
86+
collisions across decode replicas while vLLM synchronizes the generated ID
87+
across the two nodes of each TP8 replica.
88+
89+
### Slurm job-name prefix (branch-only historical workaround)
90+
91+
- This branch prefixes GB200 Slurm jobs with `ifx-` in
92+
`runners/launch_gb200-nv.sh`.
93+
- It is not standard on `main`.
94+
- It was introduced after jobs `18593` and `18599` were reportedly cancelled
95+
by another Watchtower runner fleet that reused the `gb200-nv_N` names.
96+
- This naming change does not alter topology or benchmark behavior.
97+
98+
## Validation
99+
100+
- `python -m pytest utils/matrix_logic/ -q`: 158 passed.
101+
- All four topology recipes parse as YAML and were checked for:
102+
- 40 inference GPUs plus one infrastructure node;
103+
- matching vLLM image and Dynamo wheel;
104+
- KV routing enabled;
105+
- TCP request plane on all components;
106+
- collision-free generated engine IDs for multi-decode topologies.
107+
- The sweep generator emits 16 points: four topologies times four
108+
concurrencies.
109+
110+
## Official Runs
111+
112+
| Run | Configuration | Outcome | Key evidence |
113+
| --- | --- | --- | --- |
114+
| `27728896563` | 1P/1D, c32/c64/c128/c192 | Partially green, later cancelled | c64: about 26.7k tok/s total, 423s mean TTFT, about 5% cache hit; not competitive |
115+
| `27732316539` | TEP4 prefill attempt | Failed | Model-load OOM at 182.54 GiB/GPU plus 1.97 GiB allocation |
116+
| `27732541012` | 4P/1D c64, old Dynamo/NATS | Failed warmup | 45/85 errors; empty router indexes; KV-event decode errors; HTTP 503 overloads |
117+
| `27734909066` | 4P/1D c64, new Dynamo/TCP | Success | Official artifact; clean 85/85 warmup and 99/99 profiled requests |
118+
| `27737167704` | c64 topology sweep | Running/queued | 4P/1D, 3P/2D, 2P/3D, 1P/4D |
119+
120+
## Corrected 4P/1D c64 Gate (`27734909066`)
121+
122+
Functional results:
123+
124+
- All four prefills and one decode worker registered.
125+
- Warmup: 85 completed, zero errors.
126+
- Profiling: 99 successful records, zero request errors.
127+
- HTTP 503 responses: zero.
128+
- KV-event decode failures: zero.
129+
- Dynamo made 125 selections with nonzero `effective cached blocks`, proving
130+
that the KV index was populated and used.
131+
132+
Performance from `results_bmk/agg_bmk.json`:
133+
134+
- Total throughput: 22,573.5 tok/s.
135+
- Per-GPU throughput: 564.3 tok/s across 40 inference GPUs.
136+
- Output throughput: 124.2 tok/s total.
137+
- Mean TTFT: 133.0s; p95 TTFT: 205.5s.
138+
- Mean TPOT: 115.6ms; p95 TPOT: 209.5ms.
139+
- Mean E2E: 176.3s; p95 E2E: 263.8s.
140+
- Theoretical cache hit: 96.5%.
141+
- Final vLLM GPU prefix-hit rates by prefill: approximately 1.3% to 3.5%.
142+
143+
Conclusion: this run proves the compatibility and transport fixes, but it is
144+
not a satisfactory performance result. It is slower than the earlier 1P/1D
145+
c64 point and far below the B200 aggregate baseline. The gap between 96.5%
146+
theoretical reuse and low single-digit measured reuse remains an open root
147+
cause; a green workflow alone is not acceptance.
148+
149+
## Baseline
150+
151+
The B200 aggregate c64 reference is approximately:
152+
153+
- 82k tok/s total;
154+
- 10.3k tok/s/GPU;
155+
- about 93% measured cache hit.
156+
157+
That configuration uses KV offloading. The initial GB200 disaggregated sweep
158+
does not use offloading, as requested, but the comparison remains useful for
159+
detecting clearly invalid performance.
160+
161+
## Open Investigation
162+
163+
1. Complete the c64 P/D topology comparison. The 4P/1D result is strongly
164+
decode-limited, so D-heavy layouts are expected to improve latency and
165+
completed-request rate.
166+
2. Determine why Dynamo observes only small cached overlaps even though the
167+
trace reports about 96% theoretical reuse and the prefills have spare KV
168+
capacity. Candidate causes must be proven from token/hash/routing evidence;
169+
no cache-hit metric bypass or synthetic workload substitution is acceptable.
170+
3. Select viable topologies and run official c32/c64/c128/c192 curves.
171+
4. Download and review final artifacts against the B200 aggregate baseline.
172+
173+
## Acceptance Criteria
174+
175+
- At least two P/D parallelism configurations represented in official
176+
successful GitHub Actions artifacts.
177+
- Multiple concurrency points for each selected topology.
178+
- No request errors or hidden warmup aborts.
179+
- Artifacts contain aggregated and raw agentic results.
180+
- Server logs demonstrate working KV-event ingestion and routing.
181+
- Performance is reviewed against B200 aggregate results and any remaining
182+
gap is explained by measured evidence rather than workflow success alone.

0 commit comments

Comments
 (0)