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:
1 parent
b2a74004df
commit
e04f510883
4 files changed
+282
-69
No files matched your search
@@ -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.
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in new issue
Block a user