Files
serverAppConfigs/scripts/frank-primary.service
T
Frank ecaad36654 frank-primary: vLLM 0.30 UVA-offload shape (pre-deploy commit)
The llama.cpp b11030 trio becomes the vLLM 0.30 trio ahead of the
FP8 cutover on :7770 — same port, same alias, no client moves.

Serve shape: locally built ROCm gfx1201 image
(localhost/frank-primary:vllm030) execs via podman as dank from the
root unit (LimitMEMLOCK=infinity legalizes the pin). UVA offload:
--offload-backend uva pins the PLE family (47.75 GiB, 138 tensors:
131 n-gram table shards + 7 per-layer conv/proj) + routed experts
(114.86 GiB, 150,528 tensors) in host RAM — 162.60 GiB combined,
~81.3 GiB per rank under TP=2, hence --cpu-offload-gb 82 (80/card
strands 2.6 GiB of experts on the cards). Parsers per the host's
own Ornith-era precedent: qwen3_xml tools + qwen3 reasoning (vLLM
0.30 emits the channel as `reasoning` — reasoning_content is
renamed server-side) + enable_thinking/preserve_thinking template
kwargs. Spec decode stays env-wired and OFF at bring-up.

Deployer deploy_llm_primary rewritten: image gate, index-driven
shard-count gate (131), stale-container cleanup, port wait, and the
false-green hardening — health is only green when the unit's own
MainPID is live behind the answer (2026-09-26 lesson).

Seam tests rewritten to the vLLM contract (15 gates): offload
arithmetic, parser wiring, no-llama.cpp-ism, deployer gates. Suite
349/349 green.
2026-09-27 00:16:42 -07:00

38 lines
1.7 KiB
Desktop File

# frank-primary.service — vLLM 0.30 endpoint (Qwen3.8-Flash-Next-FP8,
# UVA offload shape) on the 2x R9700 pair, dankserver :7770.
#
# Replaces the llama.cpp frank-primary unit of 2026-09-26 (same port, same
# served alias; harness models.yml unchanged). The serve script execs a
# podman container (image localhost/frank-primary:vllm030) as dank.
#
# WHY A ROOT UNIT (not a rootless quadlet): the UVA offload pins ~160 GiB of
# host RAM (PLE n-gram table + routed experts). Pinned pages are charged
# against RLIMIT_MEMLOCK; dank's login session on this host carries 8 MiB and
# a user quadlet is capped by the user manager's own hard limit — raising
# that means restarting user@1000.service and bouncing every user container
# on the host. A root unit grants LimitMEMLOCK=infinity to the dank process
# via PID1, no user-manager restart, and the image stays in dank's rootless
# podman storage (podman run as dank reads ~/.local/share/containers).
[Unit]
Description=frank-primary — vLLM 0.30 Qwen3.8-Flash-Next-FP8 (UVA offload) on 2x R9700
After=network-online.target
Wants=network-online.target
[Service]
User=dank
Group=dank
# The UVA offloader pins the offloaded weights in host RAM; an RLIMIT_MEMLOCK
# smaller than the pinned set fails the load mid-start. PID1 grants infinity
# here — parity with the fleet's other LLM units.
LimitMEMLOCK=infinity
Environment="FRANK_PRIMARY_ENV_FILE=/home/dank/serverAppConfigs/scripts/frank-primary.env"
ExecStart=/home/dank/serverAppConfigs/scripts/serve-frank-primary.sh
# Cold start: Triton/inductor compile (several minutes on first boot) plus
# reading+pinning ~173 GiB of weights. Parity with the radiance-era timeout.
TimeoutStartSec=1800
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target