File size: 1,316 Bytes
b8f7f82
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
#!/usr/bin/env bash
# Пропускная способность GGUF на CPU: prompt processing и генерация.
#   bash bench/bench_cpu.sh gguf/MNN-Pocket-0.3B-RU-Q4_K_M.gguf [--chat]
# Нужен llama.cpp: LLAMA_CLI (по умолчанию llama-cli из PATH).
set -euo pipefail

MODEL="${1:?usage: bench_cpu.sh <model.gguf> [--chat]}"
shift || true
CHAT=0
for a in "$@"; do [ "$a" = "--chat" ] && CHAT=1; done

LLAMA_CLI="${LLAMA_CLI:-llama-cli}"
PROMPT="Объясни в двух предложениях, что такое инфляция."
EXTRA=()
if [ "$CHAT" = 1 ]; then EXTRA+=(--jinja); fi

raw="$("$LLAMA_CLI" -m "$MODEL" -p "$PROMPT" -n 64 --temp 0 -st --no-display-prompt \
        "${EXTRA[@]}" 2>&1 || true)"

# llama.cpp печатает тайминги в своей локали: "237,7 t/s"
echo "$raw" | tr ',' '.' | sed -n 's/.*Prompt: *\([0-9.]*\) *t\/s.*Generation: *\([0-9.]*\) *t\/s.*/prompt      \1 tok\/s\ngeneration  \2 tok\/s/p' | tail -2

# ответ — строки после эха промпта ("> ...") и до строки с таймингами
answer="$(echo "$raw" | awk '/^> /{p=1; next} /Prompt:/{p=0} p' | sed '/^\[/d' | sed '/^$/d')"
if [ -z "$answer" ]; then
  echo "FAIL: empty answer" >&2
  exit 1
fi
echo "--- sample ---"
echo "$answer" | head -4