fix(fv-ml1): pin vLLM KV in bytes on meromero (22 GiB) and coder; gen-small KV 8 -> 5.5 GiB

meromero-rp sized its KV from --gpu-memory-utilization, and vLLM's profile
counts co-booting neighbours as its own non-torch memory. Three boots gave
20.37 / 26.74 / 29.04 GiB of KV, and the 2026-10-05 Docker-move restart cut
GPU 1 free memory to 3,981 MiB, below intern-decision's 32k-token budget.
Coder read negative KV on every co-boot. Both are now pinned, so util only
gates the boot check (meromero util 0.52 -> 0.47, just above its footprint).

GPU 0 plateaus at ~60 MiB free 1-2 days after a boot (Beszel), so
gen-small's KV drops to 5.5 GiB (461,215 tokens, 1.76x) and parakeet-nemo
stays on GPU 0 with room for its 3,840 MiB cap. GPU 3 stays clear.

Applied with playbooks/fv-ml1-kv-pin-20261005.yaml: GPU 1 free 3,981 ->
11,801 MiB, GPU 0 495 -> 5,039 MiB right after boot; all nine seats healthy.
This commit is contained in:
vh
2026-10-05 21:40:28 -07:00
parent 269c80f3ca
commit 6851ecbd0b
9 changed files with 229 additions and 9 deletions
+6 -5
View File
@@ -124,7 +124,7 @@ _As of 2026-10-05 ~2035 PT. The newest subsection is first; older subsections ca
- **Scheduled / to verify:** 10-05 0815 + 0900 infra-hermes jobs (sfsrv-ana `pre-pbs4` snapshot delete after its 04:00 backup; drop `pve/root-pre-pve9` on pfi-pve + esh-pve) — outcome not checked in this session, read `scripts/ops-log tail`; esh-nas-pve `nvme/ROOT@pre-pve9` destroy ~10-10 (ours); 10-11 0540 first weekly sudo-io archiver run (check it), 10-11 0900 infra-hermes deletes the two one-off PBS VM vzdumps. Never `zpool upgrade` any pool yet.
- **Worldtree memory gate 20261004T143011Z FAILED** (one run filed the forbidden `u-negative-ephemeral` fact; an esh-pve reboot overlapped run 1). Whether the 2026-10-05 0730 run repeated it was not checked here; it is a regression check with worldtree-dev, not a gate.
- **Small clean-ups, ours, untracked:** stale LiteLLM aliases `erp-tune-v2` and `gemma4-26b-a4b-it-base`; ana-docker's Traefik (`readTimeout` 10m) and CrowdSec (`use_wal`, bouncer `updateMaxFailure: 3`) configs live only on the host, not in `stacks/`; TEI weights revision unpinned on esh-ml1 + nh3-ml1; a stray nginx `.bak` on pfi-tacticalrmm.
- **fv-ml1 tight cards (dug in 2026-10-05 ~2120, read-only; fixes await Prime's go).** GPU 1: a +2.4–2.6 GB STEP at the 0234 Docker-move restart (Beszel 2 h windows: flat 88,566–88,779 for 4 days → flat 91,082 for 16 h; Beszel `mu` = MiB / 1.024). Cause: `vllm-meromero-rp` is the only big GPU-1 seat sized by `--gpu-memory-utilization` (0.52) rather than `--kv-cache-memory`, and vLLM's profile is corrupted when neighbours co-boot on the card: non-torch read 8.11 (09-14) → 1.74 → **−0.56 GiB** (10-05 run 2), KV 20.37 → 26.74 → **29.04 GiB** (320,774 → 457,315 tokens). Free now 3,981 vs the 6,625 intern-decision's 32k budget assumed → a max-length call is ~2.4 GB short (no OOM logged; 293 calls on 10-05, all 200). `vllm-coder` (0.055, unpinned) also crashes once per co-boot on negative KV, then lands on 1.03 GiB every time. **Proposed fix:** pin meromero `--kv-cache-memory` 24 GiB (≈377,950 tokens, 1.44×; Free → ~9.1 GB, ~2.7 GB spare at intern-decision's peak) and coder at 1.03 GiB; profiling is skipped, so no trial boot. GPU 0: no step; it CREEPS after every boot and plateaus near ZERO free (Beszel: ~60 MiB free 10-03→10-05, before the restart). The 10-01 "Free ~1.05 GB at rest" was a just-after-restart reading, the trap `stacks/meromero-charrp/.env.example` already warns about. Now 495 free and falling; gen-small 37,302 (10-01: 36,116), cyberprev 46,504 (09-14 plateau 47,104). Parakeet: 16 short jobs 10-02/03 OK; a long file needs ~920 MiB above its 2,108 rest. Options for Prime: move parakeet-nemo to GPU 3 (recommended), trim gen-small KV (he declined on 10-01), or leave it. **Park 75 (TTS stack → fv-ml1) DROPPED** on Prime's call 2026-10-05 2115 (comment 63 has the reasoning).
- **fv-ml1 KV pins APPLIED 2026-10-05 2131–2139 (Prime's call; `playbooks/fv-ml1-kv-pin-20261005.yaml`, elway all green).** Diagnosis: on GPU 1, `vllm-meromero-rp` sized KV from util 0.52, and vLLM's profile is corrupted by co-booting neighbours (non-torch 8.11 → 1.74 → −0.56 GiB; KV 20.37 → 26.74 → 29.04 GiB). The 0234 Docker-move restart cost GPU 1 ~2.5 GB (Beszel step), so intern-decision's 32k calls were ~2.4 GB short. GPU 0 has no step: it CREEPS for 1–2 days after a boot and plateaued at ~60 MiB free (Beszel 10-03→10-05). The 10-01 "~1.05 GB free" was a just-after-restart read. Changes: meromero KV pinned **22 GiB** (346,436 tokens, 1.32×), util 0.52 → 0.47 (boot check only); coder pinned **1,104,674,816 B** (77,056 tokens, unchanged); gen-small KV **8 → 5.5 GiB** (461,215 tokens, 1.76×) so parakeet-nemo STAYS on GPU 0. **GPU 3 stays clear for ad-hoc work (Prime).** Result: GPU 1 Free 3,981 → **11,801** MiB (~5.4 GB spare at intern-decision's 32k peak); GPU 0 Free 495 → 5,039 right after boot, projected plateau ~2.6 GB, which covers parakeet's 3,840 MiB cap with ~0.9 GB to spare. ⚠ **Verify the GPU 0 plateau ~10-07/08** from Beszel (`stats.g.0.mu` × 1.024). Downtime: char-rp ~2 min, coder ~1 min, gen-small ~4 min (57 s compile miss). .env backups `*.env.bak-20261005-kvpin`. **Park 75 (TTS stack → fv-ml1) DROPPED** by Prime 2026-10-05 2115 (comment 63).
- **Open, Prime's calls (unchanged from 10-03):** QNAP LCD visual check (`services/qnap-lcd/`); NH3 Mac mini (`Mac-mini`, 00:c5:85:13:e0:92, 10.100.10.121, asleep since 10-03 ~1407) wake fix on site: `sudo pmset -a sleep 0 disksleep 0 displaysleep 10 womp 1 autorestart 1 powernap 0`, ideally Ethernet; Booth unreachable from 10.100.10.166 (Prime's Wi-Fi MacBook; resume only on his word; lead: SSID client isolation / proxy-ARP); Uptime Kuma has nothing on Miranda's chain (svos :8770, hermes-gateway); mask `openipmi.service` on esh-nas-pve; run `playbooks/pve-nag-patch.yaml` on esh-pve-2 when it is plugged back in.
### Parakeet speech seat: unified-en under NeMo, LIVE (2026-10-01)
@@ -152,11 +152,12 @@ _As of 2026-10-05 ~2035 PT. The newest subsection is first; older subsections ca
- **Legacy archive:** DESTROY it whole by **2026-10-30**, or at retirement-done, or on a subject-erasure request, whichever comes first. The runbook is in the detail file.
- **TODO:** re-sweep both api logs after real traffic. After the b193 push, remove the retired config keys (list: detail file, "Post-b193 config retirements").
### fv-ml1 GPU layout (as of 2026-10-01)
### fv-ml1 GPU layout (as of 2026-10-05)
- **GPU 0:** cyberprev (47.1 GB), gen-small (35.3 GB), voices (10.8 GB), parakeet-nemo (3.6 GB steady). Free 385 MiB, FULL.
- **GPU 1:** vllm-coder, erp-seat, meromero-rp, plus intern-decision (cap 14.4 GiB, 32k tokens, peak 15,220 of a 15,437 MiB budget). FULL.
- **GPU 3:** the full-size-seat reserve (Flash-Next is parked). On-demand tenants: Blender, Scriberr (0 idle, ~5.5 GB per job), and MIA auto-rig (one-shot `scripts/mia-run`, peak 3.4 GB, added 2026-10-01 for dread-dev). When a full-size seat claims GPU 3, Scriberr steps aside to **irv-ml1's A6000**, not back to GPU 1.
- **GPU 0:** cyberprev (KV 16 GiB pinned), gen-small (KV 5.5 GiB pinned since 2026-10-05), voices (KV 1.5 GiB), parakeet-nemo (rest 2,108 MiB, cap 3,840). Plateau target ~2.6 GB free (verify ~10-07/08).
- **GPU 1:** vllm-coder, erp-seat, meromero-rp (all KV byte-pinned since 2026-10-05), plus intern-decision (cap 14.4 GiB, 32k tokens, peak 15,220). Free 11,801 MiB at rest → ~5.4 GB spare at its peak.
- **GPU 2:** `vllm-flash-next` alone (gen / gen-large and 6 other aliases, util 0.96, ~96.4 GB). Live since 2026-09-14; henge park 49 is stale.
- **GPU 3:** clear for ad-hoc work (Prime, 2026-10-05); no always-resident tenant goes here. On-demand tenants: Blender, Scriberr (0 idle, ~5.5 GB per job), and MIA auto-rig (one-shot `scripts/mia-run`, peak 3.4 GB, added 2026-10-01 for dread-dev). When a full-size seat claims GPU 3, Scriberr steps aside to **irv-ml1's A6000**, not back to GPU 1.
### intern-decision (replaced SemIf on 2026-09-30)