Faster-Whisper 本地部署:4倍加速语音识别从零到可用实战指南
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
faster-whisper 是基于 CTranslate2 推理引擎重构的语音识别工具,支持约 99 种语言与 8 位量化。同样 13 分钟音频,openai/whisper 耗时 2 分 23 秒,它 16 秒完成,显存占用约降四成。
它解决的瓶颈:本地转录的时间、显存与隐私
本地语音转录的瓶颈通常不是准确率,而是时间与内存:长音频处理耗时以十分钟计,大模型在中端显卡上难以加载,含隐私的音频又不能送云端 API。faster-whisper 把 OpenAI 的 Whisper 搬到 CTranslate2 这个 Transformer 快速推理引擎上,精度基本不变的前提下大幅降低资源消耗,音频全程不离开本机。它也不需要系统安装 FFmpeg,音频解码由 PyAV 库完成。
性能实测:同一块 GPU 上比 openai/whisper 快多少
测试条件:13 分钟音频、large-v2 模型、beam_size=5、NVIDIA RTX 3070 Ti 8GB(CUDA 12.4),数据来自官方 benchmark。
| 实现 | 精度 | 耗时 | 显存占用 |
|---|---|---|---|
| openai/whisper | fp16 | 2m23s | 4708MB |
| faster-whisper | fp16 | 1m03s | 4525MB |
| faster-whisper | int8 | 59s | 2926MB |
| faster-whisper(batch_size=8) | int8 | 16s | 4500MB |
CPU 侧(small 模型、i7-12700K、8 线程):faster-whisper int8 单线程 1m42s / 1477MB,加 batch_size=8 后 51s,对比 openai/whisper 的 6m58s / 2335MB。
一句话结论:同一块显卡上,fp16 单线程先砍掉一半时间,int8 降到 59 秒,批量模式压到 16 秒,显存同步省约四成。想复现可运行 benchmark/speed_benchmark.py,词错率(WER)评估脚本为 benchmark/wer_benchmark.py。
硬件适配:按你的设备选模型与量化
| 硬件档位 | 推荐模型 | 量化方式 | 说明 |
|---|---|---|---|
| 高端 GPU(RTX 3090/4090) | large-v3 或 turbo | float16 | 8GB 以上显存可开批量处理 |
| 中端 GPU(RTX 3060/3070) | medium 或 large-v3 | int8_float16 | 混合量化省 40% 以上显存 |
| 纯 CPU | small 或 base | int8 | 设 OMP_NUM_THREADS=8 稳定复现 |
首次运行:一条命令跑通本地转录
安装只需一行:
pip install faster-whisper最小可运行代码:
from faster_whisper import WhisperModel model = WhisperModel("large-v3", device="cuda", compute_type="float16") segments, info = model.transcribe("audio.mp3", beam_size=5) print("语言:", info.language, "概率:", round(info.language_probability, 2)) for segment in segments: print(f"[{segment.start:.2f}s -> {segment.end:.2f}s] {segment.text}")注意segments是生成器,遍历它的时刻转录才真正开始;想立即跑完可用list(segments)强制收集。无 GPU 时改device="cpu", compute_type="int8"即可。
进阶能力:批量推理、词级时间戳与 VAD 静音过滤
- 批量推理(BatchedInferencePipeline)——一次处理大量音频时替换普通 transcribe,是
WhisperModel.transcribe的即插即用替身,VAD 默认已启用:batched = BatchedInferencePipeline(model); segments, _ = batched.transcribe("audio.mp3", batch_size=16) - 词级时间戳——做字幕、检索、逐词校对时打开,
segment.words下每个词带独立起止时间:segments, _ = model.transcribe("audio.mp3", word_timestamps=True) - VAD 静音过滤——长音频中沉默占比高时,内置 Silero VAD 跳过无声段,默认只剔除超过 2 秒的静音(
min_silence_duration_ms=2000),可调:model.transcribe("audio.mp3", vad_filter=True, vad_parameters=dict(min_silence_duration_ms=500)) - hotwords 热词偏置——提升专有名词、技术术语识别率,参数定义见 faster_whisper/transcribe.py:
model.transcribe("audio.mp3", hotwords="CTranslate2 Whisper")
避坑清单:高频问题与对应参数
- 加载模型即 OOM→
compute_type换成int8或int8_float16,或降一档模型(large-v3 → medium);批量模式下调小batch_size可立刻缓解。 - CUDA 环境报库缺失→ 新版 ctranslate2 只支持 CUDA 12 + cuDNN 9;CUDA 11 环境执行
pip install --force-reinstall ctranslate2==3.24.0回退,CUDA 12 + cuDNN 8 则降到 4.4.0。 - 识别率不稳定→ 显式传
language参数(如language="zh"),保持beam_size=5;背景噪声大时先开vad_filter=True过滤非语音段。 - 长音频太慢→ 换
BatchedInferencePipeline;CPU 上务必固定OMP_NUM_THREADS(如OMP_NUM_THREADS=8),线程数不一致会让耗时不可比。 - 对比结果与 openai/whisper 对不上→ 先对齐 beam_size(本库默认 5,openai/whisper 默认 1)和 WER,再比耗时,否则结论无意义。
适用与不适用:按场景选型
适合用它:
- 音频不能离开内网,有隐私或合规要求
- 批量字幕、长音频处理,需要压住时间与显存成本
- 边缘设备上的实时或近实时转录
更适合选别的方案:
- 偶尔使用、量很小:云 ASR API 免去一切运维
- 做研究、需要改动模型内部结构:原版 openai/whisper
- 企业级大规模并发:专用 ASR 服务
一个典型落法是本地搭一台字幕服务器批量处理视频素材,或把会议录音转成带词级时间戳的文本,方便按关键词回查。想继续深挖,WhisperX 在其之上提供了说话人分离与更精细的时间戳对齐。
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考