#!/bin/bash # Qwen3.6 -> Qwen3.8 串行切换。失败请跑 restore.sh set -e M=/data/models/Qwen/Qwen3.8-27B-GGUF/Qwen3.8-27B-Q5_K_M.gguf E=20752787040 echo "[G3] 校验模型完整性..." SZ=$(stat -c %s "$M") [ "$SZ" = "$E" ] || { echo "❌ 字节数不符: $SZ != $E,中止"; exit 1; } echo " ✅ $SZ 字节,完整" echo "[1/3] 停止 Qwen3.6 (llm)... 中断从此刻开始" date '+%H:%M:%S' docker stop llm echo "[2/3] 启动 Qwen3.8 (llm38) 于 8000..." docker rm -f llm38 2>/dev/null || true mkdir -p /data/nvcache38 2>/dev/null || true docker run -d \ --name llm38 \ --restart unless-stopped \ --gpus all \ -p 8000:8000 \ -v /data/models:/jsxc \ -v /data/nvcache38:/root/.nv \ -e GGML_CUDA_DISABLE_GRAPHS=1 \ -e CUDA_CACHE_MAXSIZE=2147483648 \ --health-cmd "curl -fsS http://localhost:8000/health || exit 1" \ --health-interval 30s --health-timeout 5s \ --health-retries 3 --health-start-period 600s \ llamacpp:b10481 \ -m /jsxc/Qwen/Qwen3.8-27B-GGUF/Qwen3.8-27B-Q5_K_M.gguf \ --alias qwen3.8-27b \ --host 0.0.0.0 --port 8000 \ -ngl 99 -sm layer -fa on \ --ctx-size 131072 --no-context-shift \ --batch-size 2048 --ubatch-size 512 \ --parallel 4 --jinja --seed 3407 \ --temp 1.0 --top-p 0.95 --top-k 20 --min-p 0.0 --presence-penalty 0.0 echo "[3/3] 等待就绪(首次含 JIT 编译,最多 10 分钟)..." for i in $(seq 1 60); do if curl -sf http://127.0.0.1:8000/health >/dev/null 2>&1; then echo " ✅ 就绪于第 $((i*10)) 秒"; date '+%H:%M:%S'; exit 0 fi sleep 10 done echo "❌ 超时未就绪。查 docker logs llm38;回滚跑 restore.sh"; exit 1