diff --git a/scripts/frank-default-large.env b/scripts/frank-default-large.env index ded4d07..8f22c50 100644 --- a/scripts/frank-default-large.env +++ b/scripts/frank-default-large.env @@ -1,40 +1,39 @@ -# Tunables for frank-default-large (CIRU llama.cpp, dankclaw, Strix Halo -# gfx1151). +# Tunables for frank-default-large (Kairic Edge llama.cpp, dankclaw, +# Strix Halo gfx1151). # -# Runtime: the PromptForge llama-server built from ciru-ai/ROCmFPX tag -# qwen3.8-activefpx-promptforge-v2.3 plus the v3 output-K8 runtime patch -# serving jcbtc/Qwen3.8-27B-CIRU-ActiveFPX-PromptForge (v3). v3 tensor -# allocation (FFN-equalized, late-Q6 writers, full-Q8 output) with the -# full-W8 PromptForge companions, the Output-K8 draft proxy, and the BF16 -# vision projector. Alias frank-default-large, port 52625. +# Runtime: the llama-server built from the pinned ciru-ai/ROCmFPX tag +# kairic-edge-qwen38-27b-v1 (Kairic Edge IU4 lane: PromptForge + Dual +# View + native RDNA 3.5 IU4 matrix compute), built against the private +# TheRock ROCm 7.15 SDK kept in the retired ling3-ciru venv. +# Model: jcbtc/Qwen3.8-27B-IU4-Kairic-Edge, four-artifact payload +# (GGUF + FFN/GDN/GDN-Output .pfs sidecars, 26.05 GiB total). Alias +# frank-default-large, port 52625. See docs/kairic-edge.md. # -# This runtime replaced the retired vLLM service that previously occupied -# this slot. See docs/ciru-activefpx-promptforge.md. +# This runtime replaced the retired v3 CIRU ActiveFPX PromptForge +# service. The v3 model files remain in +# /home/dank/models/CIRU-Qwen3.8-27B-ActiveFPX-v3/ and the v3 binary in +# /home/dank/ciru-qwen38/ROCmFPX/build-promptforge/ for rollback. # -# WARNING: do not name any variable TEMP, HOST, or GPU_MAX_HEAP_SIZE. The ROCm -# HIP runtime reads those bare env vars (see the 2026-08-13 TEMP incident). +# WARNING: do not name any variable TEMP, HOST, or GPU_MAX_HEAP_SIZE. The +# ROCm HIP runtime reads those bare env vars (2026-08-13 TEMP incident). # llama.cpp reads --host/--port/--temp as CLI flags, never as env vars. -# CIRU llama-server binary (ROCmFPX v2.3 + v3 output-K8 patch build, see -# docs/ciru runtime page). Built against the private TheRock ROCm 7.15 SDK -# kept in the retired ling3-ciru venv. ROCm 7.15 is required for the -# advertised Strix Halo performance; the system ROCm 7.2.4 selects -# slower/fallback kernels. -LLAMA_BIN=/home/dank/ciru-qwen38/ROCmFPX/build-promptforge/bin/llama-server +# Kairic Edge llama-server binary (pinned tag build; see +# docs/kairic-edge.md for the build runbook and binary identity). +LLAMA_BIN=/home/dank/ciru-qwen38/ROCmFPX-kairic/build-kairic/bin/llama-server -# Model files (v3). The five-file payload (GGUF + FFN/GDN .pfs + Output-K8 -# proxy + BF16 vision projector) is the full v3 configuration. The v3 files -# live in a separate directory so the v2 artifacts stay for rollback. -MODEL_DIR=/home/dank/models/CIRU-Qwen3.8-27B-ActiveFPX-v3 -MODEL_FILE=Qwen3.8-27B-CIRU-ActiveFPX-PromptForge-v3-Q8-FFNEQ-LateQ6.gguf -FFN_PFS=Qwen3.8-27B-CIRU-ActiveFPX-PromptForge-FFN.pfs -GDN_PFS=Qwen3.8-27B-CIRU-ActiveFPX-PromptForge-GDN.pfs -OUTPUT_K8_PFS=Qwen3.8-27B-CIRU-ActiveFPX-PromptForge-Output-K8.pfs -MMPROJ_FILE=Qwen3.8-27B-mmproj-BF16.mmproj +# Model files (Kairic Edge four-artifact payload). The sidecars are +# accelerator-specific prepacked copies of selected weights; they are +# required, not optional. +MODEL_DIR=/home/dank/models/Kairic-Qwen3.8-27B-IU4-Edge +MODEL_FILE=Qwen3.8-27B-IU4-Kairic-Edge.gguf +FFN_PFS=Qwen3.8-27B-Kairic-IU4-FFN.pfs +GDN_PFS=Qwen3.8-27B-Kairic-IU4-GDN.pfs +GDN_OUTPUT_PFS=Qwen3.8-27B-Kairic-IU4-GDN-Output.pfs -# ROCm 7.15 SDK paths (inside the retired ling3-ciru venv). The serve script -# exports ROCM_PATH and LD_LIBRARY_PATH from these so the 7.15 libraries -# precede any system ROCm 7.2.4. +# ROCm 7.15 SDK paths (inside the retired ling3-ciru venv). The serve +# script exports ROCM_PATH and LD_LIBRARY_PATH from these so the 7.15 +# libraries precede any system ROCm 7.2.4. ROCM_DEVEL=/home/dank/ling3-ciru/Ling-3.0-Flash-CIRU-int4-Strix-native/.venv/lib/python3.12/site-packages/_rocm_sdk_devel ROCM_LIB=/home/dank/ling3-ciru/Ling-3.0-Flash-CIRU-int4-Strix-native/.venv/lib/python3.12/site-packages/_rocm_sdk_libraries ROCM_CORE=/home/dank/ling3-ciru/Ling-3.0-Flash-CIRU-int4-Strix-native/.venv/lib/python3.12/site-packages/_rocm_sdk_core @@ -43,38 +42,32 @@ ALIAS=frank-default-large BIND_ADDR=0.0.0.0 LISTEN_PORT=52625 -# Serving: full native 262144 context (n_ctx_train), 1 slot (user request -# 2026-08-19: parallel slots degraded performance). -c is the TOTAL -# context; with PARALLEL=1 it equals the per-slot context. Concurrent -# requests queue on the single slot; the server never preempts a running -# generation. f16 KV, context checkpoints, prompt cache, native MTP -# depth-4. The Strix Halo is unified memory; rocm-smi reports the 64 GiB -# budget. KV at 262144 x 64 KiB/cell is ~16 GiB. +# Serving: the qualified Kairic profile (pinned runner defaults). Full +# native 262144 context, 1 slot, batch 2048 / ubatch 512, 16 target / +# 32 batch threads, f16 target and draft KV, 32 context checkpoints, +# 8192 MiB prompt cache with idle-slot persistence. Context checkpoints +# are required for this hybrid recurrent model; do not remove CTX_CHECKPOINTS +# while the prompt cache is enabled. CTX_SIZE=262144 PARALLEL=1 -BATCH_SIZE=4096 -UBATCH_SIZE=4096 +BATCH_SIZE=2048 +UBATCH_SIZE=512 +TARGET_THREADS=16 +BATCH_THREADS=32 CACHE_TYPE_K=f16 CACHE_TYPE_V=f16 -CTX_CHECKPOINTS=16 +CTX_CHECKPOINTS=32 CACHE_RAM=8192 -# Native MTP draft (depth-4, p_min 0, backend sampling). The qualified v3 -# profile drives the draft via the Output-K8 proxy; the CPU argmax fast -# path and IU4/ngram lanes are disabled in the serve script. +# Native MTP draft (depth 4, p_min 0, backend sampling) — the pinned +# runner's explicit MTP4. SPEC_DRAFT_N_MAX=4 SPEC_DRAFT_N_MIN=0 SPEC_DRAFT_P_MIN=0.0 SPEC_DRAFT_P_SPLIT=0.10 -# Sampling (model card defaults). -TEMPERATURE=0.7 -TOP_P=0.95 - -# Thinking enabled (user request, 2026-08-18). deepseek format moves the -# reasoning into message.reasoning_content (OpenAI-compatible); -# none would leave the thought tags unparsed in content. -REASONING=on -REASONING_FORMAT=deepseek - -VERBOSITY=4 +# Sampling: the pinned runner keeps the deterministic evaluation +# profile (temp 0 / top-p 1 / top-k 0 / min-p 0) as the server default. +# Clients override per request; the model card recommends Qwen live +# values for ordinary chat (temp 0.7, top-p 0.8, top-k 20, min-p 0, +# presence_penalty 1.5). Reasoning is off in the qualified profile. diff --git a/scripts/serve-frank-large.sh b/scripts/serve-frank-large.sh index ba09b77..e803b31 100755 --- a/scripts/serve-frank-large.sh +++ b/scripts/serve-frank-large.sh @@ -1,19 +1,22 @@ #!/usr/bin/env bash -# Serve jcbtc/Qwen3.8-27B-CIRU-ActiveFPX-PromptForge (v3) as -# frank-default-large via the CIRU ROCmFPX llama.cpp runtime on Dankclaw -# (Strix Halo gfx1151). +# Serve jcbtc/Qwen3.8-27B-IU4-Kairic-Edge as frank-default-large via the +# Kairic Edge CIRU ROCmFPX llama.cpp runtime on Dankclaw (Strix Halo +# gfx1151). # -# Runtime: the PromptForge llama-server built from ciru-ai/ROCmFPX tag -# qwen3.8-activefpx-promptforge-v2.3 (commit 103af8b41) plus the v3 output-K8 -# runtime patch (runtime/qwen38-v3-output-k8-runtime.patch, commit af0eac6 on -# Dankclaw) against the private TheRock ROCm 7.15 SDK (kept in the retired -# ling3-ciru venv). The model is the v3 GGUF with the full-W8 PromptForge -# companion views (FFN/GDN .pfs), the Output-K8 draft proxy, and the BF16 -# vision projector. Native depth-4 MTP speculative decoding. +# Runtime: the llama-server built from the pinned ciru-ai/ROCmFPX tag +# kairic-edge-qwen38-27b-v1 (commit e97b324) against the private TheRock +# ROCm 7.15 SDK kept in the retired ling3-ciru venv. The model is the +# Kairic Edge GGUF plus the three native IU4 sidecars (FFN, GDN, GDN +# Output); the runtime routes qualified prompt and multi-token +# verification shapes through AMD RDNA 3.5 native IU4 matrix compute. +# See docs/kairic-edge.md for the build runbook and binary identity. # -# The model card requires ROCm 7.15 (not the system ROCm 7.2.4) for the -# advertised Strix Halo performance. LD_LIBRARY_PATH therefore points at the -# 7.15 SDK libraries first. An older system ROCm must not precede them. +# This script replicates the release pinned runner +# (ROCmFPX-kairic/scripts/run-kairic-edge-gfx1151.sh) verbatim. The only +# deliberate differences: --host/--port come from BIND_ADDR/LISTEN_PORT +# (safe names; the ROCm HIP runtime reads a bare HOST env var, see the +# 2026-08-13 TEMP incident) and LD_LIBRARY_PATH uses this machine's split +# 7.15 SDK layout. # # Tunables come from frank-default-large.env in this directory unless # FRANK_LARGE_ENV_FILE overrides that path. @@ -29,55 +32,40 @@ if [[ -f "$ENV_FILE" ]]; then fi # --- defaults (used when the env file does not set them) ------------------- -: "${LLAMA_BIN:=/home/dank/ciru-qwen38/ROCmFPX/build-promptforge/bin/llama-server}" -: "${MODEL_DIR:=/home/dank/models/CIRU-Qwen3.8-27B-ActiveFPX-v3}" -: "${MODEL_FILE:=Qwen3.8-27B-CIRU-ActiveFPX-PromptForge-v3-Q8-FFNEQ-LateQ6.gguf}" -: "${FFN_PFS:=Qwen3.8-27B-CIRU-ActiveFPX-PromptForge-FFN.pfs}" -: "${GDN_PFS:=Qwen3.8-27B-CIRU-ActiveFPX-PromptForge-GDN.pfs}" -: "${OUTPUT_K8_PFS:=Qwen3.8-27B-CIRU-ActiveFPX-PromptForge-Output-K8.pfs}" -: "${MMPROJ_FILE:=Qwen3.8-27B-mmproj-BF16.mmproj}" +# The defaults are the release pinned runner's qualified values. +: "${LLAMA_BIN:=/home/dank/ciru-qwen38/ROCmFPX-kairic/build-kairic/bin/llama-server}" +: "${MODEL_DIR:=/home/dank/models/Kairic-Qwen3.8-27B-IU4-Edge}" +: "${MODEL_FILE:=Qwen3.8-27B-IU4-Kairic-Edge.gguf}" +: "${FFN_PFS:=Qwen3.8-27B-Kairic-IU4-FFN.pfs}" +: "${GDN_PFS:=Qwen3.8-27B-Kairic-IU4-GDN.pfs}" +: "${GDN_OUTPUT_PFS:=Qwen3.8-27B-Kairic-IU4-GDN-Output.pfs}" : "${ROCM_DEVEL:=/home/dank/ling3-ciru/Ling-3.0-Flash-CIRU-int4-Strix-native/.venv/lib/python3.12/site-packages/_rocm_sdk_devel}" : "${ROCM_LIB:=/home/dank/ling3-ciru/Ling-3.0-Flash-CIRU-int4-Strix-native/.venv/lib/python3.12/site-packages/_rocm_sdk_libraries}" : "${ROCM_CORE:=/home/dank/ling3-ciru/Ling-3.0-Flash-CIRU-int4-Strix-native/.venv/lib/python3.12/site-packages/_rocm_sdk_core}" : "${ALIAS:=frank-default-large}" : "${BIND_ADDR:=0.0.0.0}" : "${LISTEN_PORT:=52625}" -: "${CTX_SIZE:=524288}" -: "${PARALLEL:=2}" -: "${BATCH_SIZE:=4096}" -: "${UBATCH_SIZE:=4096}" +: "${CTX_SIZE:=262144}" +: "${PARALLEL:=1}" +: "${BATCH_SIZE:=2048}" +: "${UBATCH_SIZE:=512}" +: "${TARGET_THREADS:=16}" +: "${BATCH_THREADS:=32}" : "${CACHE_TYPE_K:=f16}" : "${CACHE_TYPE_V:=f16}" -: "${CTX_CHECKPOINTS:=16}" +: "${CTX_CHECKPOINTS:=32}" : "${CACHE_RAM:=8192}" : "${SPEC_DRAFT_N_MAX:=4}" : "${SPEC_DRAFT_N_MIN:=0}" : "${SPEC_DRAFT_P_MIN:=0.0}" : "${SPEC_DRAFT_P_SPLIT:=0.10}" -: "${TEMPERATURE:=0.7}" -: "${TOP_P:=0.95}" -: "${REASONING:=on}" -: "${REASONING_FORMAT:=deepseek}" -: "${VERBOSITY:=4}" MODEL="$MODEL_DIR/$MODEL_FILE" -export PROMPTFORGE_SIDECAR="$MODEL_DIR/$FFN_PFS" -export PROMPTFORGE_GDN_SIDECAR="$MODEL_DIR/$GDN_PFS" -# v3 qualified runtime: Output-K8 draft proxy + small-row W8 prompt route. -export PROMPTFORGE_MODE="m2048_fused_tail1476" -export GGML_CUDA_GRAPH_OPT=0 -export PROMPTFORGE_ENABLE_SMALLM_W8=1 -export PROMPTFORGE_MTP_OUTPUT_K8=1 -export PROMPTFORGE_MTP_OUTPUT_K8_VALIDATE=0 -export PROMPTFORGE_MTP_OUTPUT_K8_PROXY="$MODEL_DIR/$OUTPUT_K8_PFS" -# The qualified v3 profile disables the CPU argmax draft fast path; the -# Output-K8 proxy + backend sampling replace it. Also drop any IU4/ngram -# companions from the non-IU4 development lane. -unset LLAMA_MTP_CPU_ARGMAX_FASTPATH LLAMA_MTP_BACKEND_GREEDY || true -unset PROMPTFORGE_IU4_SIDECAR PROMPTFORGE_GDN_IU4_SIDECAR || true -unset PROMPTFORGE_ENABLE_NGRAM_MOD PROMPTFORGE_ENABLE_NGRAM_M65_IU4 || true +FFN="$MODEL_DIR/$FFN_PFS" +GDN="$MODEL_DIR/$GDN_PFS" +GDN_OUTPUT="$MODEL_DIR/$GDN_OUTPUT_PFS" -for f in "$MODEL" "$PROMPTFORGE_SIDECAR" "$PROMPTFORGE_GDN_SIDECAR" "$PROMPTFORGE_MTP_OUTPUT_K8_PROXY" "$MODEL_DIR/$MMPROJ_FILE"; do +for f in "$MODEL" "$FFN" "$GDN" "$GDN_OUTPUT"; do if [[ ! -f "$f" ]]; then echo "missing required file: $f" >&2 exit 1 @@ -89,15 +77,52 @@ if [[ ! -x "$LLAMA_BIN" ]]; then fi # ROCm 7.15 SDK libraries must precede any system ROCm in LD_LIBRARY_PATH. +# The release runner assumes one ROCm tree; this machine keeps the 7.15 +# SDK in three split directories, so use the proven split layout plus the +# server's own directory. export ROCM_PATH="$ROCM_DEVEL" -export LD_LIBRARY_PATH="${ROCM_LIB}/lib:${ROCM_CORE}/lib:${ROCM_DEVEL}/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" +export LD_LIBRARY_PATH="$(dirname "$LLAMA_BIN"):${ROCM_LIB}/lib:${ROCM_CORE}/lib:${ROCM_DEVEL}/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" +# Pinned runner environment, verbatim (Kairic Edge IU4 lane, PromptForge, +# Dual View sidecars). +export HIP_VISIBLE_DEVICES=0 +export HSA_OVERRIDE_GFX_VERSION=11.5.1 +export GGML_CUDA_GRAPH_OPT=0 +export LLAMA_TARGET_GREEDY_ARGMAX_FASTPATH=1 +export LLAMA_MTP_CPU_ARGMAX_FASTPATH=1 +export PROMPTFORGE_TARGET_ONLY=0 +export PROMPTFORGE_MODE=iu4_ffn +export PROMPTFORGE_IU4_SIDECAR="$FFN" +export PROMPTFORGE_SIDECAR="$FFN" +export PROMPTFORGE_IU4_HADAMARD=1 +export PROMPTFORGE_IU4_SEGMENTED=0 +export PROMPTFORGE_ENABLE_FFN_KEEPERS=0 +export PROMPTFORGE_FFN_KEEPERS=late6 +export PROMPTFORGE_ENABLE_GDN=1 +export PROMPTFORGE_ENABLE_GDN_W8=0 +export PROMPTFORGE_GDN_SIDECAR_OVERRIDE="$GDN" +export PROMPTFORGE_GDN_SIDECAR="$GDN" +export PROMPTFORGE_GDN_IU4_HADAMARD=1 +export PROMPTFORGE_ENABLE_GDN_KEEPERS=0 +export PROMPTFORGE_ENABLE_GDN_OUTPUT=1 +export PROMPTFORGE_GDN_OUTPUT_SIDECAR="$GDN_OUTPUT" +export PROMPTFORGE_GDN_OUTPUT_KEEPERS=v3_lateq6 +export PROMPTFORGE_ENABLE_SMALLM_IU4=1 +export PROMPTFORGE_ENABLE_SMALLM_GDN_IU4=1 +export PROMPTFORGE_ENABLE_SMALLM_GDN_OUTPUT_IU4=0 +export PROMPTFORGE_ENABLE_IU4_DECODE_M2_M5=0 +export PROMPTFORGE_OUTPUT_K8_STRICT_GREEDY=0 + +# Pinned runner flags, verbatim (qualified 262K one-slot profile, native +# MTP depth 4, deterministic sampler, reasoning off). Sampling is +# overridden per request by clients; the card recommends Qwen live values +# (temp 0.7, top-p 0.8, top-k 20, min-p 0, presence_penalty 1.5). exec "$LLAMA_BIN" \ - --model "$MODEL" \ - --mmproj "$MODEL_DIR/$MMPROJ_FILE" \ + -m "$MODEL" \ --alias "$ALIAS" \ --host "$BIND_ADDR" \ --port "$LISTEN_PORT" \ + --jinja \ -dev ROCm0 \ -ngl 999 \ -c "$CTX_SIZE" \ @@ -106,25 +131,29 @@ exec "$LLAMA_BIN" \ -fa on \ -ctk "$CACHE_TYPE_K" \ -ctv "$CACHE_TYPE_V" \ + -t "$TARGET_THREADS" \ + -tb "$BATCH_THREADS" \ -np "$PARALLEL" \ -ctxcp "$CTX_CHECKPOINTS" \ --cache-ram "$CACHE_RAM" \ --cache-prompt \ + --cache-idle-slots \ --metrics \ - --no-mmap \ + --kairic-edge \ --spec-type draft-mtp \ --spec-draft-device ROCm0 \ --spec-draft-ngl 999 \ - --spec-draft-type-k f16 \ - --spec-draft-type-v f16 \ + --spec-draft-type-k "$CACHE_TYPE_K" \ + --spec-draft-type-v "$CACHE_TYPE_V" \ --spec-draft-n-max "$SPEC_DRAFT_N_MAX" \ --spec-draft-n-min "$SPEC_DRAFT_N_MIN" \ --spec-draft-p-min "$SPEC_DRAFT_P_MIN" \ --spec-draft-p-split "$SPEC_DRAFT_P_SPLIT" \ --spec-draft-backend-sampling \ - --temp "$TEMPERATURE" \ - --top-p "$TOP_P" \ - --reasoning "$REASONING" \ - --reasoning-format "$REASONING_FORMAT" \ - --reasoning-budget -1 \ - -lv "$VERBOSITY" + --temp 0 \ + --top-p 1.0 \ + --top-k 0 \ + --min-p 0.0 \ + --reasoning off \ + --reasoning-format none \ + --reasoning-budget -1