39 lines
1.8 KiB
Bash
39 lines
1.8 KiB
Bash
#!/usr/bin/env bash
|
||||
|
|
# Phase 0 验证脚本:用 llama.cpp + Qwen3-ASR 转写一段音频并测 RTF
|
|||
|
|
#
|
|||
|
|
# 依赖(本机验证环境:Deepin 25 / Qt 6.8 / x86_64):
|
|||
|
|
# libllama0, libllama-dev, libggml0, libggml-dev, libmtmd (系统自带 9951+dfsg-1deepin1)
|
|||
|
|
# llama.cpp-tools 的二进制(本脚本从 deb 解包到 LLAMA_TOOLS,不需要 root 安装)
|
|||
|
|
#
|
|||
|
|
# 用法: ./bench.sh <audio.wav> [prompt] # prompt 默认 <__media__>
|
|||
|
|
# 可选环境变量: THREADS / MODEL / MMPROJ / LLAMA_TOOLS / LLAMA_LIBDIR / TMO
|
|||
|
|
set -uo pipefail
|
|||
|
|
|
|||
|
|
LLAMA_TOOLS="${LLAMA_TOOLS:-/tmp/opencode/llama-tools}"
|
|||
|
|
LLAMA_LIBDIR="${LLAMA_LIBDIR:-/usr/lib/x86_64-linux-gnu/llama}"
|
|||
|
|
MODEL="${MODEL:-/tmp/opencode/models/Qwen3-ASR-0.6B-Q8_0.gguf}"
|
|||
|
|
MMPROJ="${MMPROJ:-/tmp/opencode/models/mmproj-Qwen3-ASR-0.6B-Q8_0.gguf}"
|
|||
|
|
AUDIO="${1:?usage: bench.sh <audio> [prompt]}"
|
|||
|
|
PROMPT="${2:-<__media__>}"
|
|||
|
|
THREADS="${THREADS:-8}"
|
|||
|
|
CLI="$LLAMA_TOOLS/usr/bin/llama-cli"
|
|||
|
|
|
|||
|
|
export LD_LIBRARY_PATH="$LLAMA_LIBDIR:$LLAMA_TOOLS/usr/lib/x86_64-linux-gnu/llama"
|
|||
|
|
|
|||
|
|
dur=$(ffprobe -v error -show_entries format=duration -of csv=p=0 "$AUDIO")
|
|||
|
|
printf '音频: %s (%ss) 模型: %s 线程: %s\n' "$AUDIO" "$dur" "$(basename "$MODEL")" "$THREADS"
|
|||
|
|
|
|||
|
|
# 关键: stdin 必须接 /dev/null 并在外层套 timeout
|
|||
|
|
# 否则 llama-cli 生成完会回到 stdin 读取循环而挂住
|
|||
|
|
t0=$(date +%s.%N)
|
|||
|
|
timeout "${TMO:-300}" "$CLI" -m "$MODEL" --mmproj "$MMPROJ" --audio "$AUDIO" \
|
|||
|
|
-p "$PROMPT" -n 256 --temp 0 -t "$THREADS" -st --simple-io \
|
|||
|
|
</dev/null >/tmp/lc_out.log 2>/tmp/lc_err.log
|
|||
|
|
rc=$?
|
|||
|
|
t1=$(date +%s.%N)
|
|||
|
|
|
|||
|
|
[ "$rc" = 124 ] && echo "(警告: 被 timeout 杀掉)"
|
|||
|
|
echo "---- 转写结果 ----"
|
|||
|
|
cat /tmp/lc_out.log
|
|||
|
|
echo "---- 计时 ----"
|
|||
|
|
python3 -c "print(f'墙钟总耗时: {$t1-$t0:.2f}s 音频: $dur s → RTF(含加载) ≈ {($t1-$t0)/$dur:.3f}')"
|