#!/usr/bin/env bash # MATH-500 über alle 27B-Varianten. # # 150 statt 500 Aufgaben: bei rund 500 Token Rechenweg je Aufgabe und 25 t/s # kostet der volle Satz zwei Stunden pro Modell — mal sieben wären das 14 # Stunden. 150 Aufgaben ergeben ein Konfidenzintervall von etwa ±7 Punkten, # genug um echte Unterschiede zu sehen, und der Lauf bleibt in einer Nacht. # Die Auswahl greift gleichmäßig über den Datensatz, nicht die ersten 150 — # MATH-500 ist nach Thema sortiert. set -uo pipefail PREP=/mnt/models/qwen38-prep BIN=/mnt/models/bin/llama-server M=/mnt/models/PropellerA-models SATZ=${SATZ:-math500} GRENZE=${GRENZE:-150} MODUS=${MODUS:-normal} NUR=${NUR:-} CTX=${CTX:-16384} PORT=8291 if [ "$MODUS" = "reasoning" ]; then ERG=$PREP/mathe-$SATZ-reasoning BFLAGS="--reasoning --max-tokens 5000" else ERG=$PREP/mathe-$SATZ BFLAGS="--max-tokens 1600" fi mkdir -p "$ERG" echo $$ > "$PREP/.runner.pid" trap 'rm -f "$PREP/.runner.pid"' EXIT stop_server() { for pid in $(pgrep -x llama-server 2>/dev/null); do kill -TERM "$pid" 2>/dev/null; done for i in $(seq 1 25); do pgrep -x llama-server >/dev/null 2>&1 || break; sleep 1; done for pid in $(pgrep -x llama-server 2>/dev/null); do kill -9 "$pid" 2>/dev/null; done sleep 3 } warte_bereit() { for i in $(seq 1 240); do curl -s -m 3 "http://127.0.0.1:$PORT/health" 2>/dev/null | grep -q ok && return 0 sleep 2 done return 1 } lauf() { local kurz="$1" name="$2" gguf="$3" if [ -n "$NUR" ] && [[ " $NUR " != *" $kurz "* ]]; then return 0; fi if [ -f "$ERG/$kurz.json" ]; then echo " $kurz schon fertig"; return 0; fi echo echo "############ $(date '+%T') $name [$SATZ/$MODUS]" [ -f "$gguf" ] || { echo " FEHLT: $gguf"; return 0; } stop_server nohup "$BIN" -m "$gguf" --host 127.0.0.1 --port "$PORT" \ --ctx-size "$CTX" --parallel 1 --n-gpu-layers 99 --tensor-split 1,1,1 \ --cache-type-k q8_0 --cache-type-v q8_0 --flash-attn on --jinja \ --alias "$kurz" > "$ERG/server-$kurz.log" 2>&1 & if ! warte_bereit; then echo " SERVER KAM NICHT HOCH:" grep -iE "error|failed|out of memory" "$ERG/server-$kurz.log" | tail -4 stop_server; return 1 fi /mnt/models/skinnyJoe-venv/bin/python "$PREP/bench_mathe.py" \ --port "$PORT" --modell "$name" --satz "$SATZ" --grenze "$GRENZE" \ $BFLAGS --out "$ERG/$kurz.json" 2>&1 | tail -10 stop_server } echo "=== $SATZ | $GRENZE Aufgaben | Modus: $MODUS ===" lauf q38-q8 "Qwen3.8-27B Q8_0" "$M/qwen3.8-27b-Q8_0.gguf" lauf q38-q6 "Qwen3.8-27B Q6_K" "$M/qwen3.8-27b-Q6_K.gguf" lauf q36-q6 "Qwen3.6-27B Q6_K" "$M/Qwen3.6-27B-Q6_K.gguf" lauf bf16 "Qwen3.8-27B BF16 (unquantisiert)" "/mnt/models/tmp-qwen3.8-27b-BF16.gguf" lauf q36-q5 "Qwen3.6-27B Q5_K_M" "$M/Qwen3.6-27B-Q5_K_M.gguf" lauf q36-udq6 "Qwen3.6-27B UD-Q6_K_XL" "$M/Qwen3.6-27B-UD-Q6_K_XL.gguf" lauf q36-unc "Qwen3.6-27B Uncensored Q6_K_P" \ "/mnt/models/modelle/qwen36-27b-uncensored/Qwen3.6-27B-Uncensored-HauhauCS-Aggressive-Q6_K_P.gguf" echo echo "=== $(date '+%T') fertig ===" ls -la "$ERG"/*.json 2>/dev/null