Faster-Whisper 本地部署指南:5 分钟跑起 4 倍速离线语音识别
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
faster-whisper 是一个语音识别本地部署方案:它用 CTranslate2 推理引擎重新实现了 OpenAI Whisper 模型,识别精度与原版一致,速度最快提升到 4 倍,显存和内存占用约省一半,还支持 8 位量化(把模型权重压缩到更低精度来省资源)。
先说几个常见困境
云语音 API 按调用量计费,批量处理时成本会快速上涨。会议录音、医疗资料这类敏感内容,传到第三方服务器总让人不放心。网络不稳定或需要断网环境工作时,云端服务直接不可用。而原版的 openai/whisper 在 CPU 上转写 13 分钟音频要近 7 分钟,等不起。faster-whisper 针对的就是这四件事:全部在本地跑,速度更快,占的资源更少。
它是怎么快的
核心换掉了推理引擎。原项目用 PyTorch 做前向计算,faster-whisper 改用 CTranslate2——一个专为 Transformer 模型优化的推理框架,算子实现更紧凑,CPU 和 GPU 都能加速。在此之上提供 int8 量化:把 32 位浮点权重压缩到 8 位整数,参数体积缩小约 4 倍,内存需求随之减半,代价是几乎可以忽略的精度损失。另外它通过 PyAV 自带 FFmpeg 解码库,读音频不用额外装 FFmpeg。仓库的 benchmark/ 目录下放了官方对比脚本,可以复测这些数据。
一条命令安装,怎么确认装好了
pip install faster-whisper需要 Python 3.9 及以上。装完跑一句确认:
python -c "import faster_whisper; print(faster_whisper.__version__)"能打印出版本号(如 1.2.1)就说明导入正常。模型不用手动下载,第一次运行WhisperModel("large-v3")时会自动拉取并缓存,之后离线也能加载。
第一次转写:最小示例
from faster_whisper import WhisperModel model = WhisperModel("base", device="cpu", compute_type="int8") segments, info = model.transcribe("audio.mp3", beam_size=5) print(f"语言: {info.language}, 置信度: {info.language_probability:.2f}") for seg in segments: print(f"[{seg.start:.2f}s -> {seg.end:.2f}s] {seg.text}")预期输出类似这样:
语言: en, 置信度: 0.98 [0.00s -> 4.20s] And so my fellow Americans, fear nothing. [4.20s -> 7.80s] We have much work to do.两个新手最容易忽略的点:segments是生成器,你不写循环遍历它,转写就根本不会开始;info.language只在首次加载时基于开头 30 秒音频检测一次,明确知道语言的话直接传language="en"更稳。
按硬件选配置
官方 benchmark 用的是 13 分钟音频(NVIDIA RTX 3070 Ti 或 i7-12700K,8 线程),可作量级参考:
| 设备档位 | 模型 | device / compute_type | beam_size | 13 分钟音频耗时 |
|---|---|---|---|---|
| 高端 GPU(8GB 显存以上) | large-v3 / turbo | cuda / float16 | 5 | 约 1 分钟,批量推理可到 17 秒 |
| 中端 GPU(4–8GB 显存) | large-v3 | cuda / int8_float16 | 5 | 约 1 分钟,显存 2926MB |
| 普通笔记本(纯 CPU) | small 或 base | cpu / int8 | 5 | 约 1 分 42 秒(small) |
三条选型原则:显存紧张就把compute_type从 float16 降到 int8_float16,速度接近、显存少近一半;CPU 上 int8 是默认选择,比 fp32 快约一半且省内存;beam_size默认就是 5,追求更高准确度提到 10,但耗时同步上升。
三个进阶开关
- VAD 静音过滤:
vad_filter=True(批量推理时默认开启)。转写前先跑一遍 Silero 语音活动检测,只转有人声的部分。长音频、会议录音、中间大段静音的录音建议常开,省时间也能少出幻觉文本;可用vad_parameters=dict(min_silence_duration_ms=500)调静音判定阈值。 - 词级时间戳:
word_timestamps=True。每个词都带起止时间,做逐字高亮字幕、歌词对齐、关键词定位时用得上,不用的话别开,有额外计算开销。 - 批量推理:换
BatchedInferencePipeline并传batch_size=16。把多个 30 秒片段塞进同一次 GPU 计算,官方实测 GPU 上 13 分钟音频从 1 分 03 秒降到 17 秒,代价是显存更高;单文件、低配设备没意义。
另外hotwords参数可以给专有名词加权重,医学、金融术语识别不好时可以试试。更多参数看 WhisperModel.transcribe 源码。
四个高频坑,一行解决
- 现象:显存溢出 OOM。原因:模型精度占的显存超出显存。解决:
compute_type="int8_float16",仍溢出就换 medium。 - 现象:报找不到 cuBLAS / cuDNN 库。原因:GPU 运行依赖 NVIDIA 的 cuBLAS 和 cuDNN 9(CUDA 12 版),而最新 ctranslate2 只支持 CUDA 12。解决:按 CUDA 版本降级,CUDA 11 用
pip install --force-reinstall ctranslate2==3.24.0,CUDA 12 + cuDNN 8 用 4.4.0。 - 现象:输出明显不相关的话,或一直重复同一段(俗称幻觉)。原因:静音段没有真实语音,模型在"编"。解决:
vad_filter=True加language参数显式指定语言。 - 现象:调用
transcribe()后像"卡住",一直没结果。原因:segments是生成器,不迭代不执行。解决:segments = list(segments)强制跑完。
典型用途就两类:批量视频字幕生成、本地会议录音转文字,加上上面的配置就够开工了。
想动手的话,把仓库 clone 下来跑一遍 tests/ 里的用例最快:git clone https://gitcode.com/GitHub_Trending/fa/faster-whisper,包名以 PyPI 上的 faster-whisper 为准,遇到问题直接提 issue。
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考