#!/usr/bin/env bash # Serve caf-eemin/Qwen3.8-27B-ROCmI4-MTP-GGUF (Q4_0_ROCMI4, embedded MTP) as # frank-default-large via the charlie12345/ROCmFPX llama.cpp runtime # (ROCmI4 W4A4) on Dankclaw (Strix Halo gfx1151). # # Runtime: charlie12345/ROCmFPX pinned at commit # c49ebdbd5c9f01ec242369f9e7f7967855f80cba, built with # -DGGML_HIP_ROCMI4_W4A4=ON against the system ROCm (/opt/rocm-7.2.4, # amdclang 22). The model has an embedded NextN/MTP head in the main GGUF, so # a separate draft file is not loaded; the MTP draft runs on ROCm0 with all # layers via --spec-draft-ngl all. # # The qualified MTP profile is strict Qwen MTP (--spec-mtp-strict-qwen) with # backend sampling, n_max 16, p_min 0.60 (see the model card and the # charlie12345/ROCmFPX ROCMI4 runbook). # # Tunables come from frank-default-large.env in this directory unless # FRANK_LARGE_ENV_FILE overrides that path. set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ENV_FILE="${FRANK_LARGE_ENV_FILE:-$SCRIPT_DIR/frank-default-large.env}" if [[ -f "$ENV_FILE" ]]; then set -a # shellcheck disable=SC1090 source "$ENV_FILE" set +a fi # --- defaults (used when the env file does not set them) ------------------- : "${LLAMA_BIN:=/home/dank/rocmi4-qwen38/ROCmFPX/build-rocmi4-w4a4/bin/llama-server}" : "${MODEL_DIR:=/home/dank/models/eemin-Qwen3.8-27B-ROCMI4-MTP}" : "${MODEL_FILE:=Qwen3.8-27B-Q4_0_ROCMI4.gguf}" : "${MMPROJ_FILE:=mmproj-BF16.gguf}" : "${CHAT_TEMPLATE_FILE:=$SCRIPT_DIR/chat-template.jinja}" : "${ALIAS:=frank-default-large}" : "${BIND_ADDR:=0.0.0.0}" : "${LISTEN_PORT:=7770}" : "${CTX_SIZE:=262144}" : "${PARALLEL:=1}" : "${BATCH_SIZE:=512}" : "${UBATCH_SIZE:=256}" : "${NUM_THREADS:=16}" : "${THREAD_BATCH:=32}" : "${CACHE_TYPE_K:=f16}" : "${CACHE_TYPE_V:=f16}" : "${CTX_CHECKPOINTS:=16}" : "${CACHE_RAM:=8192}" # Embedded-MTP (qwen35 NextN) qualified profile. The MTP head lives in the main # GGUF, so no standalone draft file is referenced; the draft runs on ROCm0 with all layers. : "${MTP_N_MAX:=16}" : "${MTP_N_MIN:=0}" : "${MTP_P_MIN:=0.60}" : "${SPEC_MTP_STRICT_QWEN:=on}" : "${MTP_BACKEND_SAMPLING:=on}" : "${SPEC_DRAFT_NGL:=all}" : "${TEMPERATURE:=1.0}" : "${TOP_K:=20}" : "${TOP_P:=0.95}" : "${REASONING:=on}" : "${REASONING_FORMAT:=deepseek}" : "${CHAT_TEMPLATE_KWARGS:={}}" : "${VERBOSITY:=4}" # Strix Halo unified memory + native gfx1151 detection for this ROCmFPX build. : "${HSA_OVERRIDE_GFX_VERSION:=11.5.1}" : "${GGML_HIP_ENABLE_UNIFIED_MEMORY:=1}" MODEL="$MODEL_DIR/$MODEL_FILE" MMPROJ="$MODEL_DIR/$MMPROJ_FILE" # Optional vision projector: load it only if the file exists. MMPROJ_ARGS=() if [[ -f "$MMPROJ" ]]; then MMPROJ_ARGS=(--mmproj "$MMPROJ") fi for f in "$MODEL" "$CHAT_TEMPLATE_FILE"; do if [[ ! -f "$f" ]]; then echo "missing required file: $f" >&2 exit 1 fi done if [[ ! -x "$LLAMA_BIN" ]]; then echo "missing llama-server binary: $LLAMA_BIN" >&2 exit 1 fi # Any leftover PromptForge env lanes from the previous (kingjones/v3) runtime # must stay off; this slot now runs the plain strict-MTP draft-mtp path. unset PROMPTFORGE_SIDECAR PROMPTFORGE_GDN_SIDECAR PROMPTFORGE_MTP_OUTPUT_K8_PROXY || true unset PROMPTFORGE_MODE PROMPTFORGE_ENABLE_SMALLM_W8 || true unset PROMPTFORGE_MTP_OUTPUT_K8 PROMPTFORGE_MTP_OUTPUT_K8_VALIDATE || true unset PROMPTFORGE_IU4_SIDECAR PROMPTFORGE_GDN_IU4_SIDECAR || true unset PROMPTFORGE_ENABLE_NGRAM_MOD PROMPTFORGE_ENABLE_NGRAM_M65_IU4 || true unset LLAMA_MTP_CPU_ARGMAX_FASTPATH LLAMA_MTP_BACKEND_GREEDY || true # Strix Halo unified memory + native gfx1151 detection for this ROCmFPX build. export HSA_OVERRIDE_GFX_VERSION export GGML_HIP_ENABLE_UNIFIED_MEMORY exec "$LLAMA_BIN" \ --model "$MODEL" \ "${MMPROJ_ARGS[@]}" \ --chat-template-file "$CHAT_TEMPLATE_FILE" \ --chat-template-kwargs "$CHAT_TEMPLATE_KWARGS" \ --alias "$ALIAS" \ --host "$BIND_ADDR" \ --port "$LISTEN_PORT" \ -dev ROCm0 \ -ngl 999 \ -np "$PARALLEL" \ -t "$NUM_THREADS" \ -tb "$THREAD_BATCH" \ -c "$CTX_SIZE" \ -b "$BATCH_SIZE" \ -ub "$UBATCH_SIZE" \ -fa on \ -ctk "$CACHE_TYPE_K" \ -ctv "$CACHE_TYPE_V" \ -ctxcp "$CTX_CHECKPOINTS" \ --cache-ram "$CACHE_RAM" \ --cache-prompt \ --metrics \ --no-mmap \ --spec-type draft-mtp \ ${SPEC_MTP_STRICT_QWEN:+--spec-mtp-strict-qwen} \ --spec-draft-device ROCm0 \ --spec-draft-ngl "$SPEC_DRAFT_NGL" \ --spec-draft-type-k "$CACHE_TYPE_K" \ --spec-draft-type-v "$CACHE_TYPE_V" \ --spec-draft-n-max "$MTP_N_MAX" \ --spec-draft-n-min "$MTP_N_MIN" \ --spec-draft-p-min "$MTP_P_MIN" \ ${MTP_BACKEND_SAMPLING:+--spec-draft-backend-sampling} \ --temp "$TEMPERATURE" \ --top-k "$TOP_K" \ --top-p "$TOP_P" \ --reasoning "$REASONING" \ --reasoning-format "$REASONING_FORMAT" \ --reasoning-budget -1 \ -lv "$VERBOSITY"