Files
serverAppConfigs/tests/frank_medium_quadlet.bats
T
Frank 6b647c1558 frank-medium: swap ROCmFPX llama.cpp runtime for vllm-radiance MXFP4
Rootless Quadlet on dankserver serving
just1moremodel/Qwen3.8-27B-Uncensored-MXFP4-awq (the radiance stack's
designated alternate target; ships its fp8 MTP head, no rewrite step) with
the DFlash2-FP8 drafter at SPEC=7 on the 2x R9700s (TP=2, host network,
:7770, alias frank-medium unchanged).

- dankserver/frank-medium/: quadlet unit, container entrypoint (fork of
  serve-mxfp4.sh's patch block at pinned clone commit 97353293), healthcheck
- dispatcher retires the root llama.cpp unit, re-tags the registry image to
  the localhost alias, installs the quadlet, waits on /health
- planner maps dankserver/frank-medium/* to frank-medium; scripts-era
  mappings removed
- ROCmFPX-era env/serve/unit/download scripts staged in scripts/.AGENTTRASH
  with .rocmfpx suffix; seams updated (frank_medium_quadlet.bats new)
2026-09-15 20:59:55 -07:00

128 lines
5.8 KiB
Bash
Executable File

#!/usr/bin/env bats
# Seam: the frank-medium quadlet on dankserver.
# frank-medium became a rootless Quadlet container on 2026-09-15 when the
# vllm-radiance MXFP4 stack replaced the charlie12345/ROCmFPX llama.cpp
# runtime on the 2x Radeon AI PRO R9700. This seam pins the properties that
# make it work and that no reviewer can see by reading the flags alone: GPU
# device access on the fixed device indices, the upstream launcher's podman
# posture, host networking with the fleet's client port and alias, the
# measured KV pin for this exact hardware signature, boot persistence, and a
# deploy handler that retires the old root unit without deleting anything.
load helpers
UNIT="$REPO_ROOT/dankserver/frank-medium/quadlet/frank-medium.container"
ENTRYPOINT="$REPO_ROOT/dankserver/frank-medium/radiance-entrypoint.sh"
HEALTHCHECK="$REPO_ROOT/dankserver/frank-medium/frank-medium-healthcheck.py"
REMOTE_DEPLOY="$REPO_ROOT/scripts/deploy-remote.sh"
@test "frank-medium quadlet exists under dankserver/frank-medium/quadlet/" {
[ -f "$UNIT" ]
}
@test "frank-medium unit is boot-persistent (WantedBy=default.target)" {
# Generated units cannot be enabled on the podman 5.x v1 quadlet
# generator; [Install] plus linger is the entire boot-persistence story.
grep -q '^WantedBy=default.target$' "$UNIT"
}
@test "frank-medium unit is self-healing" {
grep -q '^Restart=on-failure$' "$UNIT"
grep -q '^RestartSec=' "$UNIT"
}
@test "frank-medium image is pinned to an exact version tag" {
grep -Eq '^Image=localhost/radiance-vllm:[0-9]+\.[0-9]+\.[0-9]+$' "$UNIT"
grep -q '^Pull=never$' "$UNIT"
}
@test "frank-medium can reach the GPU (kfd + DRM render node) on the fixed indices" {
grep -q '^AddDevice=/dev/kfd$' "$UNIT"
grep -q '^AddDevice=/dev/dri$' "$UNIT"
grep -q '^Environment=HIP_VISIBLE_DEVICES=0,1$' "$UNIT"
grep -q '^Environment=ROCR_VISIBLE_DEVICES=0,1$' "$UNIT"
}
@test "frank-medium runs with the upstream launcher's podman posture" {
# serve-mxfp4.sh runs the image privileged, with host IPC, an unconfined
# seccomp profile and SYS_PTRACE; host networking carries the port.
grep -q -- '--privileged' "$UNIT"
grep -q -- '--ipc=host' "$UNIT"
grep -q -- '--security-opt seccomp=unconfined' "$UNIT"
grep -q -- '--network=host' "$UNIT"
}
@test "frank-medium keeps the fleet endpoint: host-network port 7770, alias frank-medium" {
# vLLM binds 0.0.0.0:7770 on the host network; no PublishPort exists.
[ "$(grep -c '^PublishPort=' "$UNIT")" -eq 0 ]
grep -q '^Environment=PORT=7770$' "$UNIT"
grep -q '^Environment=SERVED_NAMES=frank-medium$' "$UNIT"
}
@test "frank-medium pins the measured KV cache for its hardware signature" {
# The upstream repo's shipped kv-profiles.tsv row for
# 2x7551-32624 at maxseqs=8 chunk=8192 maxlen=262144 spec=dflash.
# A pin is only valid at that batch shape; if the shape changes, this
# value must be recalibrated or set to 0 (vLLM profiling).
grep -q '^Environment=KV_MEM=18563072000$' "$UNIT"
grep -q '^Environment=MAXSEQS=8$' "$UNIT"
grep -q '^Environment=CHUNK=8192$' "$UNIT"
grep -q '^Environment=MAXLEN=262144$' "$UNIT"
grep -q '^Environment=SPEC_METHOD=dflash$' "$UNIT"
grep -q '^Environment=SPEC=7$' "$UNIT"
}
@test "frank-medium mounts the pinned radiance clone and the patched libr4d" {
# The patches are applied at every container start from /patches; the
# image's shipped r4d.so predates the GDN overflow fix and NaNs this
# model, so /r4d (b9e42ab-rx6) must be mounted and copied over it.
grep -q 'Volume=/home/dank/GitPackages/radiance-vllm-mxfp4:/patches:z$' "$UNIT"
grep -q 'Volume=/home/dank/.cache/radiance-libr4d/b9e42ab-rx6:/r4d:z$' "$UNIT"
}
@test "frank-medium entrypoint is a syntax-clean fork of the upstream launcher" {
[ -f "$ENTRYPOINT" ]
bash -n "$ENTRYPOINT"
# Pinned clone: the entrypoint must name the commit it was forked from so
# a clone update is forced through a re-diff, not drifted into silently.
grep -q '9735329348ae1c9319f01cbe5f7004ec5f4dba63' "$ENTRYPOINT"
}
@test "frank-medium healthcheck probes the serving endpoint, not the process" {
[ -f "$HEALTHCHECK" ]
python3 -m py_compile "$HEALTHCHECK"
grep -q 'frank-medium-healthcheck.py' "$UNIT"
grep -q '^HealthStartPeriod=' "$UNIT"
}
@test "frank-medium unit carries no secret material" {
! grep -Eq '^(Environment|EnvironmentFile)=.*(TOKEN|PASSWORD|SECRET|KEY)' "$UNIT"
}
@test "the frank-medium checkpoint mount is the designated target" {
grep -q '^Environment=SNAP=/models/Qwen3.8-27B-Uncensored-MXFP4-awq$' "$UNIT"
grep -q '^Volume=/home/dank/models:/models$' "$UNIT"
}
@test "the deploy handler retires the old root unit without deleting it" {
grep -q 'retire_root_llm_medium' "$REMOTE_DEPLOY"
grep -q 'systemctl stop frank-medium.service' "$REMOTE_DEPLOY"
# Never `rm`: the retired ROCmFPX unit moves into the home trash so the
# llama.cpp era stays recoverable.
grep -q 'mv -- /etc/systemd/system/frank-medium.service' "$REMOTE_DEPLOY"
! grep -qE '(^|[^[:alnum:]_])rm (-[a-zA-Z]+ )?/etc/systemd/system/frank-medium' "$REMOTE_DEPLOY"
}
@test "the deploy handler never tries to enable a generated unit" {
# `systemctl --user enable frank-medium.service` fails on the v1
# generator ("transient or generated"); the deploy must install and
# restart instead.
! grep -q 'systemctl --user enable frank-medium.service' "$REMOTE_DEPLOY"
grep -q 'install_quadlet frank-medium dankserver/frank-medium/quadlet frank-medium' "$REMOTE_DEPLOY"
grep -q 'systemctl --user restart frank-medium.service' "$REMOTE_DEPLOY"
}
@test "the deploy handler re-tags the registry image to the localhost alias" {
grep -q 'podman tag docker.io/stilldeadcode/vllm-radiance:0.9.3 localhost/radiance-vllm:0.9.3' "$REMOTE_DEPLOY"
}