43 lines
2.8 KiB
Bash
43 lines
2.8 KiB
Bash
#!/usr/bin/env bash
|
||
# Замер 30b-a3b MoE через llama-server с офлоадом экспертов на CPU (--n-cpu-moe / --cpu-moe).
|
||
# Сравнение с ollama (дал ~10 tok/s). Использование: bash eval/llama_moe_bench.sh [NCMOE]
|
||
# NCMOE пусто → --cpu-moe (все эксперты на CPU); число → --n-cpu-moe N (первые N слоёв).
|
||
set -u
|
||
BIN=/home/ubuntu/llama.cpp/build/bin/llama-server
|
||
GGUF=/home/ubuntu/.ollama/models/blobs/sha256-11b3b371aedb6c43d438ec010e66f9dfaa92127d64c22499891d9013ab7a6ee6
|
||
PORT=8080
|
||
LOG=/home/ubuntu/llama-moe.log
|
||
export NO_PROXY="localhost,127.0.0.1" no_proxy="localhost,127.0.0.1"
|
||
NCMOE_ARG="--cpu-moe"
|
||
[ $# -ge 1 ] && NCMOE_ARG="--n-cpu-moe $1"
|
||
|
||
pkill -f "llama-server" 2>/dev/null || true; sleep 2
|
||
echo "== старт llama-server: -ngl 99 $NCMOE_ARG (лог $LOG) =="
|
||
setsid nohup "$BIN" -m "$GGUF" -ngl 99 $NCMOE_ARG -c 8192 -fa on \
|
||
--host 127.0.0.1 --port $PORT --no-webui >"$LOG" 2>&1 < /dev/null &
|
||
|
||
# ждём готовности (загрузка 18GB весов — до ~90с)
|
||
for _ in $(seq 1 180); do
|
||
curl -s --noproxy '*' --max-time 1 "http://127.0.0.1:$PORT/health" 2>/dev/null | grep -q '"ok"' && break
|
||
sleep 1
|
||
done
|
||
if ! curl -s --noproxy '*' --max-time 2 "http://127.0.0.1:$PORT/health" | grep -q '"ok"'; then
|
||
echo "СЕРВЕР НЕ ПОДНЯЛСЯ:"; tail -15 "$LOG"; exit 1
|
||
fi
|
||
echo "== VRAM после загрузки =="; nvidia-smi --query-gpu=memory.used --format=csv,noheader
|
||
|
||
# Нарезка ПОСИМВОЛЬНО (не head -c — тот режет по байтам и рубит иероглиф → битый JSON)
|
||
BODY=$(/home/ubuntu/projects/textmachine/eval/.venv/bin/python -c '
|
||
import json
|
||
sys_p = "Ты профессиональный литературный переводчик с китайского на русский. Переведи фрагмент, сохрани все предложения. Выведи только перевод."
|
||
frag = open("/home/ubuntu/projects/textmachine/eval/data/samples/zh/luxun-zhufu.txt", encoding="utf-8").read()[:1500]
|
||
print(json.dumps({"model":"local","temperature":0.3,"max_tokens":2000,
|
||
"messages":[{"role":"system","content":sys_p},{"role":"user","content":frag}]}))')
|
||
|
||
echo "== генерация (zh→ru, 1500 знаков) =="
|
||
curl -s --noproxy '*' --max-time 600 "http://127.0.0.1:$PORT/v1/chat/completions" \
|
||
-H "Content-Type: application/json" -d "$BODY" > /home/ubuntu/llama-moe-resp.json
|
||
echo "-- tok/s из лога llama-server --"; grep -iE "prompt eval time|eval time|tokens per second" "$LOG" | tail -6
|
||
echo "-- первые 400 симв. перевода --"
|
||
/home/ubuntu/projects/textmachine/eval/.venv/bin/python -c "import json; print(json.load(open('/home/ubuntu/llama-moe-resp.json'))['choices'][0]['message']['content'][:400])"
|
||
pkill -f "llama-server" 2>/dev/null || true
|