Vulkan: vkCreateDevice fails with ErrorExtensionNotPresent on a device reporting bf16: 0
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 58/100
Línea de trabajo
Comienza en la ruta de creación de dispositivos del backend de Vulkan y compara la comprobación de capacidades de bf16 con la solicitud de extensiones del dispositivo. Reproduce el problema con el comando parakeet-cli y verifica que el dispositivo AMD se cargue sin GGML_VK_DISABLE_BFLOAT16=1 mientras las matrices cooperativas permanezcan habilitadas. Los puntos de entrada de la C API parakeet_capi_load y parakeet_capi_last_error proporcionan contexto adicional para la notificación de errores.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Every model fails to load on the Vulkan backend on an AMD Radeon 880M (RDNA 3.5 integrated).
The backend enumerates the device, reports bf16: 0, and then requests a bfloat16 device extension
the driver does not expose, so vkCreateDevice fails and no model can be loaded at all.
Setting GGML_VK_DISABLE_BFLOAT16=1 fixes it completely, with cooperative matrices still enabled.
Environment
| parakeet.cpp | v0.5.0, prebuilt parakeet-v0.5.0-bin-win-vulkan-x64.zip |
sha256 717c416fab299755e8140137e3a0115121ce1acb6379d13c60f2f0613f6c13a3 |
|
| OS | Windows 11 (10.0.26200), x64 |
| GPU | AMD Radeon 880M (integrated, RDNA 3.5), driver 32.0.13022.3006 |
| Vulkan | API 1.3.302, driverVersion 2.0.331 |
| Model | tdt-0.6b-v3-f16.gguf (also reproduced with tdt-0.6b-v3-q4_k.gguf) |
Reproduction
Using only the prebuilt CLI from the release:
parakeet-cli transcribe --model tdt-0.6b-v3-f16.gguf --input short.wav
Output:
ggml_vulkan: Found 1 Vulkan devices:
ggml_vulkan: 0 = AMD Radeon(TM) 880M Graphics (AMD proprietary driver) | uma: 1 | fp16: 1 | bf16: 0 |
warp size: 64 | shared memory: 32768 | int dot: 1 | matrix cores: KHR_coopmat
transcribe failed: vk::PhysicalDevice::createDevice: ErrorExtensionNotPresent
ERROR: vkDestroyFence: Invalid device [VUID-vkDestroyFence-device-parameter]
The process then exits with 0xC0000409 (STATUS_STACK_BUFFER_OVERRUN) rather than a clean error
exit — the vkDestroyFence line is teardown running against the device that was never created.
Any 10-second 16 kHz mono PCM WAV reproduces it; the failure is at device creation, before the audio
is used.
Note that parakeet-cli info <model.gguf> succeeds on this machine. It reads GGUF metadata and
never creates a backend, so it is not a useful check for this.
The cause
VK_ERROR_EXTENSION_NOT_PRESENT from vkCreateDevice means a requested device extension is not
available. vulkaninfo on this device shows:
VK_KHR_cooperative_matrix— present, extension revision 2- no bfloat16 extension of any kind — absent
The backend has already worked this out: it prints bf16: 0. It then requests a bfloat16 device
extension anyway, which cannot succeed. The capability check and the extension request appear to
disagree.
Workarounds, both confirmed
| Setting | Result | Device line |
|---|---|---|
| (none) | ErrorExtensionNotPresent |
matrix cores: KHR_coopmat |
GGML_VK_DISABLE_BFLOAT16=1 |
works | matrix cores: KHR_coopmat |
GGML_VK_DISABLE_COOPMAT=1 |
works | matrix cores: none |
GGML_VK_DISABLE_BFLOAT16=1 is the better of the two — it keeps cooperative matrices enabled and is
about 1.36x faster than disabling coopmat wholesale (measured over a 600 s file, 3 runs each,
mean real-time factor 0.0349 against 0.0473, run-to-run range 3.2% and 5.3%).
That GGML_VK_DISABLE_COOPMAT=1 also avoids it suggests the bfloat16 extension is requested from
the cooperative-matrix path rather than independently.
Ruled out
- Not the model or its size.
f16(1.34 GiB) andq4_k(644 MiB) fail identically. Both load
and decode correctly on thecpubackend on the same machine, from the same files. - Not memory.
maxMemoryAllocationSizeandmaxBufferSizeare both 2 GiB, against a 7.75 GiB
device-local heap with 7.36 GiB budget. - Not these, all of which still fail:
GGML_VK_DISABLE_F16,
GGML_VK_DISABLE_INTEGER_DOT_PRODUCT,GGML_VK_PREFER_HOST_MEMORY,
GGML_VK_ALLOW_SYSMEM_FALLBACK,GGML_VK_DISABLE_HOST_VISIBLE_VIDMEM.
Once it loads, it works correctly
With the workaround, Vulkan output matches the CPU backend closely on a 600 s file: all 106 segment
boundaries identical, 1,605 words against 1,606 on CPU, first divergence a punctuation difference.
So this is purely a device-creation problem, not a correctness one.
Suggested fix
Do not request the bfloat16 device extension when the device does not advertise it — the same
condition that already produces bf16: 0 in the device line. A device that lacks it currently cannot
create a Vulkan device at all, which makes the backend unusable rather than degraded.
Two smaller points that would have saved a lot of time here:
- The C API (
parakeet_capi_load) returnsNULLwith no message on this path, so anything using
the shared library instead of the CLI sees a bare load failure with no cause. Surfacing the
underlying error throughparakeet_capi_last_errorwould make it diagnosable. - Exiting via
STATUS_STACK_BUFFER_OVERRUNin teardown after a failed device creation looks like
memory corruption and sends you down the wrong path; guarding teardown on a device that was never
created would fail cleanly.
- Lenguaje dominante
- C++
- Estrellas
- 796
- Forks
- 97
- Merge medio
- 9 d 19 h
- PR fusionados (30 d)
- 4
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Sin plantilla de pull request
- Sin guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de mudler/parakeet.cpp
-
Dificultad 4/5 3-5 días Aptitud para principiantes 55/100
mudler/parakeet.cpp#68 ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 58/100
mudler/parakeet.cpp#61 ·
-
Real streaming from a micAbierto
Dificultad 3/5 1-2 días Aptitud para principiantes 48/100
mudler/parakeet.cpp#60 ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
mudler/parakeet.cpp#59 · 3 comentarios ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
mudler/parakeet.cpp#55 · 1 comentario ·
Todos los issues de mudler/parakeet.cpp
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
mpfaffenberger/privateer_reimagined#658 ·
Los mantenedores suelen responder en 1 día
-
Broken links in the docsAbierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
microsoft/onnxruntime#33018 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
AXERA-TECH/ax-llm#81 ·
-
enhancement
Dificultad 2/5 Medio día Aptitud para principiantes 78/100
ros-industrial/ros2_canopen#448 ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día