faster-whisper: 4 倍速语音转文本,23K+ Stars — 2026 年对比 WhisperX、whisper.cpp 基准测试
faster-whisper(SYSTRAN)通过 CTranslate2 重新实现 OpenAI Whisper,提速 4 倍。涵盖 faster whisper 教程、基准数据、Docker 部署、Python API、VAD 过滤器、批处理,以及与 WhisperX 和 whisper.cpp 的生产级集成。
- ⭐ 23000
- MIT
- 更新于 2026-05-19
{{< resource-info >}}
OpenAI 的 Whisper 在 2022 年改变了语音转文本领域,但原始 Python 实现并未充分利用硬件性能。对于一个 13 分钟的音频文件,使用 large-v2 模型的 openai/whisper 在 Tesla V100 GPU 上需要超过 4 分钟 —— 对于每天处理数百小时音频的生产流水线来说是不可接受的。SYSTRAN 的 faster-whisper 使用 CTranslate2 重新实现了 Whisper 推理,在保持相同准确率的同时实现了高达 4 倍的加速,并将显存使用减少了近 70%。凭借 GitHub 上 23,000+ stars,它已成为 Python 环境中生产级语音转文本的事实标准运行时。
本指南提供生产级的 faster whisper 教程,涵盖安装、基准测试、Docker 部署以及与 WhisperX 和 whisper.cpp 的集成。所有命令和配置均可直接复制粘贴使用。
图 1:faster-whisper GitHub 仓库 —— 23,000+ stars,由 SYSTRAN 积极维护。
什么是 faster-whisper? #
faster-whisper 是使用 CTranslate2(一个用于 Transformer 模型的高性能 C++ 推理引擎)对 OpenAI Whisper 自动语音识别(ASR)模型的重新实现。它运行与原始 Whisper 相同的模型权重,但通过自定义 CUDA 内核、INT8/FP16 量化和融合注意力操作,实现了显著更高的吞吐量和更低的内存使用。
该项目由 Guillaume Klein 发起,现由 SYSTRAN 在 MIT 许可下维护。它支持所有 Whisper 模型尺寸(从 tiny 到 large-v3),可在 CPU 和 NVIDIA GPU 上运行,并支持首次加载时从 Hugging Face Hub 自动转换模型。
faster-whisper 的工作原理 #
其架构使用 CTranslate2 优化的运行时替代了 PyTorch 推理:

图 2:CTranslate2 推理引擎 —— 通过自定义 CUDA 内核和量化技术为 faster-whisper 提供加速的 C++ 后端。
实现加速的关键技术决策:
- 权重量化:INT8 将模型内存减少约 50%,准确率损失可忽略不计(< 0.1% WER)。
- 融合内核:CTranslate2 将多个 GPU 操作合并为单一内核启动,减少调度开销。
- Flash Attention 支持:在 Ampere GPU(RTX 30xx+)上提供额外的内存带宽节省。
- 批处理推理:在 GPU 上并行处理多个音频块,实现接近线性的吞吐量扩展。
- Silero VAD 集成:内置语音活动检测跳过静音段,减少无效计算。
安装与配置 #
环境要求 #
- Python 3.9+
- GPU 推理:支持 CUDA 12.x 的 NVIDIA GPU 和 cuDNN 9.x
- 无需安装 FFmpeg(通过 PyAV 内置)
pip 安装(CPU) #
# 创建虚拟环境
python -m venv venv-whisper
source venv-whisper/bin/activate
# 安装 faster-whisper
pip install faster-whisper
pip 安装(GPU 支持) #
# 通过 pip 安装 cuBLAS 和 cuDNN(仅限 Linux)
pip install nvidia-cublas-cu12 nvidia-cudnn-cu12==9.*
# 设置库路径
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__))')
# 安装 faster-whisper
pip install faster-whisper
Docker 部署 #
# 拉取官方 NVIDIA CUDA 镜像
docker run -it --rm --gpus all \
-v $(pwd)/audio:/audio \
nvidia/cuda:12.3.2-cudnn9-runtime-ubuntu22.04 \
bash
# 容器内
apt-get update && apt-get install -y python3-pip
pip install faster-whisper
验证安装 #
# verify_setup.py
from faster_whisper import WhisperModel
import torch
print(f"PyTorch CUDA 可用: {torch.cuda.is_available()}")
print(f"CUDA 设备数: {torch.cuda.device_count()}")
model = WhisperModel("tiny", device="cuda", compute_type="float16")
print(f"模型加载设备: {model.model.device}")
print("安装验证成功")
首次转录 #
from faster_whisper import WhisperModel
# 加载模型(首次运行时自动从 Hugging Face 下载)
model = WhisperModel("large-v3", device="cuda", compute_type="int8")
# 转录音频
segments, info = model.transcribe("audio.mp3", beam_size=5)
print(f"检测语言: {info.language} (概率: {info.language_probability:.2f})")
for segment in segments:
print(f"[{segment.start:.2f}s -> {segment.end:.2f}s] {segment.text}")
与流行工具集成 #
WhisperX(说话人分离) #
WhisperX 基于 faster-whisper 构建,增加了词级时间戳和说话人分离功能。它是会议转录的首选工具。
pip install whisperx
import whisperx
import torch
device = "cuda" if torch.cuda.is_available() else "cpu"
audio_file = "meeting.mp3"
# 1. 使用 faster-whisper 后端转录
model = whisperx.load_model("large-v3", device, compute_type="int8")
audio = whisperx.load_audio(audio_file)
result = model.transcribe(audio, batch_size=8)
# 2. 对齐获取词级时间戳
model_a, metadata = whisperx.load_align_model(
language_code=result["language"], device=device
)
result = whisperx.align(result["segments"], model_a, metadata, audio, device)
# 3. 说话人分离(需要 Hugging Face token)
diarize_model = whisperx.DiarizationPipeline(
use_auth_token="your_hf_token", device=device
)
diarize_segments = diarize_model(audio)
result = whisperx.assign_word_speakers(diarize_segments, result)
for segment in result["segments"]:
speaker = segment.get("speaker", "UNKNOWN")
print(f"[{segment['start']:.2f}s -> {segment['end']:.2f}s] "
f"{speaker}: {segment['text']}")
whisper-asr-webservice(OpenAI 兼容 API) #
通过 OpenAI 兼容的 HTTP API 暴露 faster-whisper:
docker run -d --gpus all \
-p 9000:9000 \
-e ASR_MODEL=large-v3 \
-e ASR_ENGINE=faster_whisper \
-e COMPUTE_TYPE=int8 \
onerahming/openai-whisper-asr
import requests
with open("audio.mp3", "rb") as f:
response = requests.post(
"http://localhost:9000/asr",
files={"audio_file": f},
data={"language": "en", "output": "json"}
)
print(response.json())
Speaches(自托管 OpenAI 兼容服务器) #
docker run -d --gpus all \
-p 8000:8000 \
-e WHISPER__MODEL=large-v3 \
-e WHISPER__COMPUTE_TYPE=int8 \
fedirz/speaches:latest-gpu
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="dummy")
with open("audio.mp3", "rb") as f:
transcript = client.audio.transcriptions.create(model="large-v3", file=f)
print(transcript.text)
LibreTranslate(翻译流水线) #
将转录与翻译串联用于多语言工作流:
from faster_whisper import WhisperModel
import requests
model = WhisperModel("large-v3", device="cuda", compute_type="int8")
segments, info = model.transcribe("japanese_audio.mp3", beam_size=5)
japanese_text = " ".join([s.text for s in segments])
response = requests.post("http://localhost:5000/translate", json={
"q": japanese_text, "source": "ja", "target": "en"
})
print(response.json()["translatedText"])
基准测试 / 实际用例 #

图 3:官方基准测试结果 —— faster-whisper 在 RTX 3070 Ti 上通过批处理 INT8 推理实现高达 8.9 倍加速。
GPU 基准测试:13 分钟音频,large-v2 模型 #
| 实现方案 | 精度 | Beam Size | 耗时 | 显存占用 |
|---|---|---|---|---|
| openai/whisper | fp16 | 5 | 2分23秒 | 4708 MB |
| whisper.cpp (Flash Attention) | fp16 | 5 | 1分05秒 | 4127 MB |
| transformers (SDPA) | fp16 | 5 | 1分52秒 | 4960 MB |
| faster-whisper | fp16 | 5 | 1分03秒 | 4525 MB |
| faster-whisper (batch_size=8) | fp16 | 5 | 17秒 | 6090 MB |
| faster-whisper | int8 | 5 | 59秒 | 2926 MB |
| faster-whisper (batch_size=8) | int8 | 5 | 16秒 | 4500 MB |
在 NVIDIA RTX 3070 Ti 8GB 上使用 CUDA 12.4 执行。
CPU 基准测试:13 分钟音频,small 模型 #
| 实现方案 | 精度 | Beam Size | 耗时 | 内存占用 |
|---|---|---|---|---|
| openai/whisper | fp32 | 5 | 6分58秒 | 2335 MB |
| whisper.cpp | fp32 | 5 | 2分05秒 | 1049 MB |
| whisper.cpp (OpenVINO) | fp32 | 5 | 1分45秒 | 1642 MB |
| faster-whisper | int8 | 5 | 1分42秒 | 1477 MB |
| faster-whisper (batch_size=8) | int8 | 5 | 51秒 | 3608 MB |
在 Intel Core i7-12700K 上使用 8 线程执行。
生产用例 #
| 用例 | 模型 | 硬件 | 性能 |
|---|---|---|---|
| 会议转录(1小时音频) | large-v3 int8 | RTX 4070 | ~3 分钟处理 |
| 播客批量处理(100 文件) | large-v3 int8 batch=8 | A100 40GB | 100 小时约 20 分钟 |
| 实时字幕 | small int8 | RTX 3060 | ~200ms 延迟 |
| 呼叫中心分析 | medium int8 | CPU 8 核 | ~2 倍实时 |
高级用法 / 生产环境加固 #
VAD 过滤器预分段 #
from faster_whisper import WhisperModel
model = WhisperModel("large-v3", device="cuda", compute_type="int8")
segments, info = model.transcribe(
"audio.mp3",
vad_filter=True,
vad_parameters=dict(
min_silence_duration_ms=500,
speech_pad_ms=200,
threshold=0.5
),
beam_size=5
)
批处理推理最大化吞吐量 #
from faster_whisper import WhisperModel
import glob, time
model = WhisperModel("large-v3", device="cuda", compute_type="int8")
audio_files = glob.glob("podcasts/*.mp3")
start = time.time()
for file_path in audio_files:
segments, _ = model.transcribe(file_path, batch_size=8, beam_size=5)
text = " ".join([s.text for s in segments])
print(f"{file_path}: {len(text)} 字符")
print(f"总耗时: {time.time() - start:.1f}秒,处理 {len(audio_files)} 个文件")
词级时间戳 #
segments, _ = model.transcribe("audio.mp3", word_timestamps=True)
for segment in segments:
for word in segment.words:
print(f"[{word.start:.2f}s -> {word.end:.2f}s] {word.word}")
自定义模型转换 #
pip install transformers[torch]>=4.23
ct2-transformers-converter \
--model openai/whisper-large-v3 \
--output_dir whisper-large-v3-ct2 \
--copy_files tokenizer.json preprocessor_config.json \
--quantization float16
使用 Prometheus 监控 #
from faster_whisper import WhisperModel
from prometheus_client import Counter, Histogram, start_http_server
REQUEST_COUNT = Counter("transcription_requests_total", "总请求数")
REQUEST_DURATION = Histogram("transcription_duration_seconds", "请求耗时")
model = WhisperModel("large-v3", device="cuda", compute_type="int8")
@REQUEST_DURATION.time()
def transcribe(audio_path):
REQUEST_COUNT.inc()
return model.transcribe(audio_path, beam_size=5)
start_http_server(8000)
优雅错误处理 #
from faster_whisper import WhisperModel
def safe_transcribe(audio_path, device="cuda"):
compute_types = ["int8", "int8_float16", "float16", "float32"]
for compute_type in compute_types:
try:
model = WhisperModel("large-v3", device=device, compute_type=compute_type)
segments, info = model.transcribe(audio_path, beam_size=5)
return segments, info, compute_type
except RuntimeError as e:
print(f"{compute_type} 失败: {e},重试中...")
continue
raise RuntimeError("所有计算类型均失败")
与替代方案对比 #
| 特性 | faster-whisper | OpenAI Whisper | WhisperX | whisper.cpp |
|---|---|---|---|---|
| GPU 速度 (large-v3) | ~12 倍实时 | ~3 倍实时 | ~12 倍实时 | ~8 倍实时 |
| 显存占用 (large-v3) | ~2.5 GB (int8) | ~11 GB (fp16) | ~3 GB | ~3 GB |
| Python API | 原生支持 | 原生支持 | 原生支持 | 仅支持包装器 |
| 说话人分离 | 不支持 | 不支持 | 内置 | 不支持 |
| 词级时间戳 | 支持 | 不支持 | 支持 (wav2vec2) | 支持 |
| Apple Silicon | 仅 CPU | CPU/GPU | 仅 CPU | Metal (最快) |
| NVIDIA GPU | CUDA (最快) | CUDA | CUDA | CUDA |
| AMD GPU | 不支持 | 不支持 | 不支持 | Vulkan/ROCm |
| CPU 优化 | int8 SIMD | 基础优化 | int8 SIMD | AVX2/NEON |
| VAD 过滤器 | 内置 Silero | 无 | 内置 | 手动调参 |
| 批处理推理 | 支持 | 不支持 | 支持 | 有限支持 |
| 模型量化 | int8/fp16/fp32 | fp16/fp32 | int8/fp16 | q4/q5/fp16 |
| 许可协议 | MIT | MIT | MIT | MIT |
| Stars (2026年5月) | 23,000+ | 15,000+ | 12,000+ | 44,000+ |
选择建议 #
- faster-whisper:NVIDIA GPU 或 CPU 上的 Python 流水线。最佳集成生态。用于生产 STT 服务、批处理和实时 Python 应用。
- OpenAI Whisper:需要参考实现的研究和实验。避免用于生产工作负载。
- WhisperX:需要说话人标签的会议转录、播客和访谈。基于 faster-whisper 构建。
- whisper.cpp:Apple Silicon、嵌入式设备、边缘部署和跨平台应用。无需 Python 依赖。
局限性 / 诚实评估 #
faster-whisper 并非适用于所有场景。以下情况不建议使用:
Apple Silicon GPU 加速:faster-whisper 没有 Metal 后端。在 M 系列 Mac 上,它仅以 CPU 运行 large-v3 约 3 倍实时速度。whisper.cpp 配合 Metal 可达 ~10 倍实时 —— 快 3 倍。
AMD GPU 支持:CTranslate2 在 GPU 上仅支持 CUDA。不支持 AMD GPU。请改用支持 Vulkan 或 ROCm 的 whisper.cpp。
极端边缘设备:虽然 faster-whisper 可在 CPU 上运行,但 Python 运行时开销使其不如 whisper.cpp 适合树莓派 Zero 等微型设备。whisper.cpp 可在 1 GB 内存内运行且无需 Python。
说话人分离:faster-whisper 仅输出转录文本。识别"谁说了什么"需要 WhisperX 或单独的分离流水线。
超长音频扩展性:对于非常长的音频(>30 分钟),在某些 CPU 受限场景下 whisper.cpp 可能表现出更好的扩展特性。请在您的硬件上进行基准测试。
非 NVIDIA GPU 服务器:如果您的设备使用 AMD Instinct 或 Intel Arc GPU,faster-whisper 将回退到 CPU。这是 CTranslate2 的硬性限制。
常见问题 #
运行 faster-whisper 需要什么硬件? #
GPU 推理需要支持 CUDA 12.x 的 NVIDIA GPU。INT8 量化可在 8GB 显存(RTX 3060、RTX 4060)上舒适运行。CPU 推理则需要 4 核以上和 8GB 内存即可运行 small 模型。large-v3 模型在 CPU 上使用 INT8 需要约 3GB 内存。
如何在 Docker 中安装 faster-whisper? #
使用带有 cuDNN 9 的官方 NVIDIA CUDA 运行时镜像。上面的安装与配置部分展示了完整的 Dockerfile。关键要求是 nvidia/cuda:12.3.2-cudnn9-runtime-ubuntu22.04 基础镜像。使用 --gpus all 参数暴露 GPU。
转录准确率与 OpenAI Whisper 相同吗? #
是的。faster-whisper 使用相同的模型权重和分词器。词错误率(WER)差异在 0.1% 以内 —— 实践中无法区分。任何差异来自束搜索随机性,而非推理引擎。
我的 GPU 应该使用哪种 compute_type? #
对于 8GB GPU 和 GTX 10xx 显卡使用 int8 以获得最大显存节省。对于现代 GPU(RTX 30xx/40xx/50xx、A100、H100)使用 float16 获得最佳速度。Pascal 消费级显卡(GTX 1060/1070/1080)因 fp16 支持有限应使用 int8。
faster-whisper 与 WhisperX 相比如何? #
WhisperX 基于 faster-whisper 构建,增加了说话人分离和通过 wav2vec2 的词级时间戳对齐。对于纯转录,faster-whisper 已经足够。当需要会议或访谈中的"谁说了什么"标签时使用 WhisperX。
可以将 faster-whisper 用于实时流式处理吗? #
可以,通过与 Whisper-Streaming 或 WhisperLive 集成。faster-whisper 本身不支持原生流式,但其低延迟使其成为流式服务器的理想后端。small 模型在 GPU 上的典型端到端延迟为 200-500 毫秒。
如何转换微调的 Whisper 模型? #
使用 ct2-transformers-converter CLI 工具(高级用法部分展示)。Hugging Face Hub 上的任何模型或与 Transformers 兼容的本地检查点都可以转换。转换期间支持 FP16 和 INT8 量化。
faster-whisper 是否支持所有 Whisper 模型尺寸? #
是的 —— 支持 tiny、base、small、medium、large-v1、large-v2 和 large-v3。distil-whisper 变体(distil-large-v3)也支持,能以微小准确率代价实现更快的推理。
结论 #
faster-whisper 是 Python 环境中 OpenAI Whisper 的生产级运行时选择。凭借比参考实现快 4 倍的加速、INT8 量化带来的 70% 显存减少,以及成熟的集成生态(WhisperX、speaches、whisper-asr-webservice),它能处理从单文件转录到批量处理数百小时音频的一切任务。
数据很明确:如果您使用 NVIDIA GPU 和 Python,faster-whisper 就是基准选择。一般用途从 int8 large-v3 模型开始,实时场景降至 small,需要说话人标签时集成 WhisperX。
行动清单:
pip install faster-whisper并运行上面的验证脚本。- 使用仓库中的 13 分钟测试音频对您的硬件进行基准测试。
- 为生产流水线设置 Docker 部署。
- 加入 dibi8.com Telegram 群组 分享基准测试结果并获取生产环境支持。
推荐部署与基础设施 #
上述工具想要落地生产,靠谱的基础设施是前提。dibi8 自己也在用的两个选择:
- DigitalOcean — 新用户 60 天 $200 免费额度,14+ 全球节点。运行开源 AI 工具的首选。
- HTStack — 香港 VPS,国内访问低延迟,dibi8.com 自己也跑在它上面,生产环境验证过。
Aff 链接 — 不增加你的成本,但能帮 dibi8 持续运营。
来源与延伸阅读 #
- faster-whisper GitHub 仓库:https://github.com/SYSTRAN/faster-whisper
- CTranslate2 文档:https://opennmt.net/CTranslate2/
- WhisperX(说话人分离):https://github.com/m-bain/whisperX
- whisper.cpp(C++ 移植版):https://github.com/ggml-org/whisper.cpp
- OpenAI Whisper(参考实现):https://github.com/openai/whisper
- Speaches(OpenAI 兼容服务器):https://github.com/speaches-ai/speaches
- Whisper-Streaming(实时流式):https://github.com/ufal/whisper_streaming
- PyAV(音频解码):https://github.com/PyAV-Org/PyAV
- Silero VAD:https://github.com/snakers4/silero-vad
💬 留言讨论