Files
voculinux/tests
Jatin K MalikandGitHub b945137d60 fix(vulkan): auto-select discrete GPU and add manual device selection (#590)
* fix(vulkan): auto-select discrete GPU and add manual device selection

On hybrid GPU systems (Intel iGPU + NVIDIA dGPU), whisper.cpp's Vulkan
backend always selected device 0 (the integrated GPU), resulting in
significantly slower performance.

Changes:
- Add detect_vulkan_devices() to enumerate all Vulkan GPUs and identify
  discrete vs integrated devices
- Set GGML_VULKAN_DEVICE env var before model init to select the correct
  GPU (auto-selects discrete GPU when available)
- Add whispercpp_gpu_device config option for manual device selection
- Add GPU device dropdown in Settings > Advanced for users with multiple
  Vulkan GPUs

Fixes #589

* test: add coverage for Vulkan GPU device selection

- Test detect_vulkan_devices() with single/multiple GPUs
- Test _prefer_discrete_vulkan_device() preference logic
- Test GPU device selection in recognition_manager
- Verify GGML_VULKAN_DEVICE env var is set correctly

* fix(speech_recognition): pass whispercpp GPU device to pywhispercpp Model context_params

The Vulkan device-selection logic from PR #590 set the GGML_VULKAN_DEVICE
environment variable, but pywhispercpp did not pick it up. Pass the selected
GPU device through the pywhispercpp Model context_params so whisper.cpp
actually initializes the requested Vulkan device.

Fixes #589

* fix(speech_recognition): fallback when pywhispercpp lacks context_params

Older pywhispercpp releases (< ~1.4.0) reject the context_params keyword
and raise TypeError. Detect that specific failure and retry without GPU
device selection so the engine still loads on those versions.

Fixes #589

* refactor(speech_recognition): inline context_params assignment

Simplify the GPU device selection path and remove the temporary dict.

* fix(vulkan): parse real vulkaninfo GPU0: headers

detect_vulkan_devices() only recognized fictional "GPU id = N" headers,
so real vulkaninfo --summary output (GPU0:/GPU1:) returned no devices and
hybrid NVIDIA systems fell through to CUDA. Also resolve preferred device
names by GPU id instead of list position.

Fixes #589

* refactor(whispercpp): drop ineffective GGML_VULKAN_DEVICE env var

pywhispercpp ignores GGML_VULKAN_DEVICE; device selection already goes
through context_params={"gpu_device": N}. Remove the misleading env write
so maintainers do not think the env var is the selection path.
2026-07-26 21:25:20 -07:00
..
2026-07-25 13:04:52 -07:00