frank-medium: serve the whole 262144-token window, and repoint every signal to llama.cpp
Context: 262144 was measured before it was deployed -- 24.72 GB on GPU 0 and 29.14 GB on GPU 1 of 34.21 GB each, ~5 GB of headroom on the busier card, and a 140,069-token prompt prefilled through the single slot in 134 s to prove the window is real. The 114688 wall was the vLLM predecessor's arithmetic, not this runtime's. Throughput, measured through the service: 1.0-1.4k tok/s prefill from 4k to 140k, 43.8 tok/s decode on a 512-token generation, 41-71 % DFlash2 acceptance, and the prefix cache re-prefilling 4 of 998 tokens on a repeated prompt. The signals move with the runtime, so the fleet's rules and dashboard are re-cut rather than renamed: vllm: series do not exist any more, and two of the old rules watched things llama.cpp does not export at all (KV-pool fill, p95 latency). Those are retired with the reason written down, and LlmSpecDecodeOff takes one of the slots -- a lost drafter is the failure no client can see. The observability seam now fails if any rule names a series the endpoint does not export, which is what would have caught the stale vllm: expressions. omp models.yml (outside the repo) is updated in the same pass: contextWindow 262144, and the full reasoning-effort map, because Qwen3.8's template answers 500 on 'high' -- verified against the live endpoint, low/medium/xhigh answer 200. Subagents run at high.
This commit is contained in:
@@ -145,7 +145,7 @@ Deployed flags:
|
||||
|---|---|---|
|
||||
| `--split-mode` / `--device` / `--tensor-split` | `layer` / `ROCm0,ROCm1` / `1,1` | both cards, one model, no collective |
|
||||
| `--gpu-layers` / `--fit` | `999` / `off` | everything on the cards; auto-fit must not resize a context we set |
|
||||
| `--ctx-size` / `--parallel` | `131072` / `1` | one slot; `--parallel` **divides** the context |
|
||||
| `--ctx-size` / `--parallel` | `262144` / `1` | one slot carries the model's whole configured window; `--parallel` **divides** the context |
|
||||
| `--flash-attn` / cache types | `on` / `f16` K and V | an agentic checkpoint is the wrong place to spend KV precision |
|
||||
| `--spec-type` / `--spec-draft-n-max` | `draft-dflash` / `7` | DFlash2 blocks are 8 tokens, so 7 drafts is the ceiling llama.cpp allows |
|
||||
| `--spec-draft-device` | `ROCm1` | the drafter rides the card that ends up holding the target's last layers |
|
||||
@@ -169,12 +169,37 @@ Deployed flags:
|
||||
|
||||
`block_size=8` and `n_extract=5` are DFlash2's own metadata; the selector is
|
||||
what distinguishes it from DFlash 1.
|
||||
- Both cards hold the model: at 131072 context, `rocm-smi` reports
|
||||
**17.9 GiB on GPU 0 and 22.0 GiB on GPU 1** (the drafter and the attention
|
||||
layers' KV sit on the second).
|
||||
- A real completion (60-token prompt, 43 output tokens incl. reasoning):
|
||||
**28.3 tok/s**, `draft_n = 49`, `draft_n_accepted = 36` → **73 % acceptance**.
|
||||
The reasoning trace arrives in `reasoning_content`.
|
||||
- Both cards hold the model: at 262144 context `rocm-smi` reports **24.72 GB on
|
||||
GPU 0 and 29.14 GB on GPU 1** of 34.21 GB each — the drafter, the attention
|
||||
layers' KV and the compute buffers all sit on the second card, which keeps
|
||||
~5.1 GB of headroom. At 131072 the same pair reads 19.89 / 24.30 GB.
|
||||
- **140,069 prompt tokens prefilled in 134 s** (1043 tok/s) through the one
|
||||
slot: the raised window is real, not just declared, and it is 22 % beyond the
|
||||
114688 the vLLM predecessor could offer.
|
||||
|
||||
### Measured throughput (2026-09-16, deployed service, `temperature 0`)
|
||||
|
||||
Same filler corpus for every shape, so these are shapes rather than a
|
||||
benchmark: a large prompt with a tiny budget isolates prefill, a small prompt
|
||||
with a long budget isolates decode. `draft`/`acc` are per request; acceptance
|
||||
moves with the text (filler prose accepts far worse than code or a real agent
|
||||
loop).
|
||||
|
||||
| Shape | Prefill | Decode | Acceptance |
|
||||
|---|---|---|---|
|
||||
| 4k prompt / 32 out | 3994 tok in 3.25 s — 1230 tok/s | 59.8 tok/s | 71 % |
|
||||
| 1k prompt / 512 out | 998 tok in 1.41 s — 707 tok/s | **43.8 tok/s** | 41 % |
|
||||
| 16k prompt / 16 out | 12,528 tok in 8.94 s — **1402 tok/s** | — | 100 % (13/13) |
|
||||
| 64k prompt / 16 out | 48,508 tok in 39.8 s — 1219 tok/s | — | 53 % |
|
||||
| 140k prompt / 16 out | 140,069 tok in 134.3 s — 1043 tok/s | — | — |
|
||||
| same 1k prompt again | **4 tokens prefilled** | 43.8 tok/s | 41 % |
|
||||
|
||||
The last row is the prefix cache doing its job: the second request of the same
|
||||
conversation re-prefilled 4 of 998 tokens. Prefill holds ~1.0-1.4k tok/s from
|
||||
4k to 140k, and decode sits at ~44 tok/s on a long generation — against the
|
||||
vLLM predecessor's 42.8 tok/s single-stream (two replicas) and the ROCmFPX
|
||||
llama.cpp measured here at 35.7-46.2 tok/s. One process, one model, both cards,
|
||||
no proxy.
|
||||
|
||||
## Observability
|
||||
|
||||
|
||||
Reference in New Issue
Block a user