Files
2026-02-27 15:07:05 +00:00

142 lines
4.4 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
set -uo pipefail
MODEL_DIR="$(realpath ~/models)"
RESULTDIR="results"
mkdir -p "$RESULTDIR"
# Pick exactly one .gguf per model: either
# - any .gguf without "-000*-of-" (single-file models)
# - or the first shard "*-00001-of-*.gguf"
mapfile -t MODEL_PATHS < <(
find "$MODEL_DIR" -type f -name '*.gguf' \
\( -name '*-00001-of-*.gguf' -o -not -name '*-000*-of-*.gguf' \) \
| sort
)
if (( ${#MODEL_PATHS[@]} == 0 )); then
echo "❌ No models found under $MODEL_DIR – check your paths/patterns!"
exit 1
fi
echo "Found ${#MODEL_PATHS[@]} model(s) to bench:"
for p in "${MODEL_PATHS[@]}"; do
echo " • $p"
done
echo
declare -A CMDS=(
[rocm6_4_4]="toolbox run -c llama-rocm-6.4.4 -- /usr/local/bin/llama-bench"
[rocm7_2]="toolbox run -c llama-rocm-7.2 -- /usr/local/bin/llama-bench"
[rocm7_nightlies]="toolbox run -c llama-rocm7-nightlies -- /usr/local/bin/llama-bench"
[vulkan_amdvlk]="toolbox run -c llama-vulkan-amdvlk -- /usr/sbin/llama-bench"
[vulkan_radv]="toolbox run -c llama-vulkan-radv -- /usr/sbin/llama-bench"
)
get_hblt_modes() {
local env="$1"
if [[ "$env" == rocm* ]]; then
printf '%s\n' default off
else
printf '%s\n' default
fi
}
for MODEL_PATH in "${MODEL_PATHS[@]}"; do
MODEL_NAME="$(basename "$MODEL_PATH" .gguf)"
if [[ "$MODEL_PATH" == *"-00001-of-"* ]]; then
# Multi-shard model: sum all shards
DIR="$(dirname "$MODEL_PATH")"
BASE="$(basename "$MODEL_PATH")"
PATTERN="${BASE/-00001-of-/-*-of-}"
MODEL_SIZE=$(find "$DIR" -maxdepth 1 -name "$PATTERN" -exec stat -c%s {} + | awk '{s+=$1} END {print s}')
else
# Single-file model
MODEL_SIZE=$(stat -c%s "$MODEL_PATH")
fi
# Threshold: 30 GiB = 32212254720 bytes. Using 32000000000 as a safe cutoff.
if (( MODEL_SIZE > 32000000000 )); then
GPU_DEVICES="0,1"
GPU_SUFFIX="__dual"
else
GPU_DEVICES="0"
GPU_SUFFIX="__single"
fi
for ENV in "${!CMDS[@]}"; do
CMD="${CMDS[$ENV]}"
mapfile -t HBLT_MODES < <(get_hblt_modes "$ENV")
for MODE in "${HBLT_MODES[@]}"; do
BASE_SUFFIX=""
CMD_EFFECTIVE="$CMD"
if [[ "$ENV" == rocm* ]]; then
if [[ "$MODE" == off ]]; then
BASE_SUFFIX="__hblt0"
CMD_EFFECTIVE="${CMD_EFFECTIVE/-- /-- env HIP_VISIBLE_DEVICES=$GPU_DEVICES ROCBLAS_USE_HIPBLASLT=0 }"
else
CMD_EFFECTIVE="${CMD_EFFECTIVE/-- /-- env HIP_VISIBLE_DEVICES=$GPU_DEVICES ROCBLAS_USE_HIPBLASLT=1 }"
fi
fi
# run twice: baseline and with flash attention
for FA in 1; do
SUFFIX="$BASE_SUFFIX"
EXTRA_ARGS=()
if (( FA == 1 )); then
SUFFIX="${SUFFIX}__fa1"
EXTRA_ARGS=( -fa 1 )
fi
for CTX in default longctx16384 longctx32768; do
CTX_SUFFIX=""
CTX_ARGS=()
if [[ "$CTX" == longctx32768 ]]; then
CTX_SUFFIX="__longctx32768"
CTX_ARGS=( -p 2048 -n 32 -d 32768 )
if [[ "$ENV" == *vulkan* ]]; then
CTX_ARGS+=( -ub 512 )
else
CTX_ARGS+=( -ub 2048 )
fi
elif [[ "$CTX" == longctx16384 ]]; then
CTX_SUFFIX="__longctx16384"
CTX_ARGS=( -p 2048 -n 32 -d 16384 )
if [[ "$ENV" == *vulkan* ]]; then
CTX_ARGS+=( -ub 512 )
else
CTX_ARGS+=( -ub 2048 )
fi
fi
OUT="$RESULTDIR/${MODEL_NAME}__${ENV}${SUFFIX}${CTX_SUFFIX}${GPU_SUFFIX}.log"
CTX_REPS=3
if [[ "$CTX" == longctx* ]]; then
CTX_REPS=1
fi
if [[ -s "$OUT" ]]; then
echo "⏩ Skipping [${ENV}] ${MODEL_NAME}${SUFFIX}${CTX_SUFFIX:+ ($CTX_SUFFIX)}, log already exists at $OUT"
continue
fi
FULL_CMD=( $CMD_EFFECTIVE -ngl 99 -m "$MODEL_PATH" "${EXTRA_ARGS[@]}" "${CTX_ARGS[@]}" -r "$CTX_REPS" )
printf "\n▶ [%s] %s%s%s\n" "$ENV" "$MODEL_NAME" "${SUFFIX:+ $SUFFIX}" "${CTX_SUFFIX:+ $CTX_SUFFIX}"
printf " → log: %s\n" "$OUT"
printf " → cmd: %s\n\n" "${FULL_CMD[*]}"
if ! "${FULL_CMD[@]}" >"$OUT" 2>&1; then
status=$?
echo "✖ ! [${ENV}] ${MODEL_NAME}${SUFFIX}${CTX_SUFFIX:+ $CTX_SUFFIX} failed (exit ${status})" >>"$OUT"
echo " * [${ENV}] ${MODEL_NAME}${SUFFIX}${CTX_SUFFIX:+ $CTX_SUFFIX} : FAILED"
fi
done
done
done
done
done