ctx256k.sh
2.45 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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/env bash
# 把 llm38 的单请求上下文从 32K 提到 256K(模型原生上限)。
# 手法:--parallel 4 --ctx-size 131072 → --parallel 2 --ctx-size 524288
# 旧容器改名保留而非删除,起不来就秒退回去。
set -uo pipefail
NEWCTX=524288; NEWPAR=2
echo "[1/4] 备份旧容器(改名保留,不删)"
docker rm -f llm38_prev 2>/dev/null
docker stop llm38 >/dev/null && docker rename llm38 llm38_prev
echo " 旧容器已停并改名 llm38_prev $(date '+%H:%M:%S')"
rollback() {
echo "❌ 新配置未就绪,回滚到 32K"
docker rm -f llm38 2>/dev/null
docker rename llm38_prev llm38 && docker start llm38
for i in $(seq 1 60); do
curl -sf http://127.0.0.1:8000/health >/dev/null 2>&1 && { echo " ✅ 已回滚就绪 $(date '+%H:%M:%S')"; exit 1; }
sleep 5
done
echo " ⚠️ 回滚后仍未就绪,人工介入:docker logs llm38"; exit 2
}
echo "[2/4] 起新容器 parallel=$NEWPAR ctx-size=$NEWCTX(单请求 $((NEWCTX/NEWPAR/1024))K)"
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 $NEWCTX --no-context-shift \
--batch-size 2048 --ubatch-size 512 \
--parallel $NEWPAR --jinja --seed 3407 \
--temp 1.0 --top-p 0.95 --top-k 20 --min-p 0.0 --presence-penalty 0.0 \
|| rollback
echo "[3/4] 等待就绪(KV 变大,分配比之前慢;最多 8 分钟)"
for i in $(seq 1 96); do
if ! docker ps --format '{{.Names}}' | grep -qx llm38; then
echo " 容器退出了,尾部日志:"; docker logs --tail 25 llm38 2>&1; rollback
fi
if curl -sf http://127.0.0.1:8000/health >/dev/null 2>&1; then
echo " ✅ 就绪于第 $((i*5)) 秒 $(date '+%H:%M:%S')"; break
fi
[ "$i" = 96 ] && { docker logs --tail 25 llm38 2>&1; rollback; }
sleep 5
done
echo "[4/4] 实际生效值"
docker logs llm38 2>&1 | grep -E "n_ctx_slot|n_slots" | tail -2
nvidia-smi --query-gpu=index,memory.used,memory.free --format=csv,noheader
echo "旧容器 llm38_prev 保留着,确认没问题后 docker rm llm38_prev"