cutover.sh
1.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/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