## Fleet Infrastructure & Hardware - **dankclaw (192.168.0.143):** AMD Strix Halo APU (gfx1151) + RTX 3090 (PCIe x4 M.2 dock). Ubuntu 24.04. Combined GPU budget ~88 GiB. - **dankserver (192.168.0.235):** ASUS B650-E with 2x AMD R9700 GPUs (gfx1201). Ubuntu 24.04. RCCL atomics require M.2 riser to move card #2 to CPU-attached M.2_2 slot. - **the workstation / blankpad:** Ryzen 5 PRO 5650U, RTX 4070 Max-Q. Passwordless SSH to fleet. ## LLM Model Fleet - **frank-medium (dankserver :7770):** - Model: Qwen3.8-27B (MXFP6 / Q8_K_XL). - Architecture: Layer-split (35:30) across 2x R9700. - Drafter: DFlash2 (Q8_0). - Key Specs: n_slots=2, n_ctx_slot=196608, CACHE_RAM=16384 MiB (handles ~12.8 GiB per slot). - **frank-large (dankclaw :7770):** - Model: Halogen (iGPU/3090 split). - KV Pool: 524,288 positions (~14.4 GiB). - MaxTokens: 57344 (prevents 400-error 'dead zone'). - Performance: ~3.8-4.0 t/s decode, ~192 t/s prefill. - **frank-small (dankclaw :7771):** - Model: Gemma4-12B (Q4_K_M) via vLLM. - Mode: Sampling (Temp 1.0, Top_k 20, Top_p 0.95). ## Deployment System (serverAppConfigs) - **Architecture:** Quadlet-based podman units (boot-persistent). - **Pipeline:** `deploy.sh` (pre-flight) $\rightarrow$ `deploy-plan.py` (path-aware mapping) $\rightarrow$ `deploy-remote.sh` (revision-scoped pull/restart) $\rightarrow$ Playwright e2e gate. - **Homepage:** `shared/homepage/` with category-based rendering (`admin` vs `user`), status-aware badges, and bare mode (`?bare=1`). - **Persistence:** OMP Session Persistence (JSONL) with blob externalization for images/long strings. HistoryStorage (SQLite) for prompt-history UX. ## Core Lessons & Pitfalls - **RCCL Atomics:** Chipset-attached PCIe lacks atomics; use CPU-attached lanes for TP/PP functionality. - **Halogen Co-tenancy:** `HALOGEN_FLASH_PIN_TRUNK=1` holds host memory; multi-minute full-CPU stalls are documented behavior, not crashes. - **Cache Logic:** A refused RAM cache state forces a full prefill next turn (critical for hybrid DeltaNet models). - **Plex/Entropy:** Use `GroupAdd=keep-groups` in quadlets to pass host groups into containers without modifying filesystem permissions. - **Calibre-Web:** Use `8090` (internal), `Digest` (auth), and `printf` (password) to avoid common traps.