frank-large: cutover to vLLM TheRock gfx1151, MiMo-V2.6 BF16 + cross-model MTP
Engine: digest-pinned docker.io/kyuz0/vllm-therock-gfx1151 (vLLM 0.30, TheRock ROCm 10, Triton GDN kernels); the serve script gates the image by REPO DIGEST, the payload (config + index + exact shard count), the spec draft (BOTH weight layouts: single model.safetensors for dflash, sharded index for the Qwen3.5-9B MTP head), and whole /dev/dri, sweeps the bench identity vllm-mimo, then exec podman wait so a container death trips Restart=always. Shape: 4 x 262144 at util 0.45 (KV grows only on the 8 full-attention layers), MTP 2 draft tokens. Measured 2026-10-01 window (frank-large stopped): base 13.1 t/s decode (~94% of the LPDDR5x BF16 roof), DFlash-8 17.4, MTP-2 19.8 with 71%/44% per-position acceptance - the cross-model head works because vLLM reads the draft from a separate path while MiMo ships zero mtp.* tensors. Spec arms do not preserve greedy bf16 text (batched-verify reduction order). The seam was rewritten around the new laws (18 tests): unit self-healing, digest gating, engine wiring, the measured spec table, the retired gufo gates, the deployer MainPID check. frank_small port test follows the PORT -> FRANK_LARGE_PUBLISH rename. Rollback: tag frank-large-gufo-q4kxl-20261001.
This commit is contained in:
1 parent
b3313340fa
commit
dab483c79f
6 files changed
+487
-516
No files matched your search
@@ -1,20 +1,46 @@
|
||||
# frank-large.service — vLLM MiMo-V2.6-Distill-Qwen-9B (BF16) on the Strix
|
||||
# Halo gfx1151 iGPU, :7770. 2026-10-01 cutover from gufo (tag
|
||||
# frank-large-gufo-q4kxl-20261001 restores the Q4_K_XL + DFlash2 shape).
|
||||
#
|
||||
# WHY A ROOT UNIT: parity with frank-primary/frank-small — the unit is
|
||||
# relink_unit'd from this repo into /etc/systemd/system/, PID1 grants
|
||||
# LimitMEMLOCK=infinity (vLLM pins host buffers), and OOM protection lands
|
||||
# on the engine instead of the co-tenants. The container runs in dank's
|
||||
# ROOTLESS podman storage.
|
||||
#
|
||||
# The serve script drives `podman run` directly (image entrypoint is
|
||||
# overridden to `vllm serve`) and blocks on the container, so a container
|
||||
# death is a non-zero ExecStart. NOTE from frank-primary's experience:
|
||||
# vLLM's API server can drain and exit 0 after an engine fault, so the
|
||||
# restart policy MUST be always, not on-failure.
|
||||
[Unit]
|
||||
Description=gufo (gufo-org/gufo, ROCm gfx1151) Qwen3.8-27B UD-Q8_K_XL, DFlash2 spec decode, 262144 ctx / 1 session, root systemd unit (dankclaw, frank-large, Strix Halo iGPU)
|
||||
Description=frank-large — vLLM MiMo-V2.6-Distill-Qwen-9B (BF16) on the gfx1151 iGPU
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
# Never let the start-rate limiter give up after a crash loop.
|
||||
StartLimitIntervalSec=0
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=dank
|
||||
Group=dank
|
||||
# The engine pins staging buffers; keep the memlock budget unbounded so an
|
||||
# RLIMIT smaller than the pinned set cannot fail the load. Parity with the
|
||||
# other LLM units on this fleet.
|
||||
LimitMEMLOCK=infinity
|
||||
Environment="FRANK_LARGE_ENV_FILE=/home/dank/serverAppConfigs/scripts/frank-large.env"
|
||||
ExecStart=/home/dank/serverAppConfigs/scripts/serve-frank-large.sh
|
||||
Restart=on-failure
|
||||
# systemd stop: podman wait alone cannot stop the container child; stop it
|
||||
# explicitly or the engine outlives the unit holding the GPU and port.
|
||||
ExecStop=/usr/bin/podman stop -t 120 frank-large-mimo
|
||||
# Boot cost: ~200-240 s warm (measured 2026-10-01 bench window); cold torch
|
||||
# compile is longer. Health stays 503 until the engine is up — do not kill.
|
||||
TimeoutStartSec=1800
|
||||
# ExecStop allows 120 s of drain; the stop timeout must exceed it (the
|
||||
# frank-primary 2026-10-01 lesson: a short TimeoutStopSec records 'Failed
|
||||
# with result timeout' on every stop).
|
||||
TimeoutStopSec=180
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
# The engine holds 17.5 GiB of weights plus the KV pool in the GTT
|
||||
# aperture; it is the last process on this host the kernel should pick.
|
||||
OOMScoreAdjust=-500
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
Reference in new issue
Block a user