How to Configure GPU Acceleration with CUDA, Vulkan, or Metal for Meetily Transcription
Meetily automatically detects compatible GPUs at runtime, but you must compile the Tauri application with the specific backend feature flag (cuda, vulkan, hipblas, or metal) to enable hardware-accelerated transcription.
Meetily is an open-source meeting transcription application built with Tauri and Rust that leverages the whisper-rs crate for speech recognition. To achieve real-time transcription performance, you can configure GPU acceleration using CUDA for NVIDIA cards, Vulkan for AMD/Intel GPUs, or Metal for Apple Silicon. The configuration process involves compile-time feature selection and runtime hardware detection working together to initialize the Whisper context with optimal acceleration.
Prerequisites: Install System Dependencies
Before building Meetily, install the SDK corresponding to your GPU architecture. The detection logic in hardware_detector.rs (lines 60-71) checks for these environment variables and libraries during initialization.
Metal (macOS Apple Silicon)
No additional installation required. Metal is built into macOS 13+ on Apple Silicon devices. CoreML optimizations are automatically available when the metal feature is enabled.
CUDA (NVIDIA)
Install the NVIDIA CUDA Toolkit to set CUDA_PATH or CUDA_HOME. Verify installation with:
nvcc --version
The detection code checks for these environment variables and typical Linux paths like /usr/local/cuda.
Vulkan (AMD/Intel)
Install the Vulkan SDK to configure VULKAN_SDK. On Linux, ensure the vulkan-1 driver (libvulkan.so) is available in your library path.
HIP BLAS (AMD ROCm)
For AMD GPUs on Linux, install the ROCm platform and ensure hipblas headers are discoverable. This enables the hipblas backend alternative to Vulkan.
Building Meetily with GPU Support
Meetily uses compile-time backend selection defined in frontend/src-tauri/Cargo.toml (lines 38-49). You must specify the appropriate feature flag when building the Tauri application.
Build Commands by Platform
Navigate to the Tauri source directory before building:
cd frontend/src-tauri
macOS (Metal - default):
cargo build --release
Metal is the default on macOS; no extra feature flag is required.
Windows/Linux with NVIDIA:
cargo build --release --features cuda
Windows/Linux with AMD/Intel:
cargo build --release --features vulkan
Linux with AMD ROCm:
cargo build --release --features hipblas
CPU-only fallback (optional):
If you lack GPU hardware, you can still optimize CPU performance:
cargo build --release --features openblas
cargo build --release --features openmp
How Meetily Detects and Selects GPU Backends
The acceleration system combines compile-time configuration with runtime hardware probing to create a WhisperContextAcceleration struct.
Step 1: Compile-Time Backend Detection
The WhisperCompiledBackend::current() function in acceleration.rs (lines 13-25) uses Rust's cfg! macros to determine which backend was compiled:
cfg!(feature = "cuda")→Cudacfg!(feature = "vulkan")→Vulkancfg!(feature = "hipblas")→HipBlascfg!(target_os = "macos")orcfg!(feature = "metal")→Metal- Default →
Cpu
Step 2: Runtime Hardware Detection
The HardwareProfile::detect() method in hardware_detector.rs (lines 84-104) calls detect_gpu() to probe the system:
- Checks for Metal support on macOS
- Validates
CUDA_PATHand NVIDIA libraries on Linux/Windows - Detects Vulkan loader availability for AMD/Intel
- Returns a
(has_gpu_acceleration, GpuType)tuple
Step 3: Acceleration Context Construction
The whisper_context_acceleration_for function in acceleration.rs (lines 61-78) reconciles the compiled backend with the detected GPU:
- Sets
use_gputotrueunless the compiled backend isCpu - Enables Flash Attention for Metal and CUDA backends when
PerformanceTierisHighorUltra(lines 69-71) - Creates a human-readable status label describing the acceleration type
Verifying GPU Acceleration at Runtime
You can query the active acceleration configuration using the public API from whisper_engine/acceleration.rs:
use meetily::whisper_engine::acceleration::{WhisperContextAcceleration, WhisperCompiledBackend};
use meetily::audio::HardwareProfile;
fn check_acceleration_status() {
let profile = HardwareProfile::detect();
let accel = whisper_context_acceleration_for(
WhisperCompiledBackend::current(),
profile.gpu_type,
profile.performance_tier,
);
println!("Compiled Backend: {}", accel.compiled_backend.as_str());
println!("Runtime GPU Detected: {:?}", accel.runtime_detected_gpu);
println!("GPU Active: {}", accel.use_gpu);
println!("Flash Attention: {}", accel.flash_attn);
println!("Status: {}", accel.status_label());
}
Expected outputs:
- Metal build on macOS: "Metal GPU with Flash Attention (Ultra-Fast)"
- CUDA build with High tier: "CUDA GPU with Flash Attention (Ultra-Fast)"
- Vulkan build: "Vulkan GPU" (Flash Attention disabled for this backend)
Summary
- Compile with features: Use
--features cuda,--features vulkan, or--features hipblaswhen building; Metal is default on macOS - Source locations: Configuration lives in
frontend/src-tauri/Cargo.toml, detection logic inhardware_detector.rs, and acceleration context inwhisper_engine/acceleration.rs - Flash Attention: Automatically enabled for Metal and CUDA when system resources indicate
HighorUltraperformance tiers - Runtime verification: Use
WhisperContextAccelerationto confirm GPU initialization and backend selection
Frequently Asked Questions
Why isn't my GPU being used after building with the feature flag?
The compiled backend must match the runtime detected GPU type. If you build with --features cuda but your system lacks the CUDA toolkit or CUDA_PATH environment variable, HardwareProfile::detect() falls back to CPU mode. Verify your SDK installation and check the runtime_detected_gpu field to confirm detection.
Can I switch between GPU backends without recompiling Meetily?
No. The GPU backend is determined at compile time through Cargo features in Cargo.toml (lines 38-49). To switch from CUDA to Vulkan, you must rebuild with cargo build --release --features vulkan. The runtime detection only validates whether the compiled backend's hardware is present, not selecting alternative backends.
Does GPU acceleration support all Whisper model sizes?
GPU acceleration works with all model sizes, but the Flash Attention optimization (enabled in acceleration.rs lines 69-71) specifically activates for Metal and CUDA backends when the system performance tier is High or Ultra. Larger models benefit most from GPU acceleration, though they require sufficient VRAM. The WhisperEngine in whisper_engine.rs handles model loading with the acceleration context regardless of model size.
How do I troubleshoot GPU initialization failures?
Check the status_label() output from the WhisperContextAcceleration struct. If it shows "CPU only" despite building with GPU features, verify:
- Environment variables (
CUDA_PATHorVULKAN_SDK) are set - GPU drivers are installed and the hardware is detected by the OS
- The correct feature flag was used during compilation (
WhisperCompiledBackend::current()validates this)
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →