docs: frank-large Kairic Edge runbook + frank-medium clean-KV updates

- New runbook frank-large-kairic-edge-qwen38-27b.md (ACTIVE frank-large,
  Kairic Edge runtime, jcbtc Qwen3.8-27B-IU4, 262144 ctx, MTP depth 4 +
  n-gram drafting, compatibility mode)
- AGENTS.md: frank-large section + topology row + fleet contract + runbook
  index (Kairic Edge ACTIVE, unsloth RETIRED same-day); frank-medium
  section body (MXFP4 + unquantized bf16 KV, 486,464-token pool)
- LLM index + top-level index: Kairic Edge ACTIVE, unsloth RETIRED,
  system specs entry
This commit is contained in:
Frank committed 2026-09-21 19:16:51 -07:00
1 parent b2a74004df
commit e04f510883
4 files changed
+282 -69

No files matched your search

+53 -50
View File
@@ -12,7 +12,7 @@ merge absorbed the former `vllmScripts` repo, history preserved).
Calibre-Web, Jellyfin, Plex) plus the `frank-medium` LLM service. Calibre-Web, Jellyfin, Plex) plus the `frank-medium` LLM service.
- **Dankclaw** (192.168.0.143) — AI/search/dev/observability stack (SearXNG - **Dankclaw** (192.168.0.143) — AI/search/dev/observability stack (SearXNG
via Gluetun, ComfyUI, OpenWebUI, Hermes, Gitea, Grafana, Prometheus, Loki, via Gluetun, ComfyUI, OpenWebUI, Hermes, Gitea, Grafana, Prometheus, Loki,
Alloy, Pi-hole) plus TWO LLM services: `frank-large` (unsloth llama.cpp prebuilt on Alloy, Pi-hole) plus TWO LLM services: `frank-large` (Kairic Edge runtime on
the gfx1151 iGPU) and `frank-small` (llama.cpp on the RTX 3090). Caddy on the gfx1151 iGPU) and `frank-small` (llama.cpp on the RTX 3090). Caddy on
Dankclaw reverse-proxies both hosts. Dankclaw reverse-proxies both hosts.
- **FrankBook-Pro** (192.168.0.112) — macOS mini running the *arr stack - **FrankBook-Pro** (192.168.0.112) — macOS mini running the *arr stack
@@ -25,7 +25,7 @@ merge absorbed the former `vllmScripts` repo, history preserved).
| Target | Service | Runtime | Model | Port | | Target | Service | Runtime | Model | Port |
|--------|---------|---------|-------|------| |--------|---------|---------|-------|------|
| Dankserver | `frank-medium` | vllm-radiance 0.9.3 (rootless Quadlet, image `localhost/radiance-vllm:0.9.3`, gfx1201) | just1moremodel Qwen3.8-27B-Uncensored-MXFP4-awq (MXFP4/quark W4A8, 19.37 GiB) with the z-lab DFlash2 external drafter (depth 7), 2x Radeon AI PRO R9700 in ONE tensor-parallel process (TP=2 over the R4D one-shot allreduce — no RCCL collective; both cards on CPU root ports at Gen5 x8 since the 2026-09-20 ProArt B850-Creator swap), 262144 ctx over up to 8 conversations, UNQUANTIZED bf16 KV (`KV_DTYPE=auto`, cut 2026-09-21 from the FP8/fp8-KV shape to test whether fp8 KV had been degrading W4A8 output quality; auto-sized 486,464-token pool = 1.86x the window), prefix caching, vision | 7770 | | Dankserver | `frank-medium` | vllm-radiance 0.9.3 (rootless Quadlet, image `localhost/radiance-vllm:0.9.3`, gfx1201) | just1moremodel Qwen3.8-27B-Uncensored-MXFP4-awq (MXFP4/quark W4A8, 19.37 GiB) with the z-lab DFlash2 external drafter (depth 7), 2x Radeon AI PRO R9700 in ONE tensor-parallel process (TP=2 over the R4D one-shot allreduce — no RCCL collective; both cards on CPU root ports at Gen5 x8 since the 2026-09-20 ProArt B850-Creator swap), 262144 ctx over up to 8 conversations, UNQUANTIZED bf16 KV (`KV_DTYPE=auto`, cut 2026-09-21 from the FP8/fp8-KV shape to test whether fp8 KV had been degrading W4A8 output quality; auto-sized 486,464-token pool = 1.86x the window), prefix caching, vision | 7770 |
| Dankclaw | `frank-large` | unsloth llama.cpp b11030 prebuilt (ROCm gfx1151, root systemd unit) | unsloth Qwen3.8-Flash-Next UD-IQ4_XS on the gfx1151 iGPU (Strix Halo LPDDR, 114 GiB GTT), 200000 ctx single stream (1 slot), MTP depth 2 via the explicit `-md` shared-Q8_0 head, text only | 7770 | | Dankclaw | `frank-large` | Kairic Edge (ciru-ai/ROCmFPX v1.2, gfx1151, root systemd unit, built from source) | jcbtc Qwen3.8-27B-IU4-Kairic-Edge (IU4 W4A4, 27B dense, 26 GiB total) on the gfx1151 iGPU (Strix Halo LPDDR, 114 GiB GTT), 262144 ctx single stream (1 slot), MTP depth 4 + n-gram drafting (24/64/64), compatibility mode, text only | 7770 |
| Dankclaw | `frank-small` | mainline llama.cpp master 37b53fd (root systemd unit) | HauhauCS Gemma4-12B-QAT-Uncensored-Balanced Q4_K_M (BF16 mmproj + MTP assistant sidecar, `draft-mtp,ngram-mod`) on the RTX 3090, 1048576 pool / 4 slots of 262,144, q8_0 KV, the fleet's fastest vision endpoint | 7771 | | Dankclaw | `frank-small` | mainline llama.cpp master 37b53fd (root systemd unit) | HauhauCS Gemma4-12B-QAT-Uncensored-Balanced Q4_K_M (BF16 mmproj + MTP assistant sidecar, `draft-mtp,ngram-mod`) on the RTX 3090, 1048576 pool / 4 slots of 262,144, q8_0 KV, the fleet's fastest vision endpoint | 7771 |
Retired endpoints (`frank-npu`, and every prior runtime) are in Retired endpoints (`frank-npu`, and every prior runtime) are in
@@ -265,53 +265,55 @@ a role pointing at a provider the file does not define fails at call time. As
of 2026-09-20 both `frank-small` and `frank-medium` accept images of 2026-09-20 both `frank-small` and `frank-medium` accept images
(`input: [text, image]`) — frank-medium's checkpoint serves vision through the (`input: [text, image]`) — frank-medium's checkpoint serves vision through the
Gemma4 merge path with no separate mmproj, verified on held-out synthetic Gemma4 merge path with no separate mmproj, verified on held-out synthetic
images; `frank-large` remains text-only because its unsloth deployment loads no images; `frank-large` remains text-only because its Kairic Edge deployment loads no
vision projector (the F16 mmproj is on disk, one env flip away). Note also that vision projector (the model has no mmproj). Note also that
the reasoning channel differs by runtime: llama.cpp endpoints emit the reasoning channel differs by runtime: llama.cpp endpoints emit
`reasoning_content`, vLLM emits `reasoning`. `reasoning_content`, vLLM emits `reasoning`.
There is **no audio** There is **no audio**
input anywhere in the fleet: that capability left with the FLM NPU endpoint on input anywhere in the fleet: that capability left with the FLM NPU endpoint on
2026-09-11. 2026-09-11.
### frank-large — unsloth llama.cpp Qwen3.8-Flash-Next UD-IQ4_XS (Dankclaw, ACTIVE) ### frank-large — Kairic Edge Qwen3.8-27B IU4 (W4A4) (Dankclaw, ACTIVE)
The unsloth llama.cpp prebuilt `app-b11030-mix-5ff778e` (ROCm gfx1151, The Kairic Edge runtime (ciru-ai/ROCmFPX, branch
`/home/dank/GitPackages/unsloth-llama-b11030/`, bundles its own ROCm runtime — `kairic-edge-qwen38-27b-v1.2`, commit `205a3e5`) as a **root systemd unit**
no host SDK gate, no venv) as a **root systemd unit** (`scripts/ (`scripts/frank-large.service`, `User=dank`), built from source
frank-large.service`, `User=dank`), serving (`scripts/build-kairic-edge-gfx1151.sh`, TheRock 7.15.0a20260718 toolchain,
`unsloth/Qwen3.8-Flash-Next-GGUF:UD-IQ4_XS` (87.3 GiB main GGUF as three HF Composable Kernel `fdf4bb7f` + the gfx1151-iu4 patch), serving
split parts, loaded natively as a split via `-m` on part 1, + a 2.6 GiB MTP head, all sha256-verified) on port `jcbtc/Qwen3.8-27B-IU4-Kairic-Edge` (27B dense, IU4 W4A4, 15.5 GiB main
7770 from the gfx1151 iGPU. One stream, 200,000 ctx (`PARALLEL_SLOTS=1`, GGUF + 7.99 GiB FFN sidecar + 1.88 GiB GDN sidecar + 0.70 GiB GDN-Output
operator's requested shape; the trained window is 262,144), MTP depth 2 sidecar, all sha256-verified) on port 7770 from the gfx1151 iGPU. One
(`SPEC_DRAFT_N_MAX=2`, the model card's default), reasoning extracted to stream, full 262,144 ctx (the model's native window, `PARALLEL_SLOTS=1`),
`reasoning_content`, and **no vision projector** (the F16 mmproj is on disk, MTP depth 4 (`SPEC_DRAFT_N_MAX=4`) + n-gram drafting (24/64/64), reasoning
`ENABLE_VISION=0` — one env flip to enable). It replaced the CIRU v4.4.1 extracted to `reasoning_content` (compatibility mode — the harness needs
Orca runtime, which had replaced halogen-flash-server. sampling, tools and a reasoning budget, which fast-greedy rejects), and
**no vision projector**. It replaced the unsloth llama.cpp prebuilt
(b11030, Qwen3.8-Flash-Next UD-IQ4_XS, 125B MoE), which had replaced the
CIRU v4.4.1 Orca runtime.
The runtime is the first with an MTP graph for the qwen4exp architecture The spec method is native MTP depth 4 + n-gram drafting. DFlash is NOT
(stock ggml-org mainline has none), so the unsloth prebuilt is the available for this model (no `DRAFT_DFLASH` spec type in the Kairic Edge
llama.cpp-compatible choice. The MTP head is loaded via an **explicit runtime). The three PromptForge sidecars (FFN, GDN, GDN-Output) are wired
`-md`**: sidecar auto-discovery does not search the `mtp/` subfolder, and via the `PROMPTFORGE_*` env block (the certified runner's exact env). The
without it `--spec-type draft-mtp` silently runs at the main model's speed. serve script (`scripts/serve-frank-large.sh`) validates binary → main GGUF →
The serve script (`scripts/serve-frank-large.sh`) validates binary → main 3 sidecars and exits with a pointer message if any is missing, then `exec`s
GGUF → MTP head and exits with a pointer message if any is missing, then `llama-server` with `--jinja --alias frank-large --chat-template-kwargs
`exec`s `llama-server` with `--jinja --alias frank-large --chat-template- '{"preserve_thinking":true}'` (Qwen3.8's template needs this to carry
kwargs '{"preserve_thinking":true}'` (Qwen3.8's template needs this to thinking blocks across turns; a request-level value still wins).
carry thinking blocks across turns; a request-level value still wins).
The iGPU addresses **114 GiB** (the GTT aperture over the shared LPDDR, The iGPU addresses **114 GiB** (the GTT aperture over the shared LPDDR,
`gtt_total` in `/sys/class/drm/card1/device/`; `rocm-smi`'s 2 GiB "dedicated" `gtt_total` in `/sys/class/drm/card1/device/`; `rocm-smi`'s 2 GiB "dedicated"
is not the budget). The 87.3 GiB model is mmap'd in with `-ngl 999`; budget is not the budget). The 27B dense model (26 GiB total) is mmap'd in with
at 200k ≈ 100 GiB (weights + MTP head + KV + buffers), leaving ~14 GiB of `-ngl 999`; budget at 262k ≈ 30 GiB (weights + KV + buffers), leaving ~84
aperture headroom. The n-gram embedding (PLE) is inside the GGUF — no GiB of aperture headroom. The 8 GiB prompt-cache budget
external PLE payload or pager, unlike the CIRU Orca packaging. (`CACHE_RAM=8192`) is the Kairic Edge qualified config.
Fetch: `scripts/download-frank-large-unsloth.sh` (resumable, each part Fetch: `scripts/download-frank-large-kairic.sh` (resumable, each file
verified against its LFS sha256 fetched live from the Hub tree API, then the verified against its declared byte count + sha256; `--verify-only` re-checks).
assembled GGUF against `SHA256SUMS`; `--verify-only` re-checks).
Runbook: `serverAppConfigs-docs/LLM/frank-large-unsloth-qwen38-flash-next.md`. Runbook: `serverAppConfigs-docs/LLM/frank-large-kairic-edge-qwen38-27b.md`.
Rollback: [[frank-large-ciru-orca]] (payload and runtime intact on disk). Rollback: [[frank-large-unsloth-qwen38-flash-next]] (payload and runtime
intact on disk).
### frank-small — llama.cpp on the RTX 3090 (Dankclaw, ACTIVE) ### frank-small — llama.cpp on the RTX 3090 (Dankclaw, ACTIVE)
@@ -343,19 +345,19 @@ Rollback: [[frank-small-qwen38-gsq-rco]].
vllm-radiance **0.9.3** (`localhost/radiance-vllm:0.9.3`, rootless **Quadlet** vllm-radiance **0.9.3** (`localhost/radiance-vllm:0.9.3`, rootless **Quadlet**
`dankserver/frank-medium/quadlet/frank-medium.container`) serving `dankserver/frank-medium/quadlet/frank-medium.container`) serving
`orcarouter/Qwen3.8-27B-Uncensored-FP8` (FP8 E4M3 block-wise 128×128, dynamic `just1moremodel/Qwen3.8-27B-Uncensored-MXFP4-awq` (MXFP4/quark W4A8, 19.37
activation quant, 30.9 GB / 7 shards) with the **z-lab DFlash2 external GiB) with the **z-lab DFlash2 external drafter** (`num_speculative_tokens: 7`,
drafter** (`num_speculative_tokens: 7`, live mean accept 4.24/7) in **one live mean accept 4.24/7) in **one tensor-parallel process across both
tensor-parallel process across both R9700s** (`--tensor-parallel-size 2`). R9700s** (`--tensor-parallel-size 2`). 262,144 ctx, `--max-num-seqs 8`, chunk
262,144 ctx, `--max-num-seqs 8`, chunk 8192, fp8 KV, prefix caching, GPU fill 8192, **unquantized bf16 KV** (`KV_DTYPE=auto`, cut 2026-09-21 from the
0.98, **no KV-memory pin** — the pool auto-sized to 384,238 tokens (1.47× the FP8/fp8-KV shape to test whether fp8 KV had been degrading W4A8 output
full window; the DFlash2 drafter's 2.1 GiB costs the pool vs MTP's 461,540). quality), prefix caching, GPU fill 0.98, **no KV-memory pin** — the pool
DFlash2 was A/B tested against MTP self-speculation on this checkpoint and auto-sized to 486,464 tokens (1.86× the full window). DFlash2 was A/B tested
wins on decode (100.0 vs 85.9 t/s) — see the runbook. Tools via `qwen3_coder`, against MTP self-speculation on this checkpoint and wins on decode (100.0 vs
reasoning via `qwen3` (the field is `reasoning`, not llama.cpp's 85.9 t/s) — see the runbook. Tools via `qwen3_coder`, reasoning via `qwen3`
`reasoning_content`), vision through the Gemma4 merge path, chat template (the field is `reasoning`, not llama.cpp's `reasoning_content`), vision through
Qwen-Sharp v22.4.0 (froggeric, repo-tracked at `dankserver/frank-medium/`, the Gemma4 merge path, chat template Qwen-Sharp v22.4.0 (froggeric,
terse system prompt by default). repo-tracked at `dankserver/frank-medium/`, terse system prompt by default).
**The entrypoint is quantization-aware.** `radiance-entrypoint.sh` reads **The entrypoint is quantization-aware.** `radiance-entrypoint.sh` reads
`quantization_config.quant_method` from the checkpoint's `config.json` and `quantization_config.quant_method` from the checkpoint's `config.json` and
@@ -752,7 +754,7 @@ Active:
| Service | Runbook | | Service | Runbook |
|---------|---------| |---------|---------|
| frank-large (unsloth llama.cpp Qwen3.8-Flash-Next UD-IQ4_XS, Dankclaw) | `serverAppConfigs-docs/LLM/frank-large-unsloth-qwen38-flash-next.md` | | frank-large (Kairic Edge Qwen3.8-27B IU4 W4A4, Dankclaw) | `serverAppConfigs-docs/LLM/frank-large-kairic-edge-qwen38-27b.md` |
| frank-small (llama.cpp Gemma4-12B QAT, Dankclaw) | `serverAppConfigs-docs/LLM/frank-small-gemma4-12b.md` | | frank-small (llama.cpp Gemma4-12B QAT, Dankclaw) | `serverAppConfigs-docs/LLM/frank-small-gemma4-12b.md` |
| frank-medium (radiance TP=2 + MTP, Dankserver) | `serverAppConfigs-docs/LLM/frank-medium-radiance-mxfp4.md` | | frank-medium (radiance TP=2 + MTP, Dankserver) | `serverAppConfigs-docs/LLM/frank-medium-radiance-mxfp4.md` |
| frank-medium model swap (toolchain + process) | `serverAppConfigs-docs/LLM/frank-medium-model-swap.md` | | frank-medium model swap (toolchain + process) | `serverAppConfigs-docs/LLM/frank-medium-model-swap.md` |
@@ -767,6 +769,7 @@ Retired (rollback targets and history):
| ik_llama.cpp Qwen3.8-Flash-Next-Uncensored i1-Q4_K_M (`frank-large`) | Dankclaw | 2026-09-15 → 09-16 | `frank-large-ik-uncensored.md` | | ik_llama.cpp Qwen3.8-Flash-Next-Uncensored i1-Q4_K_M (`frank-large`) | Dankclaw | 2026-09-15 → 09-16 | `frank-large-ik-uncensored.md` |
| halogen-flash-server Qwen3.8-Flash-Next w4b (`frank-large`) | Dankclaw | 2026-09-16 → 09-19 | `halogen-flash-server.md` | | halogen-flash-server Qwen3.8-Flash-Next w4b (`frank-large`) | Dankclaw | 2026-09-16 → 09-19 | `halogen-flash-server.md` |
| CIRU v4.4.1 Orca Qwen3.8-Flash (`frank-large`) | Dankclaw | 2026-09-19 → 09-21 | `frank-large-ciru-orca.md` | | CIRU v4.4.1 Orca Qwen3.8-Flash (`frank-large`) | Dankclaw | 2026-09-19 → 09-21 | `frank-large-ciru-orca.md` |
| unsloth llama.cpp b11030 Qwen3.8-Flash-Next UD-IQ4_XS (`frank-large`) | Dankclaw | 2026-09-21 (same-day swap) | `frank-large-unsloth-qwen38-flash-next.md` |
| ISTA-DASLab Qwen3.8-27B-GSQ-RCO IQ3_S (`frank-small`) | Dankclaw | 2026-09-16 → 09-17 | `frank-small-qwen38-gsq-rco.md` | | ISTA-DASLab Qwen3.8-27B-GSQ-RCO IQ3_S (`frank-small`) | Dankclaw | 2026-09-16 → 09-17 | `frank-small-qwen38-gsq-rco.md` |
| vLLM Gemma4-12B w4a16 (`frank-small`) | Dankclaw | 2026-09-19 (same-day revert) | `frank-small-vllm-gemma4.md` | | vLLM Gemma4-12B w4a16 (`frank-small`) | Dankclaw | 2026-09-19 (same-day revert) | `frank-small-vllm-gemma4.md` |
| agentionai ROCmFP4-FAST imatrix | Dankclaw | 2026-08-29 → 08-30 | `agentionai-fast-imatrix.md` | | agentionai ROCmFP4-FAST imatrix | Dankclaw | 2026-08-29 → 08-30 | `agentionai-fast-imatrix.md` |
@@ -0,0 +1,195 @@
---
type: reference
title: Kairic Edge Qwen3.8-27B IU4 (W4A4) on Dankclaw (frank-large)
description: The active frank-large runbook — the Kairic Edge runtime (ciru-ai/ROCmFPX, branch kairic-edge-qwen38-27b-v1.2, commit 205a3e5) serving jcbtc/Qwen3.8-27B-IU4-Kairic-Edge (27B dense, IU4 W4A4) on the Dankclaw Strix Halo iGPU: the source-built runtime, the full-window/one-stream shape, the MTP depth 4 + n-gram spec method, the three PromptForge sidecars, the compatibility mode, the payload, the client contract, and the failure modes worth knowing.
tags:
- llm
- kairic-edge
- rocmfpx
- dankclaw
- frank-large
- strix-halo
- gfx1151
- iu4
- w4a4
- rocm
- mtp
- promptforge
timestamp: 2026-09-21
---
# Kairic Edge Qwen3.8-27B IU4 (W4A4) on Dankclaw (frank-large)
> **ACTIVE since 2026-09-21.** It replaced the unsloth llama.cpp prebuilt
> (b11030, Qwen3.8-Flash-Next UD-IQ4_XS, 125B MoE — see
> [[frank-large-unsloth-qwen38-flash-next]], the current rollback target),
> which had replaced the CIRU v4.4.1 Orca runtime (see
> [[frank-large-ciru-orca]]). Deployed as a **root systemd unit**
> (`scripts/frank-large.service`, `User=dank`), port 7770, on the same
> gfx1151 iGPU. The RTX 3090 it does not touch belongs to
> [[frank-small-gemma4-12b]].
The model is `jcbtc/Qwen3.8-27B-IU4-Kairic-Edge` — a **27B dense** Qwen3.8
at **IU4** (W4A4, integer-weights / integer-activations). It is a
fundamentally different architecture from the 125B MoE it replaces: no
PLE, no MoE experts, no n-gram embedding. The payload is four files: the
15.5 GiB main GGUF plus three `.pfs` sidecars (FFN 7.99 GiB, GDN 1.88
GiB, GDN-Output 0.70 GiB) — the PromptForge IU4 weight shards the Kairic
Edge runtime loads alongside the main GGUF.
The runtime is the **Kairic Edge** build of `ciru-ai/ROCmFPX` (branch
`kairic-edge-qwen38-27b-v1.2`, commit `205a3e5`), built from source
(`scripts/build-kairic-edge-gfx1151.sh`). It is a llama.cpp build with the
PromptForge sidecar env block and the `--kairic-edge` qualified serving
path.
## Why this swap
- The operator asked for the Kairic Edge 27B model at **one conversation,
full context (262,144)** (2026-09-21).
- The Kairic Edge runtime is the qualified IU4 (W4A4) serving path — no
standard llama.cpp quant, no PLE sidecar payload, no QSA hotfix: one
GGUF, three sidecars, done.
- The spec method is native MTP depth 4 + n-gram drafting (24/64/64).
DFlash is NOT available for this model (no `DRAFT_DFLASH` spec type in
the Kairic Edge runtime).
## Shape
One root unit, one process, one published port:
| half | port | reachable |
|---|---|---|
| llama-server (OpenAI front-end + engine, single process) | 7770 | published as host **7770** |
## Runtime
- **Source build**: `scripts/build-kairic-edge-gfx1151.sh` (TheRock
7.15.0a20260718 toolchain, AMD clang 23.0.0, HIP 7.15.0, GCC 13.3.0,
CMake 4.4.2, Ninja 1.13.0). Output at
`/home/dank/GitPackages/ROCmFPX-kairic/build-kairic/bin/llama-server`.
- **Composable Kernel**: `fdf4bb7fcc984811cef48ce817d89aac064b984a` +
`patches/composable-kernel-gfx1151-iu4.patch` (SHA-256
`ea57bca3793d35d884fc156b6c0bc33d8e672e3bb49f66ff67338503029d6af5`).
The CK `config.h` is generated by CMake's `configure_file` (line 334 of
CK's CMakeLists.txt) — it is untracked, so a `git clean` removes it.
- **GPU target**: `gfx1151` (Strix Halo). The build takes ~4 minutes
(`JOBS=$(nproc)`).
- **v1.2 changes**: Exact 65-row n-gram verification switched to the compact
authoritative path by default; the native IU4 M65 verifier is retained
only for diagnostics.
## Spec method
- **Native MTP depth 4** (`--spec-type draft-mtp --spec-draft-n-max 4`):
the model's MTP layers draft 4 tokens per step.
- **N-gram drafting** (24/64/64): the `ngram-mod` matcher chains behind
the MTP drafter (the `--spec-type draft-mtp` value builds both).
- **DFlash is NOT available**: the Kairic Edge runtime's spec-type
constants are `DRAFT_EAGLE`, `DRAFT_MTP`, `DRAFT_SIMPLE`,
`NGRAM_CACHE`, `NGRAM_MAP_K`, `NGRAM_MOD`, `NGRAM_SIMPLE`, `NONE` — no
`DRAFT_DFLASH`. The z-lab DFlash2-FP8 drafter (frank-medium's drafter)
cannot be used.
- **Draft device**: `--spec-draft-device ROCm0 --spec-draft-ngl 999`
(the drafter runs on the iGPU, all layers).
## Compatibility mode
The Kairic Edge runtime has two modes:
- **Fast-greedy** (`KAIRIC_EDGE_COMPATIBILITY_MODE=0`, the runner's
default): rejects request features that require full target logits,
including sampling, penalties, probabilities, grammar-constrained tool
calls, logit bias, LoRA, and a reasoning budget.
- **Compatibility** (`KAIRIC_EDGE_COMPATIBILITY_MODE=1`): enables all of
the above (9.7% slower per the build guide).
The harness (OMP) needs sampling, tools and a reasoning budget, so
`COMPATIBILITY_MODE=1` is the deployed shape. In compatibility mode:
`LLAMA_TARGET_GREEDY_ARGMAX_FASTPATH=0` and
`PROMPTFORGE_OUTPUT_K8_STRICT_GREEDY=0`.
**Known gotcha**: the greedy-argmax fastpath (fast mode) rejects
non-greedy requests and reasoning budgets. Re-test chat before production
if you flip to fast mode.
## PromptForge sidecars
The three `.pfs` sidecars are wired via the `PROMPTFORGE_*` env block
(the certified runner's exact env):
| sidecar | env var | size |
|---|---|---|
| FFN | `PROMPTFORGE_IU4_SIDECAR` / `PROMPTFORGE_SIDECAR` | 7.99 GiB |
| GDN | `PROMPTFORGE_GDN_SIDECAR` | 1.88 GiB |
| GDN-Output | `PROMPTFORGE_GDN_OUTPUT_SIDECAR` | 0.70 GiB |
The serve script (`scripts/serve-frank-large.sh`) validates binary → main
GGUF → 3 sidecars and exits with a pointer message if any is missing, then
`exec`s `llama-server` with `--jinja --alias frank-large
--chat-template-kwargs '{"preserve_thinking":true}'` (Qwen3.8's template
needs this to carry thinking blocks across turns; a request-level value
still wins).
## Memory budget
The iGPU addresses **114 GiB** (the GTT aperture over the shared LPDDR,
`gtt_total` in `/sys/class/drm/card1/device/`; `rocm-smi`'s 2 GiB
"dedicated" is not the budget). The 27B dense model (26 GiB total) is
mmap'd in with `-ngl 999`; budget at 262k ≈ 30 GiB (weights + KV +
buffers), leaving ~84 GiB of aperture headroom. The 8 GiB prompt-cache
budget (`CACHE_RAM=8192`) is the Kairic Edge qualified config. The model
is 27B dense (not DeltaNet), so the fleet's 12.8 GiB DeltaNet `CACHE_RAM`
floor does not apply.
## Payload
`scripts/download-frank-large-kairic.sh` (resumable, each file verified
against its declared byte count + sha256; `--verify-only` re-checks):
| file | size | sha256 |
|---|---|---|
| `Qwen3.8-27B-IU4-Kairic-Edge.gguf` | 16,617,792,672 | `360caf73…` |
| `Qwen3.8-27B-Kairic-IU4-FFN.pfs` | 8,576,856,064 | `adcbb90a…` |
| `Qwen3.8-27B-Kairic-IU4-GDN.pfs` | 2,019,569,664 | `82f93131…` |
| `Qwen3.8-27B-Kairic-IU4-GDN-Output.pfs` | 756,953,088 | `3b07e7b1…` |
## Client contract
- **Port**: 7770 (the same port and alias the unsloth predecessor served).
- **Alias**: `frank-large`.
- **Context**: 262,144 (the model's native window), 1 slot.
- **Reasoning**: enabled (`--reasoning auto --reasoning-format deepseek
--reasoning-budget -1`), extracted to `reasoning_content`.
- **Vision**: text-only (the model has no vision projector). The fleet's
image path is [[frank-small-gemma4-12b]] either way.
- **Reasoning effort**: the Qwen3.8 template gates `reasoning_effort` to
{xhigh, medium, low} — the harness folds its levels onto that set in
`models.yml` (`reasoningEffortMap`).
## Measured performance
10-question conversation (2026-09-21, post-deploy): **23.99s total, 530
tokens, 22.1 t/s average**. Per-question: 1.05–3.57s, 16.9–29.5 t/s. The
MTP depth 4 + n-gram spec method is working (draft acceptance logged, both
`ngram-mod` and `draft-mtp` active in the journal).
## Failure modes worth knowing
- **CK `config.h` is untracked**: a `git clean` in the CK checkout removes
it, and the next build fails. Re-run the build script (it re-checks-out
the CK commit and re-applies the patch).
- **Fast-greedy mode rejects the harness**: if you flip to
`COMPATIBILITY_MODE=0`, the harness's sampling/tools/reasoning-budget
requests are rejected. Re-test chat before production.
- **The `charlie12345` fork is NOT the Kairic Edge repo**: the local
clone at `/home/dank/GitPackages/ROCmFPX` is the `charlie12345/ROCmFPX`
fork (no kairic branch). The Kairic Edge build uses the `ciru` remote
(`https://github.com/ciru-ai/ROCmFPX.git`), branch
`kairic-edge-qwen38-27b-v1.2`, commit `205a3e5`, in the worktree at
`/home/dank/GitPackages/ROCmFPX-kairic/`.
## Rollback
[[frank-large-unsloth-qwen38-flash-next]] — the unsloth prebuilt payload
and runtime are intact on disk.
+21 -13
View File
@@ -4,10 +4,11 @@ Documentation for the LLM inference fleet on the two hosts (2026-09-21):
**vllm-radiance on Dankserver** serving frank-medium as ONE tensor-parallel **vllm-radiance on Dankserver** serving frank-medium as ONE tensor-parallel
process across both Radeon AI PRO R9700 cards (just1moremodel process across both Radeon AI PRO R9700 cards (just1moremodel
Qwen3.8-27B-Uncensored-MXFP4 + the z-lab DFlash2 drafter, bf16 KV, TP=2 over the Qwen3.8-27B-Uncensored-MXFP4 + the z-lab DFlash2 drafter, bf16 KV, TP=2 over the
R4D one-shot allreduce), and TWO endpoints on Dankclaw — the unsloth R4D one-shot allreduce), and TWO endpoints on Dankclaw — the Kairic Edge
llama.cpp prebuilt (frank-large, Qwen3.8-Flash-Next UD-IQ4_XS on the gfx1151 runtime (frank-large, ciru-ai/ROCmFPX v1.2, jcbtc Qwen3.8-27B-IU4-Kairic-Edge
iGPU, port 7770) and mainline llama.cpp (frank-small, HauhauCS Gemma4-12B QAT IU4 W4A4 on the gfx1151 iGPU, port 7770) and mainline llama.cpp (frank-small,
Q4_K_M with MTP and vision on the RTX 3090, port 7771). HauhauCS Gemma4-12B QAT Q4_K_M with MTP and vision on the RTX 3090, port
7771).
> 2026-08-22: the former `vllmScripts` repository is merged into the > 2026-08-22: the former `vllmScripts` repository is merged into the
> serverAppConfigs repository. This knowledge base moved from the old repo's > serverAppConfigs repository. This knowledge base moved from the old repo's
@@ -31,10 +32,10 @@ ONE process on both cards, 262144 ctx, up to 8 seqs]
subgraph Dankclaw[AMD Strix Halo - Ubuntu 26.04] subgraph Dankclaw[AMD Strix Halo - Ubuntu 26.04]
E2[RTX 3090 (PCIe x4 dock) + E2[RTX 3090 (PCIe x4 dock) +
gfx1151 iGPU 114 GiB GTT] gfx1151 iGPU 114 GiB GTT]
E[unsloth llama.cpp b11030 (ROCm gfx1151) E[Kairic Edge (ciru-ai/ROCmFPX v1.2, gfx1151)
frank-large, port 7770] frank-large, port 7770]
F[Qwen3.8-Flash-Next UD-IQ4_XS F[Qwen3.8-27B-IU4-Kairic-Edge (IU4 W4A4)
200000 ctx / 1 slot, MTP depth 2] 262144 ctx / 1 slot, MTP depth 4 + n-gram]
G[mainline llama.cpp 37b53fd G[mainline llama.cpp 37b53fd
frank-small, port 7771] frank-small, port 7771]
H[Gemma4-12B QAT Q4_K_M H[Gemma4-12B QAT Q4_K_M
@@ -95,11 +96,18 @@ frank-small, port 7771]
(bs1/bs3/bs4/bs6, 8k–700k KV) on Dankserver RTX 3090 (bs1/bs3/bs4/bs6, 8k–700k KV) on Dankserver RTX 3090
- [[deployment]] — deploy and update process for both servers - [[deployment]] — deploy and update process for both servers
- [[frank-redo-2026-08-17]] — the 2026-08-17 topology change - [[frank-redo-2026-08-17]] — the 2026-08-17 topology change
- [[frank-large-unsloth-qwen38-flash-next]] — ACTIVE frank-large runbook - [[frank-large-kairic-edge-qwen38-27b]] — ACTIVE frank-large runbook
since 2026-09-21 (root systemd unit, port 7770): the unsloth llama.cpp since 2026-09-21 (root systemd unit, port 7770): the Kairic Edge runtime
prebuilt (b11030-mix-5ff778e, ROCm gfx1151) serving (ciru-ai/ROCmFPX v1.2, built from source) serving
unsloth/Qwen3.8-Flash-Next-GGUF:UD-IQ4_XS on the gfx1151 iGPU — one jcbtc/Qwen3.8-27B-IU4-Kairic-Edge (IU4 W4A4, 27B dense) on the gfx1151
200,000-token conversation, MTP depth 2 via the explicit -md shared-Q8_0 iGPU — one full 262,144-token conversation, MTP depth 4 + n-gram drafting,
the three PromptForge sidecars, compatibility mode, the 114 GiB GTT memory
model, client contract, troubleshooting
- [[frank-large-unsloth-qwen38-flash-next]] — RETIRED 2026-09-21 (same-day
swap, replaced by [[frank-large-kairic-edge-qwen38-27b]]; rollback target):
the unsloth llama.cpp prebuilt (b11030-mix-5ff778e, ROCm gfx1151) serving
unsloth/Qwen3.8-Flash-Next-GGUF:UD-IQ4_XS (125B MoE) on the gfx1151 iGPU —
one 200,000-token conversation, MTP depth 2 via the explicit -md shared-Q8_0
head, the 114 GiB GTT memory model, client contract, troubleshooting head, the 114 GiB GTT memory model, client contract, troubleshooting
- [[frank-large-ciru-orca]] — RETIRED 2026-09-21 (replaced by - [[frank-large-ciru-orca]] — RETIRED 2026-09-21 (replaced by
[[frank-large-unsloth-qwen38-flash-next]]; rollback target): the CIRU [[frank-large-unsloth-qwen38-flash-next]]; rollback target): the CIRU
@@ -167,7 +175,7 @@ frank-small, port 7771]
(deployed and reverted 2026-08-22) (deployed and reverted 2026-08-22)
- [[Dankserver System Specs]] — the 2x R9700 box (frank-medium) - [[Dankserver System Specs]] — the 2x R9700 box (frank-medium)
- [[Dankclaw System Specs]] — the Strix Halo gfx1151 box (frank-large on the - [[Dankclaw System Specs]] — the Strix Halo gfx1151 box (frank-large on the
unsloth llama.cpp prebuilt since 2026-09-21, frank-small on the RTX 3090) Kairic Edge runtime since 2026-09-21, frank-small on the RTX 3090)
- [[frank-npu]] — RETIRED 2026-09-11: the FLM NPU sight+sound endpoint - [[frank-npu]] — RETIRED 2026-09-11: the FLM NPU sight+sound endpoint
on Dankclaw (Gemma4 E4B vision+audio pack, XDNA2, port 7771), kept as on Dankclaw (Gemma4 E4B vision+audio pack, XDNA2, port 7771), kept as
the retirement record — the IOMMU/SVA err=-19 root cause and where the retirement record — the IOMMU/SVA err=-19 root cause and where
+13 -6
View File
@@ -147,12 +147,19 @@ The LLM inference fleet on the two hosts. Full index:
agentionai/Qwen3.8-Flash-Next-ROCmFP4-FAST-imatrix (87.06 GiB, agentionai/Qwen3.8-Flash-Next-ROCmFP4-FAST-imatrix (87.06 GiB,
Q4_0_ROCMFP4_FAST) + own MTP draft, build-qwen38 (retired 2026-08-30; Q4_0_ROCMFP4_FAST) + own MTP draft, build-qwen38 (retired 2026-08-30;
rollback record) rollback record)
- [[frank-large-unsloth-qwen38-flash-next]] — the ACTIVE frank-large runbook - [[frank-large-kairic-edge-qwen38-27b]] — the ACTIVE frank-large runbook
since 2026-09-21 (root systemd unit, port 7770): the unsloth llama.cpp since 2026-09-21 (root systemd unit, port 7770): the Kairic Edge
prebuilt (b11030-mix-5ff778e, ROCm gfx1151) serving runtime (ciru-ai/ROCmFPX kairic-edge-qwen38-27b-v1.2, TheRock 7.15.0,
unsloth/Qwen3.8-Flash-Next-GGUF:UD-IQ4_XS on the gfx1151 iGPU — one Composable Kernel) serving jcbtc/Qwen3.8-27B-IU4-Kairic-Edge (a 27B
200,000-token conversation, MTP depth 2 via the explicit -md shared-Q8_0 dense model, main GGUF + FFN/GDN/GDN-Output .pfs sidecars) on the gfx1151
head, the 114 GiB GTT memory model, client contract iGPU — one 262,144-token conversation, native MTP depth 4 + n-gram
drafting, compatibility mode, the 114 GiB GTT memory model, client contract
- [[frank-large-unsloth-qwen38-flash-next]] — RETIRED 2026-09-21 (replaced by
[[frank-large-kairic-edge-qwen38-27b]]; same-day swap): the unsloth
llama.cpp prebuilt (b11030-mix-5ff778e, ROCm gfx1151) serving
unsloth/Qwen3.8-Flash-Next-GGUF:UD-IQ4_XS (a 125B MoE / 6B active) on the
gfx1151 iGPU — one 200,000-token conversation, MTP depth 2 via the
explicit -md shared-Q8_0 head, the 114 GiB GTT memory model, client contract
- [[frank-large-ciru-orca]] — RETIRED 2026-09-21 (replaced by - [[frank-large-ciru-orca]] — RETIRED 2026-09-21 (replaced by
[[frank-large-unsloth-qwen38-flash-next]]; rollback target, 2026-09-19 → [[frank-large-unsloth-qwen38-flash-next]]; rollback target, 2026-09-19 →
09-21): the CIRU v4.4.1 runtime (private host build, QSA hotfix) serving 09-21): the CIRU v4.4.1 runtime (private host build, QSA hotfix) serving