mirror of
https://github.com/yusufipk/dikte.git
synced 2026-09-11 19:06:11 +00:00
The CPU run passed -ng, which tells whisper.cpp not to look for a backend at all, so the claim the bundle rests on, that it starts and transcribes where Vulkan cannot, was never tested. Dikte passes -ng only when its GPU setting is off; every other run goes through the backend registry. Both runs lose the flag, and a third one is added between them: the loader installed, nothing behind it. That is a real machine, libvulkan pulled in by something else with no driver to go with it, and it is the one whose answer nobody knew.
77 lines
2.8 KiB
Bash
Executable File
77 lines
2.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
mode=${1:?usage: smoke-runtime.sh cpu|noicd|vulkan}
|
|
: "${OUT_DIR:=work/out}"
|
|
: "${FIXTURE_SOURCE:=vendor/whisper.cpp}"
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
OUT_DIR="$(realpath "$OUT_DIR")"
|
|
FIXTURE_SOURCE="$(realpath "$FIXTURE_SOURCE")"
|
|
asset=whisper-bin-ubuntu-vulkan-x64
|
|
case "$mode" in
|
|
cpu) dockerfile=Dockerfile.runtime-cpu; image=dikte-whisper-runtime-cpu:spike ;;
|
|
noicd) dockerfile=Dockerfile.runtime-noicd; image=dikte-whisper-runtime-noicd:spike ;;
|
|
vulkan) dockerfile=Dockerfile.runtime-vulkan; image=dikte-whisper-runtime-vulkan:spike ;;
|
|
*) echo "unknown mode: $mode" >&2; exit 2 ;;
|
|
esac
|
|
|
|
tmp=$(mktemp -d)
|
|
trap 'rm -rf "$tmp"' EXIT
|
|
tar -xzf "$OUT_DIR/$asset.tar.gz" -C "$tmp"
|
|
docker build --pull=false -f "$SCRIPT_DIR/$dockerfile" -t "$image" "$SCRIPT_DIR"
|
|
|
|
args=("/bundle/$asset/whisper-server" -m /fixtures/model.bin
|
|
--host 127.0.0.1 --port 8080
|
|
--inference-path /v1/audio/transcriptions -l auto -sns -nlp)
|
|
env_args=()
|
|
# No -ng anywhere: Dikte passes it only when its GPU setting is off, so the
|
|
# run that has to survive a missing loader or a missing device is this one,
|
|
# where the backend registry actually goes looking for them.
|
|
if [[ "$mode" == vulkan ]]; then
|
|
env_args=(-e LIBGL_ALWAYS_SOFTWARE=1
|
|
-e VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/lvp_icd.x86_64.json)
|
|
fi
|
|
|
|
docker run --rm --name "dikte-whisper-$mode-smoke" \
|
|
-e SMOKE_MODE="$mode" \
|
|
"${env_args[@]}" \
|
|
-v "$tmp/$asset:/bundle/$asset:ro" \
|
|
-v "$FIXTURE_SOURCE/models/for-tests-ggml-base.en.bin:/fixtures/model.bin:ro" \
|
|
-v "$FIXTURE_SOURCE/samples/jfk.wav:/fixtures/jfk.wav:ro" \
|
|
"$image" bash -ec '
|
|
if [ "$SMOKE_MODE" = cpu ] && ldconfig -p | grep -q libvulkan.so.1; then
|
|
echo "CPU smoke image unexpectedly has a Vulkan loader" >&2
|
|
exit 1
|
|
fi
|
|
if [ "$SMOKE_MODE" = noicd ]; then
|
|
if ! ldconfig -p | grep -q libvulkan.so.1; then
|
|
echo "no-ICD smoke image has no Vulkan loader to load" >&2
|
|
exit 1
|
|
fi
|
|
if compgen -G "/usr/share/vulkan/icd.d/*.json" >/dev/null; then
|
|
echo "no-ICD smoke image has a driver after all" >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
"$@" >/tmp/server.log 2>&1 &
|
|
pid=$!
|
|
trap "kill $pid 2>/dev/null || true" EXIT
|
|
for _ in $(seq 1 120); do
|
|
kill -0 "$pid" 2>/dev/null || { cat /tmp/server.log; exit 1; }
|
|
if curl --silent --show-error --fail --max-time 180 \
|
|
-F file=@/fixtures/jfk.wav -F response_format=json \
|
|
http://127.0.0.1:8080/v1/audio/transcriptions >/tmp/response.json; then
|
|
grep -q "\"text\"" /tmp/response.json
|
|
if [ "$SMOKE_MODE" = vulkan ]; then
|
|
grep -q "loaded Vulkan backend" /tmp/server.log
|
|
fi
|
|
cat /tmp/response.json
|
|
cat /tmp/server.log
|
|
exit 0
|
|
fi
|
|
sleep 1
|
|
done
|
|
cat /tmp/server.log
|
|
exit 1
|
|
' bash "${args[@]}"
|