faster-whisper 完整指南:Whisper 语音识别提速 4 倍,显存占用省近四成
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
faster-whisper 是基于 CTranslate2 推理引擎重写的 Whisper 语音识别实现,准确率与原版一致,转写速度最高提升至 4 倍,内存占用同步下降。本文面向做离线语音转文字、批量处理录音、或在本地机器上部署 Whisper 的开发者:从安装验证、最小示例,到按场景调参与报错排查,一次讲清。
🚀 三组基准数据,看清它快在哪
测试条件:13 分钟音频,NVIDIA RTX 3070 Ti(CUDA 12.4)。同精度 fp16 下,large-v2 模型耗时 1 分 03 秒,openai/whisper 为 2 分 23 秒;启用批量推理(batch_size=8)后压到 17 秒。切到 int8 量化,耗时 59 秒,显存从 4708MB 降到 2926MB,省近四成。CPU 端(i7-12700K,small 模型)int8 耗时 1 分 42 秒、内存 1477MB,而 openai/whisper fp32 需 6 分 58 秒——这正是官方"最高 4 倍"说法的出处。完整脚本见 benchmark/。
对比 whisper.cpp 与 transformers:定位差异
同一批 GPU 基准里,whisper.cpp fp16 为 1 分 05 秒,与 faster-whisper 基本持平;CPU 上 faster-whisper int8(1 分 42 秒)优于 whisper.cpp fp32(2 分 05 秒)。更大的差距出现在 distil-large-v3 上:transformers 需 46 分 12 秒且 batch 大于 1 即 OOM,faster-whisper 用 25 分 50 秒完成,词错率还更低(13.53 vs 14.80)。工程层面也有省事之处:无需系统安装 FFmpeg,解码由 PyAV 完成;内置 Silero VAD,可在转写前过滤静音。
📦 faster-whisper 部署:安装验证与最小示例
要求 Python 3.9 及以上;GPU 环境还需 NVIDIA 的 cuBLAS 与 cuDNN 9(CUDA 12 版)。当前发布版本为 1.2.1,安装一条命令:
pip install faster-whisper下面用仓库自带的测试音频跑第一条带时间戳的转写(首次运行会自动下载模型权重):
from faster_whisper import WhisperModel model = WhisperModel("small", device="cpu", compute_type="int8") segments, info = model.transcribe("tests/data/jfk.flac", beam_size=5) for seg in segments: print(f"[{seg.start:.2f}s -> {seg.end:.2f}s] {seg.text}")注意segments是生成器:不遍历就不会真正执行转写,for 循环或 list() 才会触发它。
⚙️ 按场景调参:CPU、GPU 与批量转写怎么选
三个最影响速度的参数:
- device / compute_type:GPU 首选
float16;显存吃紧换int8_float16;纯 CPU 用int8。 - 批量推理:
BatchedInferencePipeline是transcribe的即插即用替换,GPU 上 batch_size=8 即可把 large-v2 从 1 分 03 秒压到 17 秒(int8 为 16 秒),适合批量转写长录音。 - vad_filter:开启后先过滤静音再转写,默认只移除超过 2 秒的静默,可用
vad_parameters调整阈值;做字幕对齐时加word_timestamps=True取词级时间戳。
model = WhisperModel("turbo", device="cuda", compute_type="float16") pipeline = BatchedInferencePipeline(model) segments, info = pipeline.transcribe("audio.mp3", batch_size=16)完整参数说明见 faster_whisper/transcribe.py。
⚠️ 常见报错:现象、原因与一句话解法
- 调用 transcribe 后一直没有输出:segments 是生成器,尚未遍历。用 for 循环或
list(segments)强制执行。 - GPU 加载报 CUDA 错误:新版 ctranslate2 只支持 CUDA 12 + cuDNN 9;CUDA 11 环境降级
ctranslate2==3.24.0(CUDA 12 配 cuDNN 8 则用 4.4.0)。 - 显存不足 OOM:compute_type 改
int8_float16,或换更小模型。 - CPU 上速度远低于预期:核对线程数(
OMP_NUM_THREADS)与 beam_size;长音频改走批量推理。
选型建议:离线加速、微调模型与进阶路径
- 资源受限 / 离线部署:CPU + small + int8 就能覆盖多数场景,是 Whisper 本地加速的性价比组合。
- 大批量 GPU 转写:fp16 + BatchedInferencePipeline;追求更快速度可试 turbo 或 distil-large-v3(建议配
condition_on_previous_text=False)。 - 自训模型:用 ct2-transformers-converter 把 Hugging Face 格式的权重转成 CTranslate2 格式后直接加载,免去重复转换。
社区已基于它构建流式转写、说话人分离等集成,实时场景可关注这些方向。VAD 参数细节见 faster_whisper/vad.py。
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考