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.
48 lines
2.5 KiB
Bash
48 lines
2.5 KiB
Bash
# gen-small-seat — Qwen3.6-35B-A3B Heretic (llmfan46), fv-ml1 GPU 1 (since 2026-10-05), :8026.
|
|
# Copy to .env on the host at /opt/docker/compose/gen-small-seat/.env.
|
|
|
|
GEN_SMALL_IMAGE=vllm/vllm-openai:nightly-e9d1398d9edfd90fcc1cf783805240e3effec013
|
|
API_KEY=
|
|
|
|
# ── Placement ── shares its card with other seats. KV pinned in bytes so the two
|
|
# co-resident seats don't fight over a util fraction.
|
|
# 2026-10-05 rebalance: moved to GPU 1 (with meromero-rp and intern-decision).
|
|
GEN_SMALL_GPU_ID=1
|
|
GEN_SMALL_PORT=8026
|
|
GEN_SMALL_CONTAINER_NAME=vllm-gen-small
|
|
|
|
# ── Model ── llmfan46/Qwen3.6-35B-A3B-uncensored-heretic-Native-MTP-Preserved-NVFP4-Experts-Only
|
|
# Heretic v1.3.0 (MPOA); modelopt NVFP4 experts-only; 19 MTP preserved.
|
|
GEN_SMALL_MODEL=/tank/aimodels/qwen36-35b-a3b-heretic-nvfp4
|
|
GEN_SMALL_QUANT=modelopt_fp4
|
|
GEN_SMALL_SERVED_NAME=gen-small
|
|
GEN_SMALL_SERVED_NAME_THINK=gen-small-thinking
|
|
|
|
# ── Memory ── FIRST-BOOT values, expected to be tuned to a sane concurrency band
|
|
# (1.2-2.5x) by reading the boot log. A3B attention + fp8 KV is cheap, so 8 GiB likely
|
|
# over-provisions; pin down after the first boot reports its token count.
|
|
# 2026-10-01: 0.33 live (.env on fv-ml1). The KV is byte-pinned by GEN_SMALL_KV_CACHE_MEMORY, so util only sets
|
|
# the boot check (Free at start must be >= util x total). Lowering it freed GPU 0 slack for parakeet-nemo
|
|
# at zero KV cost (still 670,142 tokens / 2.56x). Before ANY restart, check the arithmetic:
|
|
# util x 95.6 GiB <= measured Free + this seat's own resident memory. Do not trial-boot.
|
|
# 2026-10-05 (Prime): KV 8 -> 5.5 GiB (~461k tokens, ~1.76x) so parakeet-nemo can stay on GPU 0.
|
|
# The "Free ~1.05 GB at rest" on 10-01 was a just-after-restart read: per Beszel the card plateaus
|
|
# at ~60 MiB free after 1-2 days of creep. 2.5 GiB back covers parakeet's hard cap (MEM_CAP_MIB
|
|
# 3840, i.e. +1,732 MiB over its 2,108 rest) with ~0.9 GB spare at the plateau.
|
|
GEN_SMALL_GPU_MEM_UTIL=0.33
|
|
GEN_SMALL_KV_CACHE_MEMORY=5905580032
|
|
GEN_SMALL_MAX_MODEL_LEN=262144
|
|
GEN_SMALL_MAX_NUM_SEQS=16
|
|
GEN_SMALL_MAX_NUM_BATCHED_TOKENS=4096
|
|
GEN_SMALL_KV_CACHE_DTYPE=fp8
|
|
|
|
# ── Speculative decoding ── MTP k=3. ⚠ Verify acceptance on THIS build (abliteration can
|
|
# desync MTP; MoE MTP has its own failure modes). Delete both --speculative-config lines
|
|
# in the compose to disable.
|
|
GEN_SMALL_SPEC_CONFIG={"method": "qwen3_5_mtp", "num_speculative_tokens": 3}
|
|
|
|
GEN_SMALL_REASONING_PARSER=qwen3
|
|
GEN_SMALL_REASONING_EFFORT=medium
|
|
GEN_SMALL_TOOL_PARSER=qwen3_xml
|
|
GEN_SMALL_ALLOC_CONF=
|