The 2026-10-09 wire aliases become the service names everywhere: systemd units, serve scripts, env files and FRANK_* variables, deploy-plan/deploy-remote service keys, container names, Prometheus job names + alert rules, Grafana dashboard queries, bats seams, runbook filenames, homepage/AGENTS lore, and historical prose. Rollback tags renamed in lockstep. Residue in the tree: zero. Retired frank-medium/small/npu names are history and stay. Known casualty: scripts/patches/*.patch context lines were rewritten; those retired-era vLLM-fork patches no longer apply byte-exact.
65 lines
3.4 KiB
Desktop File
65 lines
3.4 KiB
Desktop File
# frank-archon.service — radiance (StillDeadcode, Apache-2.0) endpoint
|
|
# (OFFICIAL Qwen/Qwen3.8-Flash-Next-FP8 at NATIVE block-FP8 precision, the
|
|
# rad-convert container qwen4exp-fp8-native.rad) on BOTH R9700s (TP=2,
|
|
# wht6 wire), dankserver :7770. 2026-10-05 cutover from FreeToken (git tag
|
|
# frank-archon-freetoken-pr587-20261005 is the pre-cutover state; the
|
|
# retired unit/env/serve trio and Dockerfile are in that tag).
|
|
#
|
|
# Same port, same served alias, same container identity as the unit name;
|
|
# the harness models.yml id is unchanged. The serve script drives
|
|
# `podman run` directly: the digest-pinned stilldeadcode/radiance image
|
|
# (287 MiB, kernels prebuilt for gfx1201) has the engine as its
|
|
# entrypoint. The image lives in dank's ROOTLESS podman storage.
|
|
# WHY A ROOT UNIT (not a rootless quadlet): radiance pins ~132 GiB of HOST
|
|
# RAM (2 x 40 GiB expert pools + the 47.7 GiB PLE ngram table + the prefix
|
|
# host tier). 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; the
|
|
# engine still runs out of dank's rootless podman storage.
|
|
[Unit]
|
|
Description=frank-archon — radiance Qwen3.8-Flash-Next-FP8 (native) on 2x R9700 TP=2
|
|
After=network-online.target
|
|
Wants=network-online.target
|
|
# Never let the start-rate limiter give up after a crash loop (a failed LLM
|
|
# endpoint that systemd refuses to retry is worse than a retrying one).
|
|
StartLimitIntervalSec=0
|
|
|
|
[Service]
|
|
User=dank
|
|
Group=dank
|
|
# The engine pins ~132 GiB of host RAM (expert pools + PLE table); 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_ARCHON_ENV_FILE=/home/dank/serverAppConfigs/scripts/frank-archon.env"
|
|
ExecStart=/home/dank/serverAppConfigs/scripts/serve-frank-archon.sh
|
|
# systemd stop: wait alone cannot stop the container child; stop it
|
|
# explicitly. No graceful drain contract is claimed (the OpenAI front end
|
|
# holds no queue to drain — in-flight decodes are lost, which a stop
|
|
# during a bench window accepts; radiance takes SIGTERM on the engine
|
|
# process and podman reaps the container).
|
|
ExecStop=/usr/bin/podman stop -t 120 frank-archon
|
|
# Boot cost: .rad load (weights + PLE upload) + expert host-pool pin. The
|
|
# publisher's compose healthcheck allows a 15-minute start_period; the
|
|
# vLLM-era budget (1800 s) carried forward.
|
|
# Restart=always, NOT on-failure (the 2026-10-01 vLLM lesson carries over:
|
|
# a clean API-server exit after a worker fault reads as success to
|
|
# systemd). `always` restarts on any container death; an explicit
|
|
# `systemctl stop` still wins, so bench windows and deploys are unaffected.
|
|
Restart=always
|
|
RestartSec=10
|
|
# ExecStop allows the engine 120 s to drain (`podman stop -t 120`); without
|
|
# an explicit TimeoutStopSec systemd's 90 s default cuts the stop short,
|
|
# kills it, and records 'Failed with result timeout' (measured 2026-10-01
|
|
# 13:27:17). Must exceed the podman grace with margin.
|
|
TimeoutStopSec=180
|
|
# The engine pins tens of GiB of host RAM (expert rows + PLE table); it is
|
|
# the last process on this host that should be chosen by the kernel OOM
|
|
# killer.
|
|
OOMScoreAdjust=-500
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|