# 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