frank-default-small: use split-mode none on single-GPU dankserver

--split-mode graph requires >= 2 devices in ik_llama.cpp and errors hard
at model load on a single RTX 3090 ("It is not possible to use split mode
'graph' with less than 2 devices"), looping the service. Set SPLIT_MODE
=none (the default), which works with the --override-tensor CPU expert
offload. KB updated with the two-device requirement so we do not assume
graph degrades gracefully on one GPU.
This commit is contained in:
Frank
2026-08-26 03:06:30 -07:00
parent b8de25d70b
commit e2085f1f7d
5 changed files with 25 additions and 23 deletions
+16 -13
View File
@@ -1,7 +1,7 @@
---
type: reference
title: ik_llama.cpp on Dankserver (Ornith Q6_K)
description: ikawrakow/ik_llama.cpp replaces upstream llama.cpp for frank-default-small on the RTX 3090. q8_KV KV cache with Hadamard, split-mode graph, ngram-mod canonical args, and explicit CPU-expert offload. Includes the mandatory CUDA/IQK FA_ALL_QUANTS build flags.
description: ikawrakow/ik_llama.cpp replaces upstream llama.cpp for frank-default-small on the RTX 3090. q8_KV KV cache with Hadamard, split-mode none (graph requires >=2 GPUs), ngram-mod canonical args, and explicit CPU-expert offload. Includes the mandatory CUDA/IQK FA_ALL_QUANTS build flags.
tags:
- ikllama
- llamacpp
@@ -116,19 +116,22 @@ the serve script; the env file holds all tunables.
These keep the 163840-slot / 491520-pool context while roughly halving KV
cache RAM vs f16.
### Split-mode graph
### Split mode: none (single GPU)
- `SPLIT_MODE=graph` → `--split-mode graph`. On a single 3090 this is a
no-op for correctness but keeps the graph scheduled across the compute
buffers. ik recommends it for MoE when more than one device is present;
here it is retained per operator preference alongside the explicit
`--override-tensor` expert pins.
- `SPLIT_MODE=none` → `--split-mode none` (the default). Dankserver has a
single RTX 3090 yet ik_llama rejects `--split-mode graph` on a box with a
single device:
> **Caveat:** the ik_llama README warns that `--split-mode graph` combined
> with partial GPU offload (`--cpu-moe` / `--n-cpu-moe` / `--override-tensor`)
> can rarely produce incoherent output. The documented mitigation is
> `-cuda graphs=0`. Smoke-test after every load; if a response is gibberish,
> add `-cuda graphs=0` to the serve line and re-test.
> `llama error loading model: It is not possible to use split mode 'graph'
> with less than 2 devices`
So `graph` is **not** a harmless no-op on one GPU — it is a hard load
error (this bit us on the first deploy and loop the service). It also still
works with the `--override-tensor` expert pins.
> **Lesson.** ik_llama `--split-mode graph` requires ≥2 devices. On a
> single-GPU host you must use `none` (or `layer`, which also needs >1).
> Do not assume `--split-mode graph` degrades gracefully on one GPU.
### Expert offload (MoE on CPU)
@@ -171,7 +174,7 @@ Several ik_llama knobs matter for a CPU-MoE offload host:
| flag | meaning | our use |
|------|---------|---------|
| `--split-mode graph` | split tensors+graph across devices; strong for MoE | retained (single-GPU no-op) |
| `--split-mode graph` | split tensors+graph across devices; strong for MoE; **requires 2+ devices** | single 3090 → use `none`
| `-ooae` / `--offload-only-active-experts` | default ON: copy **only active** experts RAM→VRAM | keep ON (huge for A3B: few experts active) |
| `-grt q8_0` | reduce type for inter-GPU data exchange | not needed (single GPU) |
| `--fit` | auto-offload to fit VRAM | conflicts with `--override-tensor`; do not use together (runtime error) |
+1 -2
View File
@@ -58,8 +58,7 @@ MTP draft + Turbo4 V cache, 262K ctx / 1 slot]
Dankserver (frank-default-small, active 2026-08-24)
- [[ikllama-ornith-dankserver]] — the ik_llama.cpp runtime for
frank-default-small (2026-08-26): q8_KV + Hadamard KV cache,
split-mode graph, canonical ngram-mod args, mandatory FA_ALL_QUANTS
build flags
split-mode none (single-GPU), mandatory FA_ALL_QUANTS build flags
- [[kingjones-strix-mtp]] — the active kingjones Qwen3.8-27B ROCmFP4 STRIX MTP
model on Dankclaw (restored 2026-09-01 after the Q8_0 AGENT experiment)
- [[ciru-activefpx-promptforge]] — the RETIRED v3 CIRU PromptForge runtime
+1 -1
View File
@@ -110,7 +110,7 @@ The LLM inference fleet on the two hosts. Full index:
- [[ciru-activefpx-promptforge]] — the RETIRED v3 CIRU PromptForge runtime on Dankclaw (superseded 2026-08-24)
- [[kingjones-strix-mtp]] — the kingjones Qwen3.8-27B ROCmFP4 STRIX MTP model on Dankclaw (active)
- [[dealign-ornith-crack]] — the dealign Ornith-1.5-35B-A3B CRACK model on Dankserver (active)
- [[ikllama-ornith-dankserver]] — the ik_llama.cpp runtime for frank-default-small (q8_KV + Hadamard KV cache, split-mode graph; 2026-08-26)
- [[ikllama-ornith-dankserver]] — the ik_llama.cpp runtime for frank-default-small (q8_KV + Hadamard KV cache, split-mode none; 2026-08-26)
- [[kairic-edge]] — the retired Kairic Edge IU4 experiment (2026-08-22)
- [[dflash2-large-vulkan]] — the retired DFlash2 Vulkan deployment (2026-08-21)
- [[Dankserver System Specs]] — the RTX 3090 box hardware
+5 -3
View File
@@ -76,9 +76,11 @@ CACHE_TYPE_V=q8_KV
K_CACHE_HADAMARD=1
V_CACHE_HADAMARD=1
# Split mode: graph (multi-GPU graph split; on a single 3090 this is a no-op
# for correctness but kept per operator preference).
SPLIT_MODE=graph
# Split mode: none. Dankserver has a single RTX 3090 and ik_llama requires
# >= 2 devices for split-mode graph ('It is not possible to use split mode
# graph with less than 2 devices' is a hard load error). none is correct
# here and still works with OVERRIDE_EXPERT CPU expert offload.
SPLIT_MODE=none
VERBOSITY=4
# Store context checkpoints in RAM to hold peak GPU memory down.
+2 -4
View File
@@ -10,10 +10,8 @@
# KV cache: q8_KV with Hadamard transforms on K and V (requires a build with
# GGML_CUDA_FA_ALL_QUANTS=ON + GGML_IQK_FA_ALL_QUANTS=ON; see the env file).
#
# Split mode graph + --override-tensor CPU expert offload. Per ik_llama
# README, `--split-mode graph` + partial GPU offload can occasionally produce
# incoherent output; the documented fallback is `-cuda graphs=0`. Smoke-test
# after each model load.
# Split mode is none: Dankserver has a single RTX 3090 and ik_llama rejects
# split-mode graph with fewer than 2 devices (hard load error).
#
# Expert offload: the expert (FFN exps) tensors selected by the layer-bounded
# --override-tensor pattern are pinned to CPU. Selected full-attention and