Verified July 2026
faster-whisper — CTranslate2-Optimized Whisper for GPU Production
faster-whisper is SYSTRAN's CTranslate2-based reimplementation of OpenAI Whisper inference. Same weights, same accuracy, 2-4x faster on GPU. It's the default engine for WhisperX and the standard choice for self-hosted Whisper on CUDA.
Key takeaways
- ●Same Whisper, faster. Same weights as OpenAI Whisper, running on CTranslate2 instead of PyTorch. 2-4x faster on GPU, identical accuracy at FP16.
- ●Lower VRAM. Whisper large-v3 fits in 6 GB VRAM at FP16 (vs ~10 GB for reference PyTorch), 4 GB at INT8.
- ●Standard Python API. pip install faster-whisper, WhisperModel API. Drops into existing Python pipelines with minimal change.
- ●Foundation for WhisperX. WhisperX wraps faster-whisper + pyannote + wav2vec2 for out-of-the-box diarization and word-level timestamps.
- ●Production default. Most self-hosted Whisper services (including VexaScribe's hosted pipeline) run faster-whisper under the hood for GPU throughput.
- ●Not streaming. Whisper is a fixed-context Transformer, not a streaming model. Real-time patterns require external chunking + stitching logic.
What is faster-whisper?
faster-whisper is a Python library from SYSTRAN that reimplements OpenAI Whisper inference on top of CTranslate2 — a fast inference engine for Transformer models originally built for machine translation. The library takes the same Whisper model weights (converted to CTranslate2's format), the same tokenizer, and the same model architecture, and runs them through CTranslate2's optimized inference kernels instead of PyTorch's.
The result: 2-4x speedup vs reference OpenAI Whisper on GPU, ~4x speedup on CPU, and 30-40% lower VRAM footprint. Accuracy is identical to reference at FP16, and within 0.5% WER at INT8 quantization.
It's the de facto standard for self-hosted Whisper production in 2026. If you're running Whisper on CUDA infrastructure, you're probably running faster-whisper — either directly, or indirectly via WhisperX or another wrapper.
faster-whisper vs reference OpenAI Whisper
Same weights, different runtime.
| Aspect | OpenAI Whisper (reference) | faster-whisper |
|---|---|---|
| Inference engine | PyTorch | CTranslate2 |
| GPU speed (large-v3, FP16) | Baseline (1.0x) | 2-4x |
| CPU speed (large-v3, INT8) | Baseline (impractically slow) | ~4x, useful for offline batch |
| VRAM (large-v3, FP16) | ~10 GB | ~6 GB |
| VRAM (large-v3, INT8) | Not supported | ~4 GB |
| Accuracy at FP16 | Reference | Identical |
| Word-level timestamps | Yes (DTW-based, approximate) | Yes (same DTW-based) |
| Speaker diarization | No (add pyannote) | No (add pyannote) |
| Streaming | Not native | Not native (chunk + stitch pattern) |
Install and run
One-liner install, then load a model and transcribe. Minimum working example:
# 1. Install
pip install faster-whisper
# 2. Verify CUDA (Linux only — required for GPU inference)
python -c "import torch; print(torch.cuda.is_available())" # → True
# 3. Transcribe
from faster_whisper import WhisperModel
model_size = "large-v3"
model = WhisperModel(
model_size,
device="cuda",
compute_type="int8_float16", # sweet spot for modern GPUs
)
segments, info = model.transcribe(
"audio.mp3",
beam_size=5,
word_timestamps=True,
vad_filter=True, # Silero VAD for silence removal
)
print(f"Detected language: {info.language} (probability {info.language_probability})")
for segment in segments:
print(f"[{segment.start:.2f}s -> {segment.end:.2f}s] {segment.text}")Windows: install cuDNN 9 separately — CTranslate2 8+ requires cuDNN 9 specifically. pip install nvidia-cudnn-cu12 usually resolves it.
Apple Silicon (Mac): CTranslate2 doesn't support Metal. faster-whisper runs on CPU only on Mac — use whisper.cpp instead for Apple Silicon acceleration.
Model downloads: models download automatically from Hugging Face on first use. Pre-download and cache them in production with HF_HOME=/models python -c "from faster_whisper import WhisperModel; WhisperModel('large-v3')".
Quantization options
Set with the compute_type parameter. All numbers reference Whisper large-v3 on a single NVIDIA GPU.
| Level | VRAM | Speed | WER impact | Use case |
|---|---|---|---|---|
| float32 (FP32) | ~11 GB | 1.0x (baseline) | Reference | Rarely useful — FP16 is nearly identical accuracy at half the memory |
| float16 (FP16) | ~6 GB | ~1.0x on Ampere+ | Identical to FP32 | Accuracy-critical production, default on modern NVIDIA GPUs |
| int8_float16 | ~4 GB | 1.2-1.5x | ±0.1% vs FP16 | Modern GPU sweet spot — INT8 weights, FP16 activations |
| int8 | ~4 GB | 1.2-1.5x on GPU; 4x on CPU | ±0.3-0.5% vs FP16 | High-throughput serving, CPU inference |
| int8_float32 | ~5 GB | 1.1x | ±0.1% vs FP16 | Older GPUs without FP16 support (rare in 2026) |
Recommendation: int8_float16 for modern GPUs (Ampere and newer — RTX 30/40 series, A10, A100, L4). FP16 for older cards or accuracy-critical workflows. INT8 for CPU inference or when VRAM is the tightest constraint.
GPU throughput benchmarks
Rough numbers from community benchmarks (July 2026). All assume a 60-minute audio file, Whisper large-v3, beam size 5.
| GPU / hardware | Quantization | Speed vs real-time | Notes |
|---|---|---|---|
| NVIDIA A100 (80 GB) | FP16 | 24-30x real-time | 60-min audio → 2-2.5 min. Reference throughput. |
| NVIDIA A100 (80 GB) | INT8_FLOAT16 | 30-40x real-time | 60-min audio → 1.5-2 min. Fastest common config. |
| NVIDIA RTX 4090 (24 GB) | FP16 | 20-26x real-time | Consumer flagship, near-A100 performance |
| NVIDIA RTX 3090 (24 GB) | FP16 | 15-20x real-time | Solid choice for self-hosted production |
| NVIDIA RTX 4060 Ti (16 GB) | INT8 | 8-12x real-time | Fits large-v3 at INT8; budget option |
| NVIDIA A10 (24 GB) | FP16 | 18-22x real-time | Common cloud instance (AWS g5.xlarge) |
| NVIDIA L4 (24 GB) | INT8_FLOAT16 | 12-16x real-time | Inference-optimized cloud GPU |
| Modern x86 CPU (16 cores) | INT8 | 1.5-2.5x real-time | CPU fallback — meaningfully faster than reference PyTorch CPU |
Numbers vary with audio quality, batch size, VAD settings, and model quantization. Benchmark on your specific hardware before committing.
Adding diarization + word timestamps
faster-whisper handles transcription with segment timestamps. For “who said what” and frame-accurate word timing, layer two more libraries:
- Speaker diarization: pyannote.audio 3.1. Run pyannote separately on the audio to get speaker turns, then match timestamps against the faster-whisper transcript.
- Frame-accurate word timestamps: wav2vec2-based forced alignment. faster-whisper's built-in
word_timestamps=Truegives approximate timestamps (±100-500 ms per word) derived from the model's attention pattern. Forced alignment via wav2vec2 tightens this to ±30 ms.
Or use WhisperX. WhisperX wraps faster-whisper + pyannote + wav2vec2 forced alignment into a single library — see the deep-dive in pyannote.audio. If you're assembling the pipeline yourself for custom needs, use faster-whisper directly. If you want the standard three-piece pipeline pre-integrated, use WhisperX.
Streaming limitations
Whisper is a fixed-context Transformer that processes 30-second audio chunks — it's not a streaming model. faster-whisper inherits this: no native streaming support, no partial hypothesis updates as words arrive.
The chunk-and-stitch pattern: for pseudo-real-time transcription, buffer audio in short chunks (2-5 seconds), transcribe each chunk with faster-whisper, and stitch results together. Libraries like WhisperLive, whisper_streaming, and whisper-stream implement this pattern. Trade-offs: latency = chunk duration + inference time (typically 500-1500 ms), and each chunk transcribes without cross-chunk context, which occasionally introduces boundary errors.
For true low-latency streaming (sub-300 ms partial hypotheses, incremental word updates), Whisper isn't the right architecture. Use streaming-native models like NVIDIA Canary, or hosted APIs like Deepgram Nova-3 or AssemblyAI Universal-2 that are designed for streaming from the ground up. See best speech-to-text APIs for the streaming landscape.
faster-whisper vs whisper.cpp and WhisperX
Three optimization strategies for different deployment constraints.
| Tool | Language | Hardware | Speed | Best for |
|---|---|---|---|---|
| faster-whisper (this page) | Python | CUDA GPU (or CPU with INT8) | 2-4x reference Whisper | GPU production, self-hosted throughput, standard Python pipelines |
| OpenAI Whisper (reference) | Python + PyTorch | CUDA GPU (10 GB VRAM) | 1.0x (baseline) | Research, reference implementation, feature parity checks |
| whisper.cpp | C/C++ | CPU, Apple Silicon (Metal/CoreML), no CUDA | 60-80% of GPU speed on Apple Silicon | On-device (mobile, edge), no Python, single-binary deployment |
| WhisperX | Python (wraps faster-whisper) | CUDA GPU + Hugging Face token for pyannote | Same as faster-whisper + alignment overhead | Word-level timestamps + built-in diarization, out of the box |
Rule of thumb: faster-whisper for GPU production, whisper.cpp for CPU/mobile/edge, WhisperX for GPU with built-in diarization and word alignment.
Production deployment notes
Common patterns for running faster-whisper in production:
- Batching. Transcribe multiple files simultaneously with the batched inference wrapper. GPU utilization goes up, per-file latency stays similar.
- VAD pre-processing. Silero VAD (built into faster-whisper via
vad_filter=True) trims silence before Whisper sees the audio. Reduces total inference time by 10-40% on typical files with pauses. - Model caching. Load the WhisperModel once at process start; keep it in memory for the process lifetime. Cold-start loading is 5-15 seconds.
- Queue architecture. Redis/RabbitMQ queue + N GPU workers each running one WhisperModel instance. Scales linearly with GPUs.
- Monitoring. Track inference time per file, VRAM utilization, queue depth, and cold-start frequency. Log the language detection probability — very low values (below 0.5) often indicate silent or corrupted audio.
- Error handling. faster-whisper occasionally hallucinates on long silences (a known Whisper issue — see the “Careless Whisper” FAccT 2024 paper). Enable VAD, and consider post-processing to flag suspiciously repeated segments.
When to use a hosted service instead
Self-hosted faster-whisper is the right choice when you have GPU infrastructure and want throughput at the lowest per-minute cost. It's the wrong choice when:
- You don't have GPU infrastructure — cloud GPU instances run $0.30-$2.00/hr, and idle time adds up fast
- Your volume doesn't justify the MLOps overhead — model updates, quantization tuning, benchmark maintenance, on-call for GPU worker failures
- You need SRT/VTT export, 133-language translation, or format conversions on top of raw transcription
- You need speaker diarization out of the box without assembling the pipeline yourself
- Your accuracy needs are met by a hosted API (Deepgram, AssemblyAI, ElevenLabs) at a cost that beats your self-hosted per-minute economics
VexaScribe runs faster-whisper + pyannote + translation + SRT/VTT export as a hosted service — same throughput math as self-hosting, without the MLOps. 30 minutes free at signup, no credit card. For most creator, corporate, and research workflows, hosted is faster to production. Self-host when the deployment constraints (compliance, data residency, custom pipeline needs) require it.
Frequently asked questions
What is faster-whisper?
faster-whisper is a Python library from SYSTRAN that reimplements OpenAI Whisper inference on top of CTranslate2, an inference engine optimized for Transformer models. Same Whisper weights (converted to CTranslate2 format), same accuracy, but 2-4x faster on GPU and significantly more memory-efficient than the PyTorch reference implementation. It's the default underlying engine for WhisperX and is used in most production Whisper pipelines that run on CUDA.
How much faster is faster-whisper vs OpenAI Whisper?
Roughly 2-4x on GPU, 4x on CPU. On a single NVIDIA A100 with FP16, the reference OpenAI Whisper large-v3 processes a 60-minute audio file in 4-6 minutes; faster-whisper processes the same file in 1.5-2.5 minutes. On CPU, the speedup is even bigger — CTranslate2's INT8 CPU inference beats PyTorch's CPU implementation by ~4x. VRAM usage is also lower: large-v3 in reference PyTorch needs ~10 GB VRAM; faster-whisper needs ~6 GB at FP16 and ~4 GB at INT8. The accuracy is identical to reference at FP16, and within 0.5% WER at INT8.
How do I install faster-whisper?
pip install faster-whisper. On Linux with CUDA, that's usually all you need — CTranslate2 ships pre-built with CUDA support. On Windows, you may need to install cuDNN 9 separately (CTranslate2 8+ requires cuDNN 9 specifically). On macOS with Apple Silicon, faster-whisper runs on CPU only (no Metal support in CTranslate2 yet) — use whisper.cpp instead for Apple Silicon acceleration. Model downloads are automatic from Hugging Face on first use, or you can pre-download and cache them.
How does faster-whisper compare to whisper.cpp?
Different optimization strategies for different deployments. faster-whisper is Python + CTranslate2, GPU-optimized, best for server-side production pipelines where you have CUDA infrastructure. whisper.cpp is C/C++, CPU + Apple Silicon (Metal/CoreML), best for on-device (mobile, edge, laptop) and single-binary deployments. Same accuracy, same underlying Whisper weights, radically different runtime environments. Choose faster-whisper when you have GPU and want maximum throughput; choose whisper.cpp when you're shipping to constrained environments without Python or CUDA.
Does faster-whisper support word-level timestamps?
Yes, via the word_timestamps=True flag. faster-whisper implements the same DTW-based word timestamp extraction as reference Whisper — timestamps are derived from the cross-attention alignment between audio and text tokens. Note: these timestamps are approximate (±100-500 ms per word) because they come from the model's attention pattern, not a dedicated forced-alignment pass. For frame-accurate word timing, layer WhisperX or a wav2vec2-based forced alignment step on top. WhisperX bundles this integration out of the box.
Does faster-whisper do speaker diarization?
No, transcription only. For speaker labels, run faster-whisper for the transcript then pyannote.audio 3.1 separately, and merge the outputs by matching timestamps. This is exactly what WhisperX does — it bundles faster-whisper + pyannote + wav2vec2 forced alignment as a single library. If you're building a custom pipeline, use faster-whisper directly and add pyannote yourself. If you want the standard three-piece pipeline pre-integrated, use WhisperX.
Which quantization level should I use?
FP16 for accuracy-critical production (identical to reference PyTorch). INT8 for high-throughput serving where a 0.3-0.5% WER drop is acceptable in exchange for 2x smaller VRAM footprint and 20-30% faster inference. INT8_FLOAT16 is a middle ground on modern GPUs (Ampere, Hopper) — INT8 for the weights, FP16 for activations, minimal accuracy loss and best speed. For CPU inference, INT8 is the practical choice — INT8 on CPU is 4x faster than FP16 on CPU. Set with the compute_type parameter: WhisperModel("large-v3", device="cuda", compute_type="int8_float16").
What's the memory footprint of faster-whisper?
For Whisper large-v3: ~6 GB VRAM at FP16, ~4 GB at INT8 on GPU. Compared to reference OpenAI Whisper at ~10 GB VRAM for the same model. This means faster-whisper large-v3 fits comfortably on 8 GB GPUs (RTX 3060 Ti, RTX 4060 Ti) and is efficient on 12+ GB cards (RTX 3080, RTX 4070+, A10, A100). On CPU, INT8 large-v3 uses ~4 GB RAM. Batching multiple audio files simultaneously scales linearly with the batch size — a batch of 8 files at FP16 needs ~10 GB VRAM.
Does faster-whisper support streaming / real-time transcription?
Not natively — the underlying model is a fixed-context Transformer that processes 30-second chunks, not a streaming architecture. For real-time transcription with faster-whisper, the common pattern is: buffer audio in small chunks (2-5 seconds), transcribe each chunk with faster-whisper, and stitch results together, accepting that each chunk starts fresh (no cross-chunk context). Libraries like WhisperLive, whisper_streaming, and whisper-stream wrap this pattern. For true streaming (partial hypothesis updates as words arrive), use Deepgram, AssemblyAI, or a streaming-native model like NVIDIA Canary — faster-whisper isn't the right tool.
Where does faster-whisper fit in production Whisper pipelines?
It's the default inference engine for GPU-based production Whisper deployments. VexaScribe, Replicate's Whisper endpoints, and most self-hosted Whisper services run faster-whisper under the hood — for the 2-4x throughput vs reference PyTorch. Pair it with pyannote.audio for diarization, wav2vec2 forced alignment for word timestamps, and a queue/worker system for bulk processing. The maintained SYSTRAN version is production-stable; there's an active community around benchmarks and integration recipes.
Related guides
Whisper Transcription
Hosted OpenAI Whisper Large-v3 — no Python, no GPU, no install
whisper.cpp
The CPU/mobile-optimization side of the same Whisper problem — C/C++, no Python
Whisper Alternatives
Full alternative landscape — Deepgram, AssemblyAI, ElevenLabs Scribe, self-host options
How accurate is Whisper?
WER benchmarks by language and content type for OpenAI Whisper Large-v3
pyannote.audio (speaker diarization)
Add speaker labels to faster-whisper output — the standard integration
Best Speech-to-Text APIs 2026
13 hosted STT APIs compared — when to build vs buy
Prefer hosted Whisper without the GPU?
VexaScribe runs faster-whisper + pyannote + 99 languages + SRT/VTT export as a hosted service. Same model, no MLOps. 30 minutes free at signup.