From 9b6091fe6edfd02ca43c7733841a62b7fb38abbf Mon Sep 17 00:00:00 2001 From: Gahow Wang Date: Sat, 30 May 2026 20:59:18 +0800 Subject: [PATCH] =?UTF-8?q?v2=20exp(d):=205-policy=20routing=20under=20tra?= =?UTF-8?q?cets=20vs=20thinktime=20=E2=80=94=20ranking=20flip?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Extends exp(c) (dispatch ablation, 1 round-robin policy) to the full 5-policy routing comparison, both modes on the SAME ttp trace (807 reqs, fresh vLLM/arm, dash0 8xH20). Confirms exp(c)'s prediction and finds something stronger: the dispatch mode FLIPS which policy wins. - thinktime helps every policy but helps LPWL most (TTFT p90 -40%, E2E mean -31% vs -3..-16% for the rest): tracets bursts punish prefill-spreading. - Ranking flip: tracets -> LPWL only ties unified_ab on TTFT p90 and is 3rd on E2E mean; thinktime -> LPWL is 1st on both (TTFT p90 -31%, best TPOT/balance, zero knobs) vs the tuned unified+A+B. - => benchmark agentic routing with thinktime; tracets' burst artifact erases LPWL's advantage. Caveat n=1: tracets ranking is run-sensitive (does not reproduce dash1 lpwl_5policy_600s.md), the thinktime advantage is the robust signal (appears in both environments). README + grouped-bar fig (figs/exp_d_policy_dispatch.png) + bench_report summaries in results/. Co-Authored-By: Claude Opus 4.8 --- v2/exp_d_policy_dispatch/README.md | 114 +++ v2/exp_d_policy_dispatch/plot.py | 68 ++ .../results/thinktime.json | 803 ++++++++++++++++++ v2/exp_d_policy_dispatch/results/tracets.json | 803 ++++++++++++++++++ v2/figs/exp_d_policy_dispatch.png | Bin 0 -> 82956 bytes 5 files changed, 1788 insertions(+) create mode 100644 v2/exp_d_policy_dispatch/README.md create mode 100644 v2/exp_d_policy_dispatch/plot.py create mode 100644 v2/exp_d_policy_dispatch/results/thinktime.json create mode 100644 v2/exp_d_policy_dispatch/results/tracets.json create mode 100644 v2/figs/exp_d_policy_dispatch.png diff --git a/v2/exp_d_policy_dispatch/README.md b/v2/exp_d_policy_dispatch/README.md new file mode 100644 index 0000000..c74de29 --- /dev/null +++ b/v2/exp_d_policy_dispatch/README.md @@ -0,0 +1,114 @@ +# exp (d) — 5-policy routing under `tracets` vs `thinktime` + +exp (c) showed the **dispatch mode** changes measured performance for a single +round-robin policy, and predicted: *"a cache-aware policy (LPWL) would lower the +latencies and likely **widen** the thinktime advantage."* exp (d) tests that with +the full routing comparison — and finds something stronger: **the dispatch mode +flips which policy wins.** + +**Question.** Does the parameter-free LPWL still beat the tuned `unified+A+B` +baseline once we benchmark with the *faithful* `thinktime` load instead of the +`tracets` burst artifact? + +## Setup + +5 routing policies, each its own **fresh vLLM (cold APC)** on dash0 8×H20, +Qwen3-Coder-30B-A3B, via `scripts/b3_isolated_policy.sh`. **Both dispatch modes +run on the *same* trace** `traces/w600_r0.0015_st30_first600s_ttp.jsonl` (807 +reqs, 274 sessions) — the only variable is `REPLAY_DISPATCH_MODE` +(`tracets` ignores the `time_to_parent_chat` field, `thinktime` consumes it). +Analyzer: `scripts/bench_report.py` (summaries in `results/`). + +- `leastwork` — **LPWL**, parameter-free (`pending_prefill + max(0, input−cache_hit)`) +- `unified_ab` — unified hybrid, tuned A+B′ (`of=1.3, lmw=0.01`) +- `unified_def` — unified hybrid, defaults (`of=2.0, lmw=0.0`) +- `lmetric` — P_tokens × BS, no affinity +- `sticky` — hard session affinity + +## Result (ms; `figs/exp_d_policy_dispatch.png`) + +| policy | mode | TTFT p90 | E2E mean | E2E p90 | E2E p99 | TPOT p90 | APC | req-bal | +|---|---|---:|---:|---:|---:|---:|---:|---:| +| **LPWL** | tracets | 11099 | 9827 | 25366 | 93929 | 33 | 0.650 | **1.49×** | +| **LPWL** | **thinktime** | **6713** | **6788** | **17635** | 69946 | **18** | 0.676 | 1.94× | +| unified+A+B | tracets | 10783 | 8531 | 22063 | 75419 | 21 | 0.667 | 1.54× | +| unified+A+B | thinktime | 9736 | 7131 | 18690 | **63788** | 19 | 0.676 | 2.16× | +| unified default | tracets | 12997 | 8366 | 22819 | 82257 | 20 | 0.693 | 1.56× | +| unified default | thinktime | 11268 | 7975 | 24096 | 72334 | 22 | 0.693 | 2.91× | +| LMetric | tracets | 16492 | 10775 | 27791 | 99231 | 39 | 0.495 | 2.19× | +| LMetric | thinktime | 15607 | 9902 | 27819 | 73672 | 30 | 0.483 | 2.10× | +| sticky | tracets | 15236 | 10139 | 27974 | 82362 | 31 | 0.693 | 2.06× | +| sticky | thinktime | 14838 | 8663 | 24966 | 70933 | 24 | 0.694 | 2.48× | + +### Finding 1 — `thinktime` helps every policy, but helps **LPWL the most** + +Per-policy `tracets`→`thinktime` change (negative = thinktime better): + +| policy | ΔTTFT p90 | ΔE2E mean | ΔTPOT p90 | +|---|---:|---:|---:| +| **LPWL** | **−40%** | **−31%** | **−45%** | +| unified+A+B | −10% | −16% | −10% | +| unified default | −13% | −5% | +10% | +| LMetric | −5% | −8% | −23% | +| sticky | −3% | −15% | −23% | + +`tracets` collapses the inter-turn think-time to ~0 (exp c), manufacturing bursts +→ peak concurrency → KV pressure → preemption. Those bursts punish exactly the +policy that spreads prefill thinly across hosts (LPWL keeps the tightest request +balance, 1.49×), because under a burst the spread sacrifices locality without the +slack to amortize it. Remove the artifact and LPWL's prefill-aware placement pays. + +### Finding 2 — the dispatch mode **flips the cross-policy ranking** + +- **TTFT p90:** `tracets` → `unified_ab (10.8s) ≈ LPWL (11.1s)` — LPWL only *ties*, + even slightly behind. `thinktime` → **LPWL (6.7s)** < unified_ab (9.7s): LPWL is + first, **−31%** vs the tuned baseline. +- **E2E mean:** `tracets` → unified_def (8.4s) < unified_ab (8.5s) < **LPWL (9.8s)** + — LPWL is *3rd, behind both unified variants*. `thinktime` → **LPWL (6.8s)** < + unified_ab (7.1s) < unified_def (8.0s): LPWL is **first**. + +So under artificial `tracets` bursts the parameter-free policy looks tied-or-worse; +under the faithful `thinktime` load it is the clear winner on TTFT and E2E, at +zero knobs and best balance. + +## Conclusion + +**Benchmark agentic routing with `thinktime`. Under it, the parameter-free LPWL is +the best of the five policies** — TTFT p90 −31%, E2E mean −5% / p90 −6%, best TPOT, +tightest balance vs the *tuned* `unified+A+B` — and the `tracets` burst artifact is +precisely what erases that advantage (it even drops LPWL to 3rd on E2E). This both +confirms exp (c)'s prediction and is independent evidence for the GPU-hit-first +routing story: faithful load rewards keeping the active working set GPU-resident. + +## Caveats + +- **n = 1 per arm.** The `tracets` ranking here does **not** reproduce the earlier + dash1 `analysis/lpwl_5policy_600s.md` (which saw LPWL win TTFT p90 −31% *in + tracets*); on dash0 `tracets` it is a tie. i.e. **`tracets` rankings are + run/harness-sensitive** — the robust signal is the `thinktime` advantage, which + appears in *both* environments. Repeat ×3 to bound noise. +- LPWL's one persistent weak spot is **E2E p99** (thinktime 69.9s vs unified_ab + 63.8s) — the structural HEAVY+ >50k decode tail, identical across policies, not + routing-fixable (see `lpwl_5policy_600s.md` κ-ablation). +- `thinktime` advantage is a capacity-slack effect; under saturation the modes + converge (exp c, N=6). + +## Repro +```bash +# 1. annotate the full trace with time_to_parent_chat (dash0; once) +python scripts/add_ttp_streaming.py 051315-051317.jsonl 051315-051317-ttp.jsonl \ + 051315-051317-raw.jsonl +# 2. resample (same seed reproduces traces/w600_r0.0015_st30.jsonl + the ttp field; +# first600s = timestamp<600 filter) +python scripts/sample_trace.py --input 051315-051317-ttp.jsonl \ + --output traces/w600_r0.0015_st30_ttp.jsonl \ + --window-seconds 600 --sample-ratio 0.0015 --max-single-turn-ratio 0.30 --seed 42 +# 3. run both modes x 5 policies (~3.5 h, fresh vLLM/arm) +TRACE_FILE=traces/w600_r0.0015_st30_first600s_ttp.jsonl \ + bash microbench/connector_tax/cache_sweep/run_5policy_both_modes.sh +# 4. report + plot +python scripts/bench_report.py --root outputs/policy5_600s_thinktime_ \ + --json v2/exp_d_policy_dispatch/results/thinktime.json \ + leastwork unified_ab unified_def lmetric sticky +python v2/exp_d_policy_dispatch/plot.py +``` diff --git a/v2/exp_d_policy_dispatch/plot.py b/v2/exp_d_policy_dispatch/plot.py new file mode 100644 index 0000000..cfb501b --- /dev/null +++ b/v2/exp_d_policy_dispatch/plot.py @@ -0,0 +1,68 @@ +"""exp (d): 5-policy routing under tracets vs thinktime dispatch. + +Shows the ranking FLIP: under the faithful `thinktime` load the parameter-free +LPWL (leastwork) is the clear winner, but under `tracets` (think-collapse bursts) +its advantage disappears (it ties unified_ab on TTFT p90 and *loses* on E2E mean). + +Reads the two bench_report summaries; writes v2/figs/exp_d_policy_dispatch.png. +Usage: python v2/exp_d_policy_dispatch/plot.py +""" +import json +import os + +import matplotlib +matplotlib.use("Agg") +import matplotlib.pyplot as plt + +HERE = os.path.dirname(__file__) +TC = json.load(open(os.path.join(HERE, "results/tracets.json"))) +TT = json.load(open(os.path.join(HERE, "results/thinktime.json"))) + +# canonical order: LPWL first; pretty labels +ARMS = ["leastwork", "unified_ab", "unified_def", "lmetric", "sticky"] +LABEL = {"leastwork": "LPWL\n(leastwork)", "unified_ab": "unified\n+A+B", + "unified_def": "unified\ndefault", "lmetric": "LMetric", "sticky": "sticky"} +C_TC, C_TT = "#d62728", "#2ca02c" # tracets red / thinktime green (match exp_c) + + +def panel(ax, key, sub, title, ylab): + tc = [TC[a][key][sub] / 1000.0 for a in ARMS] # ms -> s + tt = [TT[a][key][sub] / 1000.0 for a in ARMS] + x = range(len(ARMS)) + w = 0.38 + b1 = ax.bar([i - w / 2 for i in x], tc, w, label="tracets (burst)", color=C_TC) + b2 = ax.bar([i + w / 2 for i in x], tt, w, label="thinktime (faithful)", color=C_TT) + for bars in (b1, b2): + for r in bars: + ax.text(r.get_x() + r.get_width() / 2, r.get_height(), + f"{r.get_height():.1f}", ha="center", va="bottom", fontsize=8) + ax.set_xticks(list(x)); ax.set_xticklabels([LABEL[a] for a in ARMS], fontsize=9) + ax.set_ylabel(ylab); ax.set_title(title, fontsize=11) + ax.grid(axis="y", alpha=.3) + ax.set_ylim(0, max(tc + tt) * 1.18) + # mark LPWL-thinktime as the winner (lowest green) in each panel + ax.annotate("LPWL wins\nunder thinktime", xy=(0 + w / 2, tt[0]), + xytext=(0.9, max(tc + tt) * 0.86), fontsize=8.5, color=C_TT, + ha="left", arrowprops=dict(arrowstyle="->", color=C_TT, lw=1.3)) + return b1, b2 + + +fig, (axL, axR) = plt.subplots(1, 2, figsize=(11.2, 4.6)) +panel(axL, "ttft_ms", "p90", "TTFT p90 (lower = better)", "TTFT p90 (s)") +panel(axR, "e2e_ms", "mean", "E2E mean (lower = better)", "E2E mean (s)") +axL.legend(loc="upper left", fontsize=9) +fig.suptitle("5-policy routing: dispatch mode flips the ranking — " + "LPWL is best under faithful thinktime, only ties/loses under tracets bursts", + fontsize=11.5) +fig.tight_layout(rect=(0, 0, 1, 0.95)) +out = os.path.join(HERE, "..", "figs", "exp_d_policy_dispatch.png") +fig.savefig(out, dpi=140) +print("wrote", os.path.normpath(out)) + +# also print the deltas the README cites +print("\npolicy TTFTp90 tc->tt E2Emean tc->tt") +for a in ARMS: + t1, t2 = TC[a]["ttft_ms"]["p90"], TT[a]["ttft_ms"]["p90"] + e1, e2 = TC[a]["e2e_ms"]["mean"], TT[a]["e2e_ms"]["mean"] + print(f"{a:<13} {t1/1000:5.1f}->{t2/1000:4.1f}s ({(t2-t1)/t1:+.0%}) " + f"{e1/1000:5.1f}->{e2/1000:4.1f}s ({(e2-e1)/e1:+.0%})") diff --git a/v2/exp_d_policy_dispatch/results/thinktime.json b/v2/exp_d_policy_dispatch/results/thinktime.json new file mode 100644 index 0000000..0316cdd --- /dev/null +++ b/v2/exp_d_policy_dispatch/results/thinktime.json @@ -0,0 +1,803 @@ +{ + "leastwork": { + "n_total": 807, + "n_ok": 807, + "window_s": 986.1941225528717, + "ttft_ms": { + "n": 807, + "mean": 3043.454534307026, + "p50": 681.8344180064742, + "p90": 6712.89858900127, + "p99": 41146.725983999204 + }, + "tpot_ms": { + "n": 806, + "mean": 17.12884673518703, + "p50": 7.770131949655479, + "p90": 17.997618232737178, + "p99": 133.81680370757084 + }, + "e2e_ms": { + "n": 807, + "mean": 6787.973176127951, + "p50": 2026.8339599715546, + "p90": 17635.302426991984, + "p99": 69945.72682998842 + }, + "throughput": { + "decode_tps": 234.00362537409853, + "prefill_tps": 8660.302069020001, + "total_tps": 8894.305694394101, + "total_output_tokens": 230773, + "total_new_prefill_tokens": 8540739 + }, + "apc": 0.6756355919409787, + "per_worker": { + "0": { + "n": 96, + "decode_tps": 48.631399136561754, + "prefill_tps": 812.7547930676582, + "ttft_p90_ms": 5368.347445008112, + "gpu_util_mean": 48.6875, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "1": { + "n": 111, + "decode_tps": 28.45180209284375, + "prefill_tps": 954.9580335787387, + "ttft_p90_ms": 3442.4916800053325, + "gpu_util_mean": 40.479166666666664, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "2": { + "n": 99, + "decode_tps": 35.558922120953866, + "prefill_tps": 901.7494422882478, + "ttft_p90_ms": 5583.948273997521, + "gpu_util_mean": 48.395833333333336, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "3": { + "n": 88, + "decode_tps": 20.717016592141224, + "prefill_tps": 1149.215934349922, + "ttft_p90_ms": 6448.1909119931515, + "gpu_util_mean": 38.020833333333336, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "4": { + "n": 124, + "decode_tps": 38.884839326290034, + "prefill_tps": 891.8842445776638, + "ttft_p90_ms": 4944.760143000167, + "gpu_util_mean": 40.020833333333336, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "5": { + "n": 110, + "decode_tps": 20.013301183451194, + "prefill_tps": 1581.959336729224, + "ttft_p90_ms": 27228.53080899222, + "gpu_util_mean": 78.19791666666667, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "6": { + "n": 64, + "decode_tps": 25.779914337947165, + "prefill_tps": 1114.0737658787832, + "ttft_p90_ms": 18414.893322013086, + "gpu_util_mean": 49.833333333333336, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "7": { + "n": 115, + "decode_tps": 15.966430583909537, + "prefill_tps": 1253.7065185497638, + "ttft_p90_ms": 9039.336649002507, + "gpu_util_mean": 39.5625, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + } + }, + "decisions": {}, + "gpu_captured": true, + "spread": { + "n_ratio": 1.9375, + "ttft_p90_ratio": 7.909541500751002, + "gpu_util_ratio": 2.0567123287671234, + "gpu_util_min": 38.020833333333336, + "gpu_util_max": 78.19791666666667 + }, + "per_class": { + "WARM<5k": { + "n": 92, + "ttft_ms": { + "n": 92, + "mean": 192.46459313074845, + "p50": 177.03324498143047, + "p90": 313.57523999758996, + "p99": 553.8838730135467 + } + }, + "MED5-20k": { + "n": 278, + "ttft_ms": { + "n": 278, + "mean": 772.5742901807313, + "p50": 677.829442982329, + "p90": 1460.6262099987362, + "p99": 2101.3274399738293 + } + }, + "HEAVY20-50k": { + "n": 248, + "ttft_ms": { + "n": 248, + "mean": 2004.694984432952, + "p50": 1127.2326559992507, + "p90": 5081.04542500223, + "p99": 9901.586207997752 + } + }, + "HEAVY+>50k": { + "n": 189, + "ttft_ms": { + "n": 189, + "mean": 9134.502951365745, + "p50": 2167.4920289951842, + "p90": 28926.44312098855, + "p99": 49472.52169801504 + } + } + } + }, + "unified_ab": { + "n_total": 807, + "n_ok": 807, + "window_s": 986.5525379180908, + "ttft_ms": { + "n": 807, + "mean": 3592.357064001708, + "p50": 676.4678099716548, + "p90": 9736.127940996084, + "p99": 42370.66501099616 + }, + "tpot_ms": { + "n": 806, + "mean": 13.200466578008895, + "p50": 7.819523662692517, + "p90": 19.090397550442486, + "p99": 133.40408908212945 + }, + "e2e_ms": { + "n": 807, + "mean": 7131.188424004758, + "p50": 2037.0979200233705, + "p90": 18689.829077018658, + "p99": 63787.50272799516 + }, + "throughput": { + "decode_tps": 233.91861166055818, + "prefill_tps": 8640.029468666471, + "total_tps": 8873.948080327029, + "total_output_tokens": 230773, + "total_new_prefill_tokens": 8523843 + }, + "apc": 0.6762772765819173, + "per_worker": { + "0": { + "n": 58, + "decode_tps": 29.088161954921237, + "prefill_tps": 930.9397773565431, + "ttft_p90_ms": 13273.868343996583, + "gpu_util_mean": 44.989583333333336, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "1": { + "n": 98, + "decode_tps": 24.162930086120934, + "prefill_tps": 1018.370498666148, + "ttft_p90_ms": 4365.537890000269, + "gpu_util_mean": 38.90625, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "2": { + "n": 110, + "decode_tps": 35.40713612040818, + "prefill_tps": 965.8167845888297, + "ttft_p90_ms": 4610.747697995976, + "gpu_util_mean": 52.114583333333336, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "3": { + "n": 102, + "decode_tps": 20.719626390233998, + "prefill_tps": 1126.5056419045684, + "ttft_p90_ms": 10947.632670984603, + "gpu_util_mean": 41.703125, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "4": { + "n": 99, + "decode_tps": 44.64435324746667, + "prefill_tps": 911.5449663712324, + "ttft_p90_ms": 4116.690531984204, + "gpu_util_mean": 42.671875, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "5": { + "n": 110, + "decode_tps": 29.724722072971574, + "prefill_tps": 918.851216898154, + "ttft_p90_ms": 4543.632891000016, + "gpu_util_mean": 40.864583333333336, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "6": { + "n": 125, + "decode_tps": 28.516474205589404, + "prefill_tps": 1522.1155917037186, + "ttft_p90_ms": 25507.55575299263, + "gpu_util_mean": 76.203125, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "7": { + "n": 105, + "decode_tps": 21.655207582846195, + "prefill_tps": 1245.884991177276, + "ttft_p90_ms": 20629.490054008784, + "gpu_util_mean": 47.276041666666664, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + } + }, + "decisions": { + "lmetric_fallback": 389, + "affinity": 418 + }, + "gpu_captured": true, + "spread": { + "n_ratio": 2.1551724137931036, + "ttft_p90_ratio": 6.196131468910353, + "gpu_util_ratio": 1.9586345381526105, + "gpu_util_min": 38.90625, + "gpu_util_max": 76.203125 + }, + "per_class": { + "WARM<5k": { + "n": 92, + "ttft_ms": { + "n": 92, + "mean": 448.3382160131283, + "p50": 179.28761898656376, + "p90": 323.1771159917116, + "p99": 5748.067840992007 + } + }, + "MED5-20k": { + "n": 278, + "ttft_ms": { + "n": 278, + "mean": 1455.8712874500252, + "p50": 685.6210659898352, + "p90": 1802.9974120145198, + "p99": 32571.255193004617 + } + }, + "HEAVY20-50k": { + "n": 248, + "ttft_ms": { + "n": 248, + "mean": 2672.607777120579, + "p50": 1117.918328003725, + "p90": 5214.129884989234, + "p99": 22190.210508997552 + } + }, + "HEAVY+>50k": { + "n": 189, + "ttft_ms": { + "n": 189, + "mean": 9472.201524545819, + "p50": 2150.3282230114564, + "p90": 28876.64386598044, + "p99": 48314.48572798399 + } + } + } + }, + "unified_def": { + "n_total": 807, + "n_ok": 807, + "window_s": 979.5575842857361, + "ttft_ms": { + "n": 807, + "mean": 4037.2454534798544, + "p50": 695.2703970018774, + "p90": 11267.881545994896, + "p99": 46221.317757997895 + }, + "tpot_ms": { + "n": 806, + "mean": 16.476541787288614, + "p50": 8.307468241425875, + "p90": 21.768670571627954, + "p99": 200.26358073773736 + }, + "e2e_ms": { + "n": 807, + "mean": 7974.606969135101, + "p50": 2098.1516239990015, + "p90": 24096.24872301356, + "p99": 72334.40188399982 + }, + "throughput": { + "decode_tps": 235.5890084484137, + "prefill_tps": 8253.263646460364, + "total_tps": 8488.852654908778, + "total_output_tokens": 230773, + "total_new_prefill_tokens": 8084547 + }, + "apc": 0.6929610772463206, + "per_worker": { + "0": { + "n": 96, + "decode_tps": 39.88024862110074, + "prefill_tps": 791.1724766697671, + "ttft_p90_ms": 5825.010653992649, + "gpu_util_mean": 47.68586387434555, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "1": { + "n": 55, + "decode_tps": 17.82028977166094, + "prefill_tps": 910.7254277965683, + "ttft_p90_ms": 16298.377383005572, + "gpu_util_mean": 39.2565445026178, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "2": { + "n": 98, + "decode_tps": 27.174512685142215, + "prefill_tps": 1043.4608606959093, + "ttft_p90_ms": 9739.183520985534, + "gpu_util_mean": 40.83769633507853, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "3": { + "n": 103, + "decode_tps": 24.518211471470025, + "prefill_tps": 1003.2661844138513, + "ttft_p90_ms": 6705.797864007764, + "gpu_util_mean": 33.50785340314136, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "4": { + "n": 102, + "decode_tps": 49.593817432818994, + "prefill_tps": 689.9175820202374, + "ttft_p90_ms": 2474.3239340023138, + "gpu_util_mean": 45.246073298429316, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "5": { + "n": 112, + "decode_tps": 20.50823792523468, + "prefill_tps": 1346.1127974027988, + "ttft_p90_ms": 23553.059853002196, + "gpu_util_mean": 50.109947643979055, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "6": { + "n": 81, + "decode_tps": 19.51697409799575, + "prefill_tps": 990.0816609032532, + "ttft_p90_ms": 5961.234248999972, + "gpu_util_mean": 38.717277486910994, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "7": { + "n": 160, + "decode_tps": 36.57671644299036, + "prefill_tps": 1478.5266565579789, + "ttft_p90_ms": 17912.180206010817, + "gpu_util_mean": 85.15183246073299, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + } + }, + "decisions": { + "lmetric_fallback": 349, + "affinity": 458 + }, + "gpu_captured": true, + "spread": { + "n_ratio": 2.909090909090909, + "ttft_p90_ratio": 9.518988006919619, + "gpu_util_ratio": 2.5412500000000002, + "gpu_util_min": 33.50785340314136, + "gpu_util_max": 85.15183246073299 + }, + "per_class": { + "WARM<5k": { + "n": 92, + "ttft_ms": { + "n": 92, + "mean": 594.1550390875225, + "p50": 196.222682017833, + "p90": 338.4021449892316, + "p99": 7637.84466200741 + } + }, + "MED5-20k": { + "n": 278, + "ttft_ms": { + "n": 278, + "mean": 1386.6929373560054, + "p50": 662.5233909871895, + "p90": 1772.5210430216976, + "p99": 19121.71271801344 + } + }, + "HEAVY20-50k": { + "n": 248, + "ttft_ms": { + "n": 248, + "mean": 3761.512416864031, + "p50": 1186.4990000030957, + "p90": 7436.603061010828, + "p99": 37502.096537995385 + } + }, + "HEAVY+>50k": { + "n": 189, + "ttft_ms": { + "n": 189, + "mean": 9973.751859232492, + "p50": 2084.2301140073687, + "p90": 34646.72368601896, + "p99": 51783.358982007485 + } + } + } + }, + "lmetric": { + "n_total": 807, + "n_ok": 807, + "window_s": 1036.9893975257874, + "ttft_ms": { + "n": 807, + "mean": 4942.361280256006, + "p50": 1195.667241991032, + "p90": 15606.655231997138, + "p99": 46217.127193987835 + }, + "tpot_ms": { + "n": 806, + "mean": 19.707597229545165, + "p50": 9.35281297406689, + "p90": 30.177805961172382, + "p99": 232.18400578116416 + }, + "e2e_ms": { + "n": 807, + "mean": 9901.839828112516, + "p50": 3177.2723750036675, + "p90": 27819.4430010044, + "p99": 73672.06387300394 + }, + "throughput": { + "decode_tps": 222.5413302687709, + "prefill_tps": 13134.949144609054, + "total_tps": 13357.490474877826, + "total_output_tokens": 230773, + "total_new_prefill_tokens": 13620803 + }, + "apc": 0.48270240989877555, + "per_worker": { + "0": { + "n": 121, + "decode_tps": 40.13348651326501, + "prefill_tps": 1973.9218210754154, + "ttft_p90_ms": 23894.41591600189, + "gpu_util_mean": 90.75247524752476, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "1": { + "n": 128, + "decode_tps": 44.98117349250917, + "prefill_tps": 1626.6328315647543, + "ttft_p90_ms": 5918.853377981577, + "gpu_util_mean": 64.96039603960396, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "2": { + "n": 109, + "decode_tps": 26.800659742819484, + "prefill_tps": 1578.2861463241723, + "ttft_p90_ms": 13917.768498009536, + "gpu_util_mean": 58.306930693069305, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "3": { + "n": 99, + "decode_tps": 19.435107097610242, + "prefill_tps": 1683.1715002723502, + "ttft_p90_ms": 16737.5574040052, + "gpu_util_mean": 59.16831683168317, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "4": { + "n": 116, + "decode_tps": 19.955845305048445, + "prefill_tps": 1884.7752972820501, + "ttft_p90_ms": 11347.276910004439, + "gpu_util_mean": 50.36138613861386, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "5": { + "n": 61, + "decode_tps": 12.497716978516857, + "prefill_tps": 1726.7611455549827, + "ttft_p90_ms": 31680.082703998778, + "gpu_util_mean": 55.93069306930693, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "6": { + "n": 88, + "decode_tps": 38.23472071614312, + "prefill_tps": 1208.0914259963265, + "ttft_p90_ms": 9533.787049993407, + "gpu_util_mean": 51.62871287128713, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "7": { + "n": 85, + "decode_tps": 20.50262042285856, + "prefill_tps": 1453.3089765390037, + "ttft_p90_ms": 14970.007644995349, + "gpu_util_mean": 51.757425742574256, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + } + }, + "decisions": {}, + "gpu_captured": true, + "spread": { + "n_ratio": 2.098360655737705, + "ttft_p90_ratio": 5.352402007768976, + "gpu_util_ratio": 1.8020249680526887, + "gpu_util_min": 50.36138613861386, + "gpu_util_max": 90.75247524752476 + }, + "per_class": { + "WARM<5k": { + "n": 92, + "ttft_ms": { + "n": 92, + "mean": 511.51012201982036, + "p50": 255.4193850082811, + "p90": 471.22472297633067, + "p99": 3532.1444049768616 + } + }, + "MED5-20k": { + "n": 278, + "ttft_ms": { + "n": 278, + "mean": 1010.5527848093863, + "p50": 818.2104199950118, + "p90": 1878.1264800054487, + "p99": 4416.228823014535 + } + }, + "HEAVY20-50k": { + "n": 248, + "ttft_ms": { + "n": 248, + "mean": 3164.034748000338, + "p50": 2636.801838991232, + "p90": 7400.190736021614, + "p99": 9636.447697004769 + } + }, + "HEAVY+>50k": { + "n": 189, + "ttft_ms": { + "n": 189, + "mean": 15215.938255342222, + "p50": 12060.85875100689, + "p90": 36602.47571900254, + "p99": 52271.21993701439 + } + } + } + }, + "sticky": { + "n_total": 807, + "n_ok": 807, + "window_s": 994.9787130355835, + "ttft_ms": { + "n": 807, + "mean": 4455.946148958436, + "p50": 713.0627470032778, + "p90": 14838.208375993418, + "p99": 43174.81458699331 + }, + "tpot_ms": { + "n": 806, + "mean": 19.138733289320065, + "p50": 8.24416923684399, + "p90": 23.769559945071954, + "p99": 184.6952650922511 + }, + "e2e_ms": { + "n": 807, + "mean": 8663.490226920512, + "p50": 2352.715140004875, + "p90": 24966.471978026675, + "p99": 70932.61348700617 + }, + "throughput": { + "decode_tps": 231.93762537485247, + "prefill_tps": 8105.277926394779, + "total_tps": 8337.215551769632, + "total_output_tokens": 230773, + "total_new_prefill_tokens": 8064579 + }, + "apc": 0.6937194318219754, + "per_worker": { + "0": { + "n": 156, + "decode_tps": 44.672312500428745, + "prefill_tps": 1949.5271351907093, + "ttft_p90_ms": 20576.009418989997, + "gpu_util_mean": 93.18041237113403, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "1": { + "n": 114, + "decode_tps": 44.75372127725863, + "prefill_tps": 929.0429914624127, + "ttft_p90_ms": 5498.717762995511, + "gpu_util_mean": 53.08247422680412, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "2": { + "n": 88, + "decode_tps": 29.785561853462614, + "prefill_tps": 904.2113044360427, + "ttft_p90_ms": 12234.77461998118, + "gpu_util_mean": 49.628865979381445, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "3": { + "n": 98, + "decode_tps": 29.982550992458386, + "prefill_tps": 1018.2680159145942, + "ttft_p90_ms": 16286.48554199026, + "gpu_util_mean": 44.123711340206185, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "4": { + "n": 110, + "decode_tps": 37.69427376549181, + "prefill_tps": 949.1017120546454, + "ttft_p90_ms": 6709.773182024946, + "gpu_util_mean": 45.7680412371134, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "5": { + "n": 99, + "decode_tps": 19.964246209244884, + "prefill_tps": 980.7747514746083, + "ttft_p90_ms": 14065.780322009232, + "gpu_util_mean": 36.324742268041234, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "6": { + "n": 79, + "decode_tps": 11.21531531660107, + "prefill_tps": 682.5723918534845, + "ttft_p90_ms": 4579.089447972365, + "gpu_util_mean": 22.288659793814432, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "7": { + "n": 63, + "decode_tps": 13.869643459906332, + "prefill_tps": 691.7796240082818, + "ttft_p90_ms": 18229.593775991816, + "gpu_util_mean": 30.762886597938145, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + } + }, + "decisions": {}, + "gpu_captured": true, + "spread": { + "n_ratio": 2.4761904761904763, + "ttft_p90_ratio": 4.493471825081102, + "gpu_util_ratio": 4.180619796484737, + "gpu_util_min": 22.288659793814432, + "gpu_util_max": 93.18041237113403 + }, + "per_class": { + "WARM<5k": { + "n": 92, + "ttft_ms": { + "n": 92, + "mean": 827.0193562525294, + "p50": 197.0047799986787, + "p90": 507.2060489910655, + "p99": 19187.98109301133 + } + }, + "MED5-20k": { + "n": 278, + "ttft_ms": { + "n": 278, + "mean": 2624.659966896439, + "p50": 736.4085000008345, + "p90": 3899.43698499701, + "p99": 33760.123436979484 + } + }, + "HEAVY20-50k": { + "n": 248, + "ttft_ms": { + "n": 248, + "mean": 3807.600332329692, + "p50": 1086.1541359918192, + "p90": 9912.624888995197, + "p99": 40516.03257699753 + } + }, + "HEAVY+>50k": { + "n": 189, + "ttft_ms": { + "n": 189, + "mean": 9766.785228673292, + "p50": 2521.5582190139685, + "p90": 34039.37866198248, + "p99": 47948.314540000865 + } + } + } + } +} \ No newline at end of file diff --git a/v2/exp_d_policy_dispatch/results/tracets.json b/v2/exp_d_policy_dispatch/results/tracets.json new file mode 100644 index 0000000..b735d7a --- /dev/null +++ b/v2/exp_d_policy_dispatch/results/tracets.json @@ -0,0 +1,803 @@ +{ + "leastwork": { + "n_total": 807, + "n_ok": 807, + "window_s": 1045.237051486969, + "ttft_ms": { + "n": 807, + "mean": 4029.99802739754, + "p50": 856.9921070011333, + "p90": 11099.306205986068, + "p99": 43400.520397000946 + }, + "tpot_ms": { + "n": 806, + "mean": 21.48754069144944, + "p50": 8.545071840088175, + "p90": 33.14273249998223, + "p99": 221.47291811146448 + }, + "e2e_ms": { + "n": 807, + "mean": 9827.03743343642, + "p50": 2474.214674992254, + "p90": 25365.627319028135, + "p99": 93929.44298699149 + }, + "throughput": { + "decode_tps": 220.78532297692573, + "prefill_tps": 8826.999566150593, + "total_tps": 9047.784889127519, + "total_output_tokens": 230773, + "total_new_prefill_tokens": 9226307 + }, + "apc": 0.6495987515101673, + "per_worker": { + "0": { + "n": 95, + "decode_tps": 26.681028920976477, + "prefill_tps": 996.0917463831219, + "ttft_p90_ms": 5435.623251018114, + "gpu_util_mean": 40.30392156862745, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "1": { + "n": 94, + "decode_tps": 53.13244485640239, + "prefill_tps": 951.7659162433571, + "ttft_p90_ms": 10786.369787005242, + "gpu_util_mean": 61.27450980392157, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "2": { + "n": 89, + "decode_tps": 19.963892372849116, + "prefill_tps": 1100.5666115294052, + "ttft_p90_ms": 4944.386984978337, + "gpu_util_mean": 36.745098039215684, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "3": { + "n": 117, + "decode_tps": 23.37842881214075, + "prefill_tps": 1155.5378737117585, + "ttft_p90_ms": 6188.670104980702, + "gpu_util_mean": 40.76470588235294, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "4": { + "n": 108, + "decode_tps": 34.993018997907186, + "prefill_tps": 947.086594941991, + "ttft_p90_ms": 4642.632269999012, + "gpu_util_mean": 40.19607843137255, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "5": { + "n": 87, + "decode_tps": 10.190989675352892, + "prefill_tps": 1130.268964651918, + "ttft_p90_ms": 9265.34449501196, + "gpu_util_mean": 29.41176470588235, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "6": { + "n": 130, + "decode_tps": 20.925396749842136, + "prefill_tps": 1646.6073390256745, + "ttft_p90_ms": 38816.55501498608, + "gpu_util_mean": 81.27450980392157, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "7": { + "n": 87, + "decode_tps": 31.520122591454786, + "prefill_tps": 899.0745196633663, + "ttft_p90_ms": 7304.075189982541, + "gpu_util_mean": 42.26960784313726, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + } + }, + "decisions": {}, + "gpu_captured": true, + "spread": { + "n_ratio": 1.4942528735632183, + "ttft_p90_ratio": 8.3608937252733, + "gpu_util_ratio": 2.7633333333333336, + "gpu_util_min": 29.41176470588235, + "gpu_util_max": 81.27450980392157 + }, + "per_class": { + "WARM<5k": { + "n": 92, + "ttft_ms": { + "n": 92, + "mean": 2123.6411421857115, + "p50": 202.10654201218858, + "p90": 478.5369329911191, + "p99": 39781.0776779952 + } + }, + "MED5-20k": { + "n": 278, + "ttft_ms": { + "n": 278, + "mean": 1228.5320352953054, + "p50": 757.9952410014812, + "p90": 1679.417210019892, + "p99": 15248.28791298205 + } + }, + "HEAVY20-50k": { + "n": 248, + "ttft_ms": { + "n": 248, + "mean": 2886.291041083525, + "p50": 1301.9832599966321, + "p90": 5246.098520990927, + "p99": 39812.045788014075 + } + }, + "HEAVY+>50k": { + "n": 189, + "ttft_ms": { + "n": 189, + "mean": 10579.37216416889, + "p50": 2986.336703004781, + "p90": 34044.874527986394, + "p99": 51031.28803099389 + } + } + } + }, + "unified_ab": { + "n_total": 807, + "n_ok": 807, + "window_s": 1081.3928244113922, + "ttft_ms": { + "n": 807, + "mean": 4003.8645795703064, + "p50": 745.6592369999271, + "p90": 10783.10890001012, + "p99": 46727.02033401583 + }, + "tpot_ms": { + "n": 806, + "mean": 18.129335403553664, + "p50": 8.004697278213117, + "p90": 20.508462421730655, + "p99": 188.8185092436804 + }, + "e2e_ms": { + "n": 807, + "mean": 8531.231209817679, + "p50": 2227.301309001632, + "p90": 22062.78157699853, + "p99": 75419.32771002757 + }, + "throughput": { + "decode_tps": 213.4034874196719, + "prefill_tps": 8110.4912128244405, + "total_tps": 8323.894700244113, + "total_output_tokens": 230773, + "total_new_prefill_tokens": 8770627 + }, + "apc": 0.66690479182639, + "per_worker": { + "0": { + "n": 119, + "decode_tps": 36.19868665330458, + "prefill_tps": 1627.2449384503814, + "ttft_p90_ms": 28329.616097005783, + "gpu_util_mean": 85.30805687203791, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "1": { + "n": 94, + "decode_tps": 30.323855734708484, + "prefill_tps": 977.303507238684, + "ttft_p90_ms": 5139.202910999302, + "gpu_util_mean": 41.165876777251185, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "2": { + "n": 79, + "decode_tps": 13.535321919642842, + "prefill_tps": 1030.6661694437062, + "ttft_p90_ms": 16363.982771988958, + "gpu_util_mean": 35.014218009478675, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "3": { + "n": 122, + "decode_tps": 25.46530675842895, + "prefill_tps": 900.9917376974744, + "ttft_p90_ms": 5133.929038012866, + "gpu_util_mean": 35.85781990521327, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "4": { + "n": 101, + "decode_tps": 39.54437188287811, + "prefill_tps": 731.5889121334044, + "ttft_p90_ms": 8783.158237987664, + "gpu_util_mean": 45.843601895734594, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "5": { + "n": 109, + "decode_tps": 32.10951581715914, + "prefill_tps": 842.2332564447569, + "ttft_p90_ms": 4199.806818010984, + "gpu_util_mean": 37.32701421800948, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "6": { + "n": 89, + "decode_tps": 8.69804181021798, + "prefill_tps": 1146.4917946675243, + "ttft_p90_ms": 11112.522551004076, + "gpu_util_mean": 30.95734597156398, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "7": { + "n": 94, + "decode_tps": 27.528386843331813, + "prefill_tps": 853.9708967485094, + "ttft_p90_ms": 10584.918729990022, + "gpu_util_mean": 47.426540284360186, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + } + }, + "decisions": { + "lmetric_fallback": 394, + "affinity": 413 + }, + "gpu_captured": true, + "spread": { + "n_ratio": 1.5443037974683544, + "ttft_p90_ratio": 6.745456951856325, + "gpu_util_ratio": 2.7556644213104713, + "gpu_util_min": 30.95734597156398, + "gpu_util_max": 85.30805687203791 + }, + "per_class": { + "WARM<5k": { + "n": 92, + "ttft_ms": { + "n": 92, + "mean": 473.4928183806124, + "p50": 193.41183800133877, + "p90": 326.81434298865497, + "p99": 5278.063865000149 + } + }, + "MED5-20k": { + "n": 278, + "ttft_ms": { + "n": 278, + "mean": 1676.7254021373014, + "p50": 733.51754702162, + "p90": 1942.2162729897536, + "p99": 28329.616097005783 + } + }, + "HEAVY20-50k": { + "n": 248, + "ttft_ms": { + "n": 248, + "mean": 2520.2562936371373, + "p50": 1149.4361000077333, + "p90": 5139.202910999302, + "p99": 26739.575799991144 + } + }, + "HEAVY+>50k": { + "n": 189, + "ttft_ms": { + "n": 189, + "mean": 11092.085469873233, + "p50": 2945.923403982306, + "p90": 38718.26310700271, + "p99": 51830.85186799872 + } + } + } + }, + "unified_def": { + "n_total": 807, + "n_ok": 807, + "window_s": 912.5732414722443, + "ttft_ms": { + "n": 807, + "mean": 4275.594404255811, + "p50": 757.1689730102662, + "p90": 12997.265826008515, + "p99": 47988.61391301034 + }, + "tpot_ms": { + "n": 806, + "mean": 18.24678916181055, + "p50": 8.282395397119393, + "p90": 19.536432251223843, + "p99": 127.01842809143604 + }, + "e2e_ms": { + "n": 807, + "mean": 8365.99611452138, + "p50": 2119.7480160044506, + "p90": 22818.839199026115, + "p99": 82257.18197401147 + }, + "throughput": { + "decode_tps": 252.8816203592563, + "prefill_tps": 8854.578057717206, + "total_tps": 9107.459678076462, + "total_output_tokens": 230773, + "total_new_prefill_tokens": 8080451 + }, + "apc": 0.6931166371592755, + "per_worker": { + "0": { + "n": 86, + "decode_tps": 48.0925782233062, + "prefill_tps": 878.7174152798008, + "ttft_p90_ms": 9217.135582002811, + "gpu_util_mean": 49.02808988764045, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "1": { + "n": 114, + "decode_tps": 36.67650822853761, + "prefill_tps": 962.1616765613936, + "ttft_p90_ms": 5333.489734999603, + "gpu_util_mean": 43.674157303370784, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "2": { + "n": 75, + "decode_tps": 21.302399759867672, + "prefill_tps": 1132.1228292133994, + "ttft_p90_ms": 16419.932407996384, + "gpu_util_mean": 44.235955056179776, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "3": { + "n": 94, + "decode_tps": 39.351362025545676, + "prefill_tps": 918.7383126064411, + "ttft_p90_ms": 14089.503638009774, + "gpu_util_mean": 57.30898876404494, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "4": { + "n": 103, + "decode_tps": 23.649608622297535, + "prefill_tps": 1200.1765449894706, + "ttft_p90_ms": 12823.167912021745, + "gpu_util_mean": 43.82022471910113, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "5": { + "n": 104, + "decode_tps": 25.253863419028313, + "prefill_tps": 1067.8562067279715, + "ttft_p90_ms": 18659.113589994377, + "gpu_util_mean": 52.449438202247194, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "6": { + "n": 114, + "decode_tps": 27.64600018218629, + "prefill_tps": 1278.7061322523903, + "ttft_p90_ms": 7502.1790039900225, + "gpu_util_mean": 42.62359550561798, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "7": { + "n": 117, + "decode_tps": 30.90929989848701, + "prefill_tps": 1416.0989400863393, + "ttft_p90_ms": 15775.390956026968, + "gpu_util_mean": 79.19101123595506, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + } + }, + "decisions": { + "lmetric_fallback": 353, + "affinity": 454 + }, + "gpu_captured": true, + "spread": { + "n_ratio": 1.56, + "ttft_p90_ratio": 3.4984812040696216, + "gpu_util_ratio": 1.8579148543561357, + "gpu_util_min": 42.62359550561798, + "gpu_util_max": 79.19101123595506 + }, + "per_class": { + "WARM<5k": { + "n": 92, + "ttft_ms": { + "n": 92, + "mean": 187.7879224041902, + "p50": 171.855135995429, + "p90": 318.49737899028696, + "p99": 406.7676870035939 + } + }, + "MED5-20k": { + "n": 278, + "ttft_ms": { + "n": 278, + "mean": 2014.1915133893583, + "p50": 737.6636109838728, + "p90": 2057.0135610178113, + "p99": 29051.10613000579 + } + }, + "HEAVY20-50k": { + "n": 248, + "ttft_ms": { + "n": 248, + "mean": 3298.1720407103326, + "p50": 1321.936836000532, + "p90": 7205.449934001081, + "p99": 36468.73455500463 + } + }, + "HEAVY+>50k": { + "n": 189, + "ttft_ms": { + "n": 189, + "mean": 10874.266077009788, + "p50": 2567.718550999416, + "p90": 35562.78318798286, + "p99": 61205.50292698317 + } + } + } + }, + "lmetric": { + "n_total": 807, + "n_ok": 807, + "window_s": 1077.4112372398376, + "ttft_ms": { + "n": 807, + "mean": 5152.329462028203, + "p50": 1274.1917690145783, + "p90": 16492.156354011968, + "p99": 46248.138958995696 + }, + "tpot_ms": { + "n": 806, + "mean": 24.0370380963572, + "p50": 10.534365684851883, + "p90": 38.95731354601127, + "p99": 231.34709527787183 + }, + "e2e_ms": { + "n": 807, + "mean": 10774.921962922257, + "p50": 3460.944951977581, + "p90": 27791.26176200225, + "p99": 99231.47636200883 + }, + "throughput": { + "decode_tps": 214.19212276939402, + "prefill_tps": 12337.071064946676, + "total_tps": 12551.263187716071, + "total_output_tokens": 230773, + "total_new_prefill_tokens": 13292099 + }, + "apc": 0.49518609291339905, + "per_worker": { + "0": { + "n": 140, + "decode_tps": 40.62422823074453, + "prefill_tps": 2047.015033600442, + "ttft_p90_ms": 13910.764692991506, + "gpu_util_mean": 92.98571428571428, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "1": { + "n": 89, + "decode_tps": 23.129515582036454, + "prefill_tps": 1463.9739641483652, + "ttft_p90_ms": 17954.478895000648, + "gpu_util_mean": 60.319047619047616, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "2": { + "n": 92, + "decode_tps": 18.14256184117442, + "prefill_tps": 1663.4864553589516, + "ttft_p90_ms": 15653.674011002295, + "gpu_util_mean": 55.94761904761905, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "3": { + "n": 92, + "decode_tps": 43.91637878329201, + "prefill_tps": 1313.127198881315, + "ttft_p90_ms": 13397.495551005704, + "gpu_util_mean": 54.385714285714286, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "4": { + "n": 134, + "decode_tps": 21.903428500019192, + "prefill_tps": 1412.6889969137978, + "ttft_p90_ms": 21995.840935007436, + "gpu_util_mean": 51.51428571428571, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "5": { + "n": 88, + "decode_tps": 16.934109622562403, + "prefill_tps": 1474.5493132872787, + "ttft_p90_ms": 11013.645827013534, + "gpu_util_mean": 42.55238095238095, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "6": { + "n": 108, + "decode_tps": 30.606697665860118, + "prefill_tps": 1651.413070981298, + "ttft_p90_ms": 18613.971301994752, + "gpu_util_mean": 52.67619047619048, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "7": { + "n": 64, + "decode_tps": 18.935202543704882, + "prefill_tps": 1310.817031775228, + "ttft_p90_ms": 15090.364522009622, + "gpu_util_mean": 41.904761904761905, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + } + }, + "decisions": {}, + "gpu_captured": true, + "spread": { + "n_ratio": 2.1875, + "ttft_p90_ratio": 1.997144386199301, + "gpu_util_ratio": 2.2189772727272725, + "gpu_util_min": 41.904761904761905, + "gpu_util_max": 92.98571428571428 + }, + "per_class": { + "WARM<5k": { + "n": 92, + "ttft_ms": { + "n": 92, + "mean": 1789.4509492392028, + "p50": 262.9711049958132, + "p90": 1572.630943992408, + "p99": 24139.729285001522 + } + }, + "MED5-20k": { + "n": 278, + "ttft_ms": { + "n": 278, + "mean": 1697.68317032391, + "p50": 920.4712719947565, + "p90": 2029.556789988419, + "p99": 22497.115491016302 + } + }, + "HEAVY20-50k": { + "n": 248, + "ttft_ms": { + "n": 248, + "mean": 3424.9239484553045, + "p50": 2699.253859987948, + "p90": 6799.459913017927, + "p99": 24401.87052200781 + } + }, + "HEAVY+>50k": { + "n": 189, + "ttft_ms": { + "n": 189, + "mean": 14137.37210560736, + "p50": 11013.645827013534, + "p90": 35319.35577199329, + "p99": 51099.66781400726 + } + } + } + }, + "sticky": { + "n_total": 807, + "n_ok": 807, + "window_s": 925.9680500030518, + "ttft_ms": { + "n": 807, + "mean": 4914.133386887214, + "p50": 906.6202020039782, + "p90": 15236.451414995827, + "p99": 46771.370519010816 + }, + "tpot_ms": { + "n": 806, + "mean": 22.62391467634138, + "p50": 9.728358783056292, + "p90": 30.957536839455965, + "p99": 231.30005976865783 + }, + "e2e_ms": { + "n": 807, + "mean": 10139.474540275223, + "p50": 2597.957960999338, + "p90": 27973.595037998166, + "p99": 82362.0547579776 + }, + "throughput": { + "decode_tps": 249.22350182518656, + "prefill_tps": 8743.631057219865, + "total_tps": 8992.854559045052, + "total_output_tokens": 230773, + "total_new_prefill_tokens": 8096323 + }, + "apc": 0.6925138424965755, + "per_worker": { + "0": { + "n": 136, + "decode_tps": 55.41875877880546, + "prefill_tps": 1434.2957081463262, + "ttft_p90_ms": 11807.82909199479, + "gpu_util_mean": 65.71270718232044, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "1": { + "n": 129, + "decode_tps": 38.47432964872015, + "prefill_tps": 1709.658340797809, + "ttft_p90_ms": 23309.77585897199, + "gpu_util_mean": 86.77900552486187, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "2": { + "n": 108, + "decode_tps": 47.74786775834683, + "prefill_tps": 1144.2727424520835, + "ttft_p90_ms": 30574.395572999492, + "gpu_util_mean": 63.50828729281768, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "3": { + "n": 78, + "decode_tps": 25.291369394357414, + "prefill_tps": 1245.5040970325047, + "ttft_p90_ms": 26070.17321899184, + "gpu_util_mean": 51.87845303867403, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "4": { + "n": 132, + "decode_tps": 40.39124244068328, + "prefill_tps": 941.3586138281199, + "ttft_p90_ms": 5989.128820016049, + "gpu_util_mean": 43.0828729281768, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "5": { + "n": 84, + "decode_tps": 22.365782491017637, + "prefill_tps": 1030.0301398054248, + "ttft_p90_ms": 14970.723142003408, + "gpu_util_mean": 41.43646408839779, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "6": { + "n": 66, + "decode_tps": 9.593203566765315, + "prefill_tps": 669.7250515262986, + "ttft_p90_ms": 13777.997018012684, + "gpu_util_mean": 20.994475138121548, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + }, + "7": { + "n": 74, + "decode_tps": 9.940947746490457, + "prefill_tps": 568.7863636312983, + "ttft_p90_ms": 7027.451686997665, + "gpu_util_mean": 18.50828729281768, + "gpu_util_max": 100.0, + "gpu_mem_max_mb": 89575.0 + } + }, + "decisions": {}, + "gpu_captured": true, + "spread": { + "n_ratio": 2.0606060606060606, + "ttft_p90_ratio": 5.104982125416625, + "gpu_util_ratio": 4.68865671641791, + "gpu_util_min": 18.50828729281768, + "gpu_util_max": 86.77900552486187 + }, + "per_class": { + "WARM<5k": { + "n": 92, + "ttft_ms": { + "n": 92, + "mean": 892.6154872479738, + "p50": 207.1402580186259, + "p90": 375.00955499126576, + "p99": 11232.500832004007 + } + }, + "MED5-20k": { + "n": 278, + "ttft_ms": { + "n": 278, + "mean": 2908.9762750470118, + "p50": 770.736623002449, + "p90": 4912.921145994915, + "p99": 42022.69450199674 + } + }, + "HEAVY20-50k": { + "n": 248, + "ttft_ms": { + "n": 248, + "mean": 4250.573046338691, + "p50": 1623.4680919733364, + "p90": 11137.098645005608, + "p99": 39817.45037299697 + } + }, + "HEAVY+>50k": { + "n": 189, + "ttft_ms": { + "n": 189, + "mean": 10691.78570601113, + "p50": 2671.919913002057, + "p90": 36922.92091701529, + "p99": 53025.03776800586 + } + } + } + } +} \ No newline at end of file diff --git a/v2/figs/exp_d_policy_dispatch.png b/v2/figs/exp_d_policy_dispatch.png new file mode 100644 index 0000000000000000000000000000000000000000..77ad94f7367c2289d3ec8420a4a7a080a19d4f24 GIT binary patch literal 82956 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�PBx2= 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 fe>1nyIlne<(iEjv)?ml7DXFa{r%qnTNLtJ literal 0 HcmV?d00001