#!/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 [--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