How it fits in
The backend sends transcription jobs toTRANSCRIPTION_SERVER via HTTP. The Whisper server fetches audio from a URL, transcribes it on the GPU, and returns a JSON transcript with speaker labels (when diarization is enabled).
Prerequisites
- An NVIDIA GPU with driver >= 550 (supports CUDA 12.4).
- Docker with the NVIDIA Container Toolkit installed.
Setup
The Docker image is built locally from@exulu/backend:
large-v3 model into the HuggingFace cache on your host. Subsequent starts are fast because the model is cached.
The container is marked healthy only after the model has finished loading. The health check has a start_period of 1200 seconds (20 minutes) to accommodate the initial download.
Speaker diarization (optional)
Diarization identifies who spoke each segment. It requires:- A HuggingFace account and access token (
HF_AUTH_TOKEN). - Accepting both pyannote model licences on HuggingFace:
speaker: "unknown". The logs print the exact licence URLs to accept.
Confirm diarization is working:
Pointing IMP at the server
SetTRANSCRIPTION_SERVER on the backend to the Whisper server’s URL:
Configuration reference
Docker image details
The image uses the cuDNN runtime flavour (not the plain CUDA runtime) because
faster-whisper’s ctranslate2 backend requires cuDNN at runtime. Using the plain CUDA runtime image results in a libcudnn … not found crash on the first transcription job.
CPU fallback
If you do not have an NVIDIA GPU, setWHISPER_DEVICE=cpu. The container will run without the --gpus all flag and transcription will work, but performance on large-v3 is roughly real-time or worse. Use a smaller WHISPER_MODEL (e.g. small or medium) for acceptable CPU throughput.