#!/usr/bin/env bash set -euo pipefail if [[ $# -ne 2 || ! $1 =~ ^(2|4|8|16|32)$ || ! $2 =~ ^(0|1)$ ]]; then echo "usage: $0 <2|4|8|16|32 GiB> " >&2 exit 2 fi root=$(cd "$(dirname "$0")" && pwd) model=${MODEL:-models/flint-UD-Q4_K_XL.gguf} if [[ "$model" != /* ]]; then model="$root/$model" fi cap_gib=$1 pager=$2 arena_mb=${ARENA_MB:-$((cap_gib * 1024 - 4096))} threads=${THREADS:-16} if [[ -z ${ARENA_MB:-} ]]; then case "$cap_gib" in 2) arena_mb=256 ;; 4) arena_mb=1024 ;; 8) arena_mb=3072 ;; 16) arena_mb=10240 ;; 32) arena_mb=18432 ;; esac fi if [[ ! -r "$model" ]]; then echo "GGUF not readable: $model" >&2 exit 2 fi # 版本選擇:預設 v1(SDQ_PRELOAD=0 SDQ_ROW_PARALLEL=0);v2 請設 SDQ_PRELOAD=1 SDQ_ROW_PARALLEL=1 cmd=(env SDQ_PAGER="$pager" SDQ_PREFETCH=0 SDQ_ARENA_MB="$arena_mb" SDQ_PRELOAD="${SDQ_PRELOAD:-0}" SDQ_ROW_PARALLEL="${SDQ_ROW_PARALLEL:-0}" "$root/build/bin/llama-cli" -m "$model" -c 128 -b 32 -ub 16 -p "Explain in one sentence why the sky is blue." -n 8 -t "$threads" --temp 0 -st --simple-io) exec python3 "$root/tools/runmem.py" --rss-limit-gib "$cap_gib" --interval 0.02 --timeout 7200 -- "${cmd[@]}"