pi_coder_2/start-coding-server.sh
dschlueter 42d8e921fa fix: start-coding-server.sh — curl-Fehler (TCP-Reset) nicht als Fatal behandeln
curl gibt Exit-Code 56 zurück wenn der Server die Verbindung während des
Modell-Ladens zurücksetzt. Mit set -e brach das Skript dadurch ab, obwohl
der Container noch startete. || HTTP_CODE="000" fängt den Fehler ab und
lässt die Warte-Schleife korrekt weiterlaufen.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-15 06:08:58 +02:00

79 lines
2.6 KiB
Bash
Executable file

#!/usr/bin/env bash
set -euo pipefail
HF_HOME="${HF_HOME:-/home/dschlueter/nvme2n1p7_home/huggingface}"
MODEL_REL_PATH="models/qwen3/Qwen3.6-27B-Uncensored-HauhauCS-Aggressive-IQ4_XS.gguf"
IMAGE="ghcr.io/ggml-org/llama.cpp:server-cuda"
CONTAINER_NAME="coding_model"
HOST_PORT=8001
CONTAINER_PORT=8000
MODEL_ALIAS="coding_model"
GPU_DEVICE="${GPU_DEVICE:-1}"
echo "[*] Verwende HF_HOME = $HF_HOME"
echo "[*] GPU device = $GPU_DEVICE (überschreibbar: GPU_DEVICE=2 ./start-coding-server.sh)"
if [ ! -f "$HF_HOME/$MODEL_REL_PATH" ]; then
echo "[!] Modell-Datei nicht gefunden: $HF_HOME/$MODEL_REL_PATH" >&2
exit 1
fi
if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}\$"; then
echo "[*] Stoppe existierenden Container $CONTAINER_NAME ..."
docker rm -f "$CONTAINER_NAME" >/dev/null 2>&1 || true
fi
echo "[*] Starte llama.cpp-Single-Server (Coder + Judge in einem) ..."
docker run -d \
--gpus "\"device=${GPU_DEVICE}\"" \
--name "$CONTAINER_NAME" \
--restart unless-stopped \
-e HF_HOME="/hf_home" \
-v "$HF_HOME:/hf_home:ro" \
-p "${HOST_PORT}:${CONTAINER_PORT}" \
"$IMAGE" \
-m "/hf_home/${MODEL_REL_PATH}" \
--alias "${MODEL_ALIAS}" \
-c 262144 \
-n 16384 \
--jinja \
--reasoning on \
--no-context-shift \
--temp 0.65 \
--top-p 0.80 \
--top-k 20 \
--min-p 0.01 \
--repeat-penalty 1.05 \
--main-gpu 0 \
-ngl 999 \
-fa on \
--kv-unified \
--cache-type-k q4_0 \
--cache-type-v q4_0 \
--batch-size 1024 \
--ubatch-size 512 \
--parallel 1 \
--cont-batching \
--host 0.0.0.0 \
--port "$CONTAINER_PORT"
echo "[*] Warte auf Modell-Bereitschaft (Completion-Check, max. 300 s) ..."
MODEL_READY=0
for i in {1..150}; do
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" --max-time 10 \
-X POST "http://localhost:${HOST_PORT}/v1/chat/completions" \
-H "Content-Type: application/json" \
-d "{\"model\":\"${MODEL_ALIAS}\",\"messages\":[{\"role\":\"user\",\"content\":\"ping\"}],\"max_tokens\":1,\"temperature\":0.0,\"stream\":false}") || HTTP_CODE="000"
if [ "$HTTP_CODE" = "200" ]; then MODEL_READY=1; break; fi
echo " [${i}/150] HTTP ${HTTP_CODE:-000} — Modell lädt noch, warte 2s ..."
sleep 2
done
if [ "$MODEL_READY" -ne 1 ]; then
echo "[!] Modell wurde nicht rechtzeitig bereit (kein HTTP 200 auf Completion)." >&2
docker logs --tail 200 "$CONTAINER_NAME" || true
exit 1
fi
echo "[*] Modell bereit — erster Completion-Request erfolgreich (HTTP 200)."
echo "[*] Server läuft auf http://0.0.0.0:${HOST_PORT} (Coder + Judge)"
echo "[*] Stoppen mit: docker rm -f ${CONTAINER_NAME}"