flash-next-seat: full 262K context, KV pinned at a measured 14 GiB, gen-large on the gateway
Operator-directed: raise context to the model's native maximum and take as much KV as the card safely allows, and expose the seat through LiteLLM as `gen-large`. max_model_len 131,072 -> 262,144 KV cache 8.76 -> 14.00 GiB (332,721 -> 560,654 tokens) concurrency 2.54x@128K -> 2.14x@262K ⚠ 16.00 GiB WAS TRIED FIRST AND IS TOO AGGRESSIVE. A 155,497-token non-repeating prefill drove GPU 2 to 97,074 of 97,887 MiB and the caching allocator logged "OOM on device 0 while trying to allocate 488636416 bytes (free: 422117376)" -- 466 MiB wanted against 403 MiB free. The request completed, so nothing failed visibly; that is one step before the shape that crashed stacks/mog-sec twice on 2026-09-10 (~1.04 GiB wanted, ~600 MB free). Backed off to 14.00 GiB, which re-probes clean: zero allocator warnings, a 155,557-token prefill in 14.2 s, and 2,085 MiB still free at peak. The reason the first estimate was wrong is worth keeping, because it is not obvious and it inverts the usual advice: --kv-cache-memory makes vLLM SKIP MEMORY PROFILING ENTIRELY and ignore --gpu-memory-utilization. The profiler was the thing accounting for deep-prefill activation, so pinning bytes switched off the protection that the pin was supposed to formalise. vLLM's own "--kv-cache-memory=18745235968 (17.46 GiB) to fully utilize gpu memory" line is computed from a profile measured at max-num-batched-tokens depth and sits 3.5 GiB above what a 150K-token request survives; open #54764 compounds it, since PLE short-conv prefill pads every request in a batch to the batch-MAX query length. max-num-batched-tokens stays at 8192 -- it is what bounds the activation peak, and doubling max_model_len left the profiled peak unchanged at 1.65 GiB precisely because the peak tracks chunk size, not context length. Gateway: `gen-large` added to the LiteLLM model_list, pointing at fv-ml1:8022. One alias on purpose -- a single alias cannot trip the shared-config enable_thinking mutation footgun, which needs two over the same (model, api_base). Sampling is the checkpoint's own declared set (temp 1.0 / top_p 0.95 / top_k 20); presence_penalty, min_p and repetition_penalty are left unset because the checkpoint declares no canonical value for them. Verified registered for both the infra-ops admin key and the shared all-agents key, since a new model behind a scoped allowlist 403s silently. Also adds services/flash-next-mtp-bench/ -- the MTP measurement campaign and its rationale. MTP stays off, but on "not yet measured here" rather than on vLLM's 4xH100 recipe number, which is a cross-harness comparison and not evidence about a TP=1 Blackwell seat.
This commit is contained in:
@@ -221,6 +221,46 @@ model_list:
|
||||
enable_thinking: true
|
||||
model_info:
|
||||
mode: chat
|
||||
# gen-large -> Qwen3.8-Flash-Next ABLITERATED-NVFP4 (fv-ml1 GPU 2, :8022,
|
||||
# flash-next-seat stack). Operator-requested test alias, added 2026-09-13.
|
||||
#
|
||||
# 176B total / ~6B active ultra-sparse MoE: a 125B main model plus a 51B n-gram (PLE)
|
||||
# lookup table that lives in PINNED HOST RAM and is read by the GPU over CUDA UVA, so
|
||||
# only ~74 GiB is resident on the card. 512 experts, 10 live per token; GDN linear
|
||||
# attention on 36 of 48 layers, Qwen Sparse Attention on the other 12.
|
||||
#
|
||||
# SAMPLING IS THE CHECKPOINT'S OWN, not hand-tuned. generation_config.json declares
|
||||
# temperature 1.0 / top_p 0.95 / top_k 20, and vLLM already applies them as the seat's
|
||||
# defaults (it logs the override at boot). Restated here so a caller reading this file
|
||||
# sees the EFFECTIVE values instead of inferring them. presence_penalty, min_p and
|
||||
# repetition_penalty are deliberately UNSET — the checkpoint declares no canonical
|
||||
# value for them, so none is invented.
|
||||
#
|
||||
# REASONING IS ON, at the seat's `medium` default. The Qwen3.8 chat template defaults
|
||||
# to `xhigh`, where CoT length grows with conversation depth and has a long tail; the
|
||||
# seat pins `medium` instead. Per-request chat_template_kwargs.reasoning_effort wins.
|
||||
#
|
||||
# ONE alias ON PURPOSE. The seat also serves a `-thinking` name, but a single alias
|
||||
# cannot hit the shared-config enable_thinking mutation footgun -- that needs two
|
||||
# aliases over the same (model, api_base) pair. If a thinking/non-thinking split is
|
||||
# ever wanted, add gen-large-reasoning against the `-thinking` served name, the way
|
||||
# gen / gen-reasoning are split above.
|
||||
#
|
||||
# NOT a speed upgrade over `gen` -- adopt for quality. Context is capped at 128K here,
|
||||
# not the model's native 262K, and MTP speculative decoding is off pending a
|
||||
# measurement on this hardware. Both are explained in
|
||||
# stacks/flash-next-seat/README.md and services/flash-next-mtp-bench/README.md.
|
||||
- model_name: gen-large
|
||||
litellm_params:
|
||||
model: hosted_vllm/qwen3.8-flash-next-uncensored
|
||||
api_base: http://10.251.50.54:8022/v1
|
||||
api_key: os.environ/VLLM_API_KEY
|
||||
temperature: 1.0
|
||||
top_p: 0.95
|
||||
extra_body:
|
||||
top_k: 20
|
||||
model_info:
|
||||
mode: chat
|
||||
# char-rp -> MeroMero-v2 NON-THINKING prose seat (:8016, vLLM, meromero-charrp stack on
|
||||
# ana-ml2 GPU 0). G4-MeroMero-v2-31B NVFP4A16, **Gemma-4 base** (google/gemma-4-31B-it),
|
||||
# 256K ctx, in-house quant. Replaced the GGUF/llama.cpp Magidonia-24B seat 2026-08-12.
|
||||
|
||||
Reference in New Issue
Block a user