feat: Add benchmark wrapper script
Wrap llama-benchy for this box. Take prompt length, generation length, concurrency, and context depth as arguments, and pass the rest to llama-benchy. Defaults: pp=32768, tg=2048, concurrency 1, depth 0. Validate the arguments, report a missing llama-benchy, and allow BASE_URL, MODEL, and TOKENIZER overrides from the environment. Co-Authored-By: Hinata <hinata@idihore.id> Signed-off-by: MOVZX <movzx@yahoo.com>
This commit is contained in:
Executable
+71
@@ -0,0 +1,71 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Run llama-benchy against the local vLLM server.
|
||||||
|
#
|
||||||
|
# benchmarks/bench.sh [PP] [TG] [CONCURRENCY] [DEPTH] [extra llama-benchy args]
|
||||||
|
#
|
||||||
|
# PP prompt tokens, default 32768 (use 1 for decode-only)
|
||||||
|
# TG generated tokens, default 2048 (use 1 for prefill-only)
|
||||||
|
# CONCURRENCY one level, or a space-separated list, default 1
|
||||||
|
# DEPTH prior-conversation tokens, one value or a list, default 0
|
||||||
|
#
|
||||||
|
# PP, TG, CONCURRENCY, and DEPTH also read the environment when their argument is absent.
|
||||||
|
#
|
||||||
|
# Examples:
|
||||||
|
# benchmarks/bench.sh # pp=32768 tg=2048 conc=1 depth=0
|
||||||
|
# benchmarks/bench.sh 32768 1 # prefill-only
|
||||||
|
# benchmarks/bench.sh 1 4096 # decode-only
|
||||||
|
# benchmarks/bench.sh 32768 2048 "1 2 4" # concurrency sweep
|
||||||
|
# benchmarks/bench.sh 128 256 1 "0 8192 65536" # depth sweep, small turn
|
||||||
|
# benchmarks/bench.sh 1 512 1 --runs 5 # extra args go to llama-benchy
|
||||||
|
# benchmarks/bench.sh 128 256 1 8192 --enable-prefix-caching
|
||||||
|
# # two-phase run, the tool measures
|
||||||
|
# # the cold prefix load and the warm
|
||||||
|
# # turn as separate rows
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
BASE_URL="${BASE_URL:-http://127.0.0.1:8080/v1}"
|
||||||
|
MODEL="${MODEL:-Hinata}"
|
||||||
|
TOKENIZER="${TOKENIZER:-/data/models/halt95/Swift1.5-Qwen3.8-Flash-Next-W4A16-Merlin}"
|
||||||
|
|
||||||
|
# The first four arguments are PP, TG, CONCURRENCY, and DEPTH. Parsing stops at the first
|
||||||
|
# argument that starts with `-`, so that argument and the rest go to llama-benchy.
|
||||||
|
names=(PP TG CON DEPTH)
|
||||||
|
|
||||||
|
for i in 0 1 2 3; do
|
||||||
|
[ $# -gt 0 ] || break
|
||||||
|
case "$1" in -*) break ;; esac
|
||||||
|
printf -v "${names[$i]}" '%s' "$1"
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
PP="${PP:-32768}"; TG="${TG:-2048}"; CON="${CON:-1}"; DEPTH="${DEPTH:-0}"
|
||||||
|
|
||||||
|
for v in PP TG; do
|
||||||
|
case "${!v}" in ''|*[!0-9]*) echo "$v must be a whole number, got '${!v}'" >&2; exit 2 ;; esac
|
||||||
|
done
|
||||||
|
|
||||||
|
for v in CON DEPTH; do
|
||||||
|
for x in ${!v}; do
|
||||||
|
case "$x" in ''|*[!0-9]*) echo "$v must be whole numbers, got '${!v}'" >&2; exit 2 ;; esac
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
command -v llama-benchy >/dev/null || {
|
||||||
|
echo "llama-benchy not found. Install it with: uv tool install git+https://github.com/eugr/llama-benchy" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# shellcheck disable=SC2086 # PP, TG, CON, DEPTH split on spaces on purpose: benchy takes lists
|
||||||
|
exec llama-benchy \
|
||||||
|
--base-url "$BASE_URL" \
|
||||||
|
--model "$MODEL" \
|
||||||
|
--latency-mode api \
|
||||||
|
--tokenizer "$TOKENIZER" \
|
||||||
|
--pp $PP --tg $TG \
|
||||||
|
--no-cache \
|
||||||
|
--exact-tg \
|
||||||
|
--concurrency $CON \
|
||||||
|
--depth $DEPTH \
|
||||||
|
"$@"
|
||||||
Reference in New Issue
Block a user