Description
vulkan-vibevoice-cpp (via LocalAI's POST /v1/audio/diarization) crashes reliably during inference on Intel Arc GPUs (confirmed on an Intel Arc Pro B70 / Battlemage), even though model loading succeeds fine. cpu-vibevoice-cpp with the identical model/weights works correctly, so this is Vulkan-backend-specific, not a model or config issue.
Crash
/LocalAI/backend/go/vibevoice-cpp/sources/vibevoice.cpp/third_party/ggml/src/ggml-vulkan/ggml-vulkan.cpp:6610:
GGML_ASSERT(wg0 <= ctx->device->properties.limits.maxComputeWorkGroupCount[0] &&
wg1 <= ctx->device->properties.limits.maxComputeWorkGroupCount[1] &&
wg2 <= ctx->device->properties.limits.maxComputeWorkGroupCount[2]) failed
Backend process exits (exit code 2 under LocalAI's supervisor, or a native abort/SIGABRT when run standalone), taking the whole request down. LocalAI's own process-supervisor logging doesn't surface this — it just reports a generic "backend process exited unexpectedly" / gRPC EOF — this trace was captured by running the backend binary manually and driving it with a raw gRPC LoadModel+Diarize call.
Environment
- Model:
vibevoice-cpp-asr (7B, Q4_K GGUF, from mudler/vibevoice.cpp-models on HuggingFace)
- Backend:
vulkan-vibevoice-cpp (from quay.io/go-skynet/local-ai-backends:latest-gpu-vulkan-vibevoice-cpp)
- GPU: Intel Arc Pro B70 (Battlemage), kernel driver
xe
- LocalAI:
v4.8.2
- Confirmed working: same model + weights via
cpu-vibevoice-cpp (CPU backend), accurate real-world diarization result (correct speaker count and turn attribution on a 55s, 6-turn, two-speaker test), just slow (~2.3x realtime)
Reproduction
- Load
vibevoice-cpp-asr (or presumably any vibevoice.cpp ASR/diarization model) via the vulkan-vibevoice-cpp backend on an Intel Arc GPU.
- Send a real
Diarize (or presumably Transcript) request against any real audio clip a few seconds or longer.
- The backend process aborts with the assertion above; the caller sees the load/inference call fail (
Unavailable: Socket closed over gRPC, or a generic 500 via LocalAI's HTTP layer).
Likely related
This looks like the same bug class reported multiple times against ggml-org/llama.cpp's Vulkan backend (which vibevoice.cpp vendors under third_party/ggml), on unrelated models and even different GPU vendors:
Root cause per those reports: some op computes a workgroup dispatch count from a tensor dimension (context size, batch, etc.) that can exceed a Vulkan device's per-dimension maxComputeWorkGroupCount limit — proposed fixes split an oversized dispatch into multiple vkCmdDispatch calls, or fix the workgroup-size denominator math. If third_party/ggml here is a submodule/vendored snapshot of upstream ggml, a fix landing there would likely resolve this too once synced.
Happy to provide more detail (exact request parameters, full backend stdout/stderr) if useful.
Description
vulkan-vibevoice-cpp(via LocalAI'sPOST /v1/audio/diarization) crashes reliably during inference on Intel Arc GPUs (confirmed on an Intel Arc Pro B70 / Battlemage), even though model loading succeeds fine.cpu-vibevoice-cppwith the identical model/weights works correctly, so this is Vulkan-backend-specific, not a model or config issue.Crash
Backend process exits (exit code 2 under LocalAI's supervisor, or a native abort/SIGABRT when run standalone), taking the whole request down. LocalAI's own process-supervisor logging doesn't surface this — it just reports a generic "backend process exited unexpectedly" / gRPC
EOF— this trace was captured by running the backend binary manually and driving it with a raw gRPCLoadModel+Diarizecall.Environment
vibevoice-cpp-asr(7B, Q4_K GGUF, frommudler/vibevoice.cpp-modelson HuggingFace)vulkan-vibevoice-cpp(fromquay.io/go-skynet/local-ai-backends:latest-gpu-vulkan-vibevoice-cpp)xev4.8.2cpu-vibevoice-cpp(CPU backend), accurate real-world diarization result (correct speaker count and turn attribution on a 55s, 6-turn, two-speaker test), just slow (~2.3x realtime)Reproduction
vibevoice-cpp-asr(or presumably anyvibevoice.cppASR/diarization model) via thevulkan-vibevoice-cppbackend on an Intel Arc GPU.Diarize(or presumablyTranscript) request against any real audio clip a few seconds or longer.Unavailable: Socket closedover gRPC, or a generic 500 via LocalAI's HTTP layer).Likely related
This looks like the same bug class reported multiple times against
ggml-org/llama.cpp's Vulkan backend (whichvibevoice.cppvendors underthird_party/ggml), on unrelated models and even different GPU vendors:Root cause per those reports: some op computes a workgroup dispatch count from a tensor dimension (context size, batch, etc.) that can exceed a Vulkan device's per-dimension
maxComputeWorkGroupCountlimit — proposed fixes split an oversized dispatch into multiplevkCmdDispatchcalls, or fix the workgroup-size denominator math. Ifthird_party/ggmlhere is a submodule/vendored snapshot of upstreamggml, a fix landing there would likely resolve this too once synced.Happy to provide more detail (exact request parameters, full backend stdout/stderr) if useful.