Skip to content

Faster-Whisper v1.2.1: Install Guide That Actually Works

Install Faster-Whisper v1.2.1 the right way - CUDA 12/cuDNN 9 setup, the ctranslate2 downgrade trick, verification, and fixes for the libcudnn error.

7 min readIntermediate

By the end of this guide, running python -c "from faster_whisper import WhisperModel; m=WhisperModel('small', device='cuda', compute_type='float16'); print(list(m.transcribe('sample.wav')[0])[0].text)" should print a clean transcription line – no libcudnn_ops.so.9 stack trace, no ctranslate2 version fight. That’s the goal. We’ll walk backwards through what it takes to get there with the current release, faster-whisper 1.2.1 (as of mid-2025).

SYSTRAN/faster-whisper is a CTranslate2 reimplementation of OpenAI’s Whisper. It’s up to 4 times faster than openai/whisper for the same accuracy while using less memory, and efficiency improves further with 8-bit quantization on both CPU and GPU. Nice numbers. The install path, though, is where people bleed hours.

System requirements (the honest version)

Most guides list “Python 3.8+” and move on. That’s misleading in mid-2025. Here’s the real matrix before you type a single pip command.

Component Minimum Recommended
Python 3.9 3.12 (avoid 3.13)
OS Linux / Windows 10 / macOS 10.15 Ubuntu 22.04
RAM (CPU-only, small model) 4 GB 8 GB
VRAM (large-v3, float16) ~5 GB 8 GB+
GPU stack CUDA 11 + cuDNN 8 (with pinned ctranslate2) CUDA 12 + cuDNN 9
FFmpeg Not required Not required

Python 3.13 is a hard blocker: ctranslate2 has no wheels for it and no source dist, so Python 3.12 is your ceiling for now (GitHub issue #1240). The FFmpeg row also catches people off-guard – audio decoding goes through PyAV, which bundles the FFmpeg libraries inside its own wheel. No system-level apt install ffmpeg required, unless you’re also capturing live microphone audio via PyAudio, which needs system FFmpeg and PortAudio separately.

The CUDA/cuDNN decision (skip this and you’ll waste an evening)

This is where every tutorial waves its hands. The latest ctranslate2 only supports CUDA 12 and cuDNN 9. Need CUDA 11 + cuDNN 8? Pin ctranslate2 to 3.24.0. Still on CUDA 12 but stuck with cuDNN 8? Pin to 4.4.0. That’s the whole matrix, per the official README. Pick your lane before installing anything:

  • Fresh machine, no CUDA yet → Install CUDA 12.x + cuDNN 9, use latest ctranslate2 (comes with faster-whisper). Cleanest path.
  • Existing rig on CUDA 11 → Pin ctranslate2==3.24.0. Don’t upgrade blindly.
  • Docker / cloud VM with mystery drivers → Pin ctranslate2==4.4.0. Safest default when you don’t control the base image.

Pro tip: Before installing, run nvidia-smi and look at the CUDA Version in the header. That’s the maximum CUDA runtime your driver supports – not what’s actually installed. Match your pip choice to that ceiling, not to what someone’s blog post used.

Installing Faster-Whisper 1.2.1

Create an isolated env. Skip this and you’ll fight torch versions later.

# Linux/macOS
python3.12 -m venv ~/venvs/fwhisper
source ~/venvs/fwhisper/bin/activate

# Windows PowerShell
py -3.12 -m venv fwhisper
.fwhisperScriptsActivate.ps1

pip install --upgrade pip
pip install faster-whisper

CPU-capable install done. For GPU: the official docs route avoids touching your system-wide CUDA install by pulling the NVIDIA runtime libs through pip directly.

pip install nvidia-cublas-cu12 nvidia-cudnn-cu12==9.*

# Linux only - set BEFORE launching Python
export LD_LIBRARY_PATH=`python3 -c 'import os; import nvidia.cublas.lib; import nvidia.cudnn.lib; print(os.path.dirname(nvidia.cublas.lib.__file__) + ":" + os.path.dirname(nvidia.cudnn.lib.__file__))'`

LD_LIBRARY_PATH must be set before Python starts – ctranslate2 resolves the library path at import time, not at call time. Set it after and nothing breaks loudly; it just silently falls back to CPU. On Windows, add those DLL dirs to PATH or use the standalone route below.

Version-pinning friction like this isn’t unique to Faster-Whisper – it shows up across the CTranslate2 ecosystem whenever a new cuDNN major version drops and older wheels haven’t caught up. The pattern: if something worked last week and breaks after an upgrade, a transitive ctranslate2 bump is almost always the culprit. Keep that mental model handy.

Alternative: standalone binary (no Python)

If Python conflicts put you off, Purfview’s whisper-standalone-win provides standalone executables – no Python required. Current release tags include Faster-Whisper-XXL r245.4 (added distil-large-v3.5) and Faster-Whisper r192.3. Download, unzip, run the exe. cuBLAS and cuDNN are bundled in the archive.

Verify it actually works

Don’t trust a silent install. Run this script:

from faster_whisper import WhisperModel
import faster_whisper

print(f"Version: {faster_whisper.__version__}")

# GPU: device="cuda", compute_type="float16"
# CPU: device="cpu", compute_type="int8"
model = WhisperModel("small", device="cuda", compute_type="float16")

segments, info = model.transcribe("sample.wav", beam_size=5)
print(f"Detected {info.language} @ {info.language_probability:.2f}")
for seg in segments:
 print(f"[{seg.start:.2f} → {seg.end:.2f}] {seg.text}")

First run downloads the CTranslate2 weights automatically – loading a model by size (e.g., WhisperModel("large-v3")) triggers an auto-download from the Hugging Face Hub. Expect a few hundred MB for small, ~3 GB for large-v3. If the script prints segments and returns, you’re done.

Released October 2024: large-v3-turbo delivers roughly 8x faster decoding than large-v3 with minimal accuracy loss for English. Non-English? Stick with large-v3. Turbo is a strong default for English podcasts – the accuracy delta doesn’t matter for most workflows.

Do you actually need the largest model? The official benchmarks were run on a NVIDIA RTX 3070 Ti 8GB with CUDA 12.4 – consumer hardware. If small.en gives you acceptable accuracy, large-v3 is just space heater mode.

Common errors and what actually fixes them

The single most reported failure is this one:

Unable to load any of {libcudnn_ops.so.9.1.0, libcudnn_ops.so.9.1,
 libcudnn_ops.so.9, libcudnn_ops.so}
Invalid handle. Cannot load symbol cudnnCreateTensorDescriptor
Aborted (core dumped)

Two fixes work, per GitHub discussion #1114: downgrade with pip install faster-whisper ctranslate2==4.4.0, or install CUDA 12.4 and the latest torch via pip install faster-whisper torch --extra-index-url https://download.pytorch.org/whl/cu124. Pick one. Don’t do both.

Running the linuxserver Docker image? The 2.4.0-gpu tag is broken with the same libcudnn_ops error (linuxserver issue #42, May 2025). Pin the tag to 2.3.0-gpu in your compose file until the maintainers ship a rebuild.

Other common ones:

  • ERROR: Could not find a version that satisfies the requirement faster-whisper – you’re on Python 3.13. Switch to 3.12.
  • ModuleNotFoundError: No module named 'faster_whisper' – wrong venv active. Check with pip show faster-whisper.
  • CPU transcription is slow – you forgot OMP_NUM_THREADS. Set it to your physical core count before launching Python.

Upgrading and uninstalling

Upgrading between minor versions is boring in the good way:

pip install --upgrade faster-whisper

# Or pin to a specific commit off master
pip install --force-reinstall 
 "faster-whisper @ https://github.com/SYSTRAN/faster-whisper/archive/refs/heads/master.tar.gz"

Watch out: bumping faster-whisper may pull a newer ctranslate2 that breaks your CUDA setup. If a working install suddenly errors after an upgrade, pin ctranslate2 back to whatever version you had before. Clean removal is pip uninstall faster-whisper ctranslate2 nvidia-cublas-cu12 nvidia-cudnn-cu12, then delete the Hugging Face cache at ~/.cache/huggingface/hub/ to reclaim the model weights (a few GB per model size).

FAQ

Do I need FFmpeg installed?

No. PyAV bundles it inside the wheel. Exception: capturing live microphone audio with PyAudio or sounddevice requires system FFmpeg and PortAudio separately – PyAV handles file decoding, not mic capture.

My transcripts look identical to openai-whisper but the timing is off. Why?

Different defaults. openai/whisper uses beam_size=1 by default; faster-whisper uses beam_size=5. If you’re reproducing someone’s timing numbers or comparing benchmarks, force beam_size=1 on both sides. Same for CPU thread count: set identical OMP_NUM_THREADS values or you’re comparing different configurations.

Should I use faster-whisper or the standalone XXL exe?

Python package if you’re integrating into an app or pipeline – full API control, custom VAD, easy model swaps. Faster-Whisper-XXL if you want to drag-and-drop a video and get subtitles. That’s the entire decision.

Next step: grab a 30-second WAV clip from your own workflow – a voice memo, a podcast intro, a Zoom recording – and run the verification script above. If it prints segments, move on to configuring VAD (vad_filter=True), which cuts hallucinations on silent audio. That’s the next lever worth pulling.