Files
vh c35f6510bf feat(fv-ml1): rebalance GPUs 0/1 by usage; contexts to published maximums; gen-small default output cap
Layout: GPU 0 = cyberprev (KV 16 -> 15 GiB, 1.29x), erp-seat (moved from
GPU 1, KV 8.49 -> 5.5 GiB, 1.32x), voices (ctx 8,192 -> 40,960, its native
maximum, KV 6 GiB, 1.07x), coder (moved from GPU 1, ctx 16,384 -> 32,768,
the card maximum, 2.35x), parakeet-nemo. GPU 1 = gen-small (moved from
GPU 0, 5.5 GiB, 1.76x), meromero-rp (22 GiB, 1.32x), intern-decision.

Sizing rule: KV >= 1.25x max context rounded up to 0.5 GiB, checked against
7 days of LiteLLM traffic and the engines' own KV-usage logs. Each card keeps
spare memory for its bursty tenant (parakeet's cap on GPU 0, intern-decision's
32k call on GPU 1). YaRN extensions are not enabled: they do not fit, and the
Qwen cards warn static YaRN degrades short prompts.

gen-small gets --override-generation-config max_new_tokens 32768. It applies
only to requests that omit max_tokens (vLLM get_max_tokens) and answers 9
runaway ~260k-token replies in 7 days; the longest normal reply was 6,357.

Applied with playbooks/fv-ml1-rebalance-20261005.yaml (boot-check guard and
health/KV verification per seat); all nine seats healthy, gateway smoke
tests pass.
2026-10-05 22:51:17 -07:00

60 lines
3.8 KiB
Bash

# cyberprev-seat — hotdogs/Qwen3.8-27B-abliterated-cyber-preview, fv-ml1 GPU 0, :8025.
# Copy to .env on the host at /opt/docker/compose/cyberprev-seat/.env.
# ── Image ───────────────────────────────────────────────────────────────────
# Same pinned nightly mog-sec and sentinel-r3 run. Not :latest — pin it, so a seat
# restart cannot silently change the engine under a measured configuration.
CYBER_IMAGE=vllm/vllm-openai:nightly-e9d1398d9edfd90fcc1cf783805240e3effec013
API_KEY=replace-me
# ── Placement ───────────────────────────────────────────────────────────────
# GPU 0, co-resident with mog-sec. Took over :8025 from the retired sentinel-r3 seat.
CYBER_GPU_ID=0
CYBER_PORT=8025
CYBER_CONTAINER_NAME=vllm-cyberprev
# ── Model ───────────────────────────────────────────────────────────────────
# In-house mixed quant, compressed-tensors (NOT modelopt_fp4).
# ⚠ Quantized from /tank/aimodels/cyberprev-bf16-FIXED, not the raw download. The raw
# hotdogs export ships 850/1199 body tensors with a TRIPLED `language_model.` prefix
# (upstream bug) -> quant of the raw source is gibberish that passes every structural
# check. cyberprev-bf16-fixed is the name-repaired source (verified tensor-for-tensor
# against qwen38-27b-uncensored-bf16). See docs/pfi/model-quantization-playbook.md.
CYBER_MODEL=/tank/aimodels/cyberprev-nvfp4-mixed-v2
CYBER_QUANT=compressed-tensors
# ⚠ Its OWN name. Do not reuse `sentinel-r3` — that seat is retired and its gateway
# aliases are deliberately left to 404 rather than repointed at different weights.
CYBER_SERVED_NAME=cyberprev-27b
CYBER_SERVED_NAME_THINK=cyberprev-27b-thinking
# ── Memory ──────────────────────────────────────────────────────────────────
# 0.40 of the card, sharing GPU 0 with mog-sec. KV pinned in bytes (8 GiB) so the
# figure is reproducible regardless of what else is resident at start time.
CYBER_GPU_MEM_UTIL=0.40
# 2026-10-05 rebalance: 15 GiB (~337k tokens, 1.29x at 262,144). Live max use seen: 57% of 16 GiB.
CYBER_KV_CACHE_MEMORY=16106127360
# ⚠ 163840, NOT native 262144. Inherited from mog-sec, which crashed five times
# learning that the KV pool's capacity and the card's processing depth are different
# numbers. Raising this requires a deep-prefill probe with a NON-REPEATING prompt on
# THIS checkpoint — a repeated prompt hashes to cached blocks and never prefills deep.
CYBER_MAX_MODEL_LEN=262144
CYBER_MAX_NUM_SEQS=16
CYBER_MAX_NUM_BATCHED_TOKENS=4096
CYBER_KV_CACHE_DTYPE=fp8
# ── Speculative decoding ────────────────────────────────────────────────────
# One var, whole JSON — the two shapes are not interchangeable (dflash needs a
# "model", MTP must not have one).
# DFlash2 : {"method": "dflash", "model": "/drafter", "num_speculative_tokens": 7}
# MTP : {"method": "qwen3_5_mtp", "num_speculative_tokens": 3}
# dflash k=7 is the default, carried from the sentinel measurement (2.40 vs 2.18).
# ⚠ Re-measure on THIS body before trusting it: cyberprev is ABLITERATED, and
# abliteration is precisely what can desync an MTP head. Gate MTP on a measured
# acceptance of >=~40%, never on an assumption.
CYBER_SPEC_CONFIG={"method": "dflash", "model": "/drafter", "num_speculative_tokens": 7}
CYBER_REASONING_PARSER=qwen3
CYBER_REASONING_EFFORT=medium
CYBER_ALLOC_CONF=