Faster-Whisper 本地部署指南:3 个判断定配置,5 分钟跑通语音识别
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
本文带你用 faster-whisper 在本地完成语音识别部署:先做三个判断选定模型与计算精度,再用最小代码跑通首次转录,最后给出三个高频坑的解法和官方性能参考值。
一、三个判断,定下你的部署方案
上手前先把三个问题定下来,能省掉后面大部分返工:要不要本地部署、用哪个模型、用什么计算精度。
判断 1:该不该本地部署
faster-whisper 用 CTranslate2(一个面向 Transformer 模型的推理引擎)重写了 OpenAI Whisper 的推理路径,音频不出机器,也没有按次调用的费用。官方基准显示,相同精度下转录 13 分钟音频,openai/whisper 需要 2 分 23 秒,faster-whisper(fp16)只要 1 分 03 秒(官方基准参考值,自验方法见第五节)。
适合本地部署的情况,通常满足其一:
- 音频涉及敏感内容(会议、医疗、法务),不能上传第三方服务
- 批量处理需求大,云端按次计费成本压不住
- 设备无法联网,需要离线运行
如果只是偶尔转录几段短音频,云端 API 更省事,不必为此搭建本地环境。
判断 2:选哪个模型
模型名称直接传给WhisperModel,对应的 CTranslate2 权重会在首次运行时自动下载,可下载的名称列表定义在模型列表中。选型思路:
- CPU 环境:
small及以下,追求极速可用tiny - GPU 环境、追求精度:
large-v3,或更轻的distil-large-v3(蒸馏版,参数量更少、速度更快) - 仅英文场景:带
.en后缀的模型(如base.en)比多语言版更快更准;英文高吞吐场景可看turbo(large-v3 的蒸馏加速版)
模型选大了机器带不动,选小了专有名词识别率会掉,建议先用small跑一遍样音,听感不满意再升级。
判断 3:按硬件选对计算精度
compute_type控制权重的存储和运算精度,int8 指 8 位整数量化(把 fp32 权重压到 8 位,省内存、提速,精度损失很小)。核心推理模块中device默认值为"auto",有 GPU 时自动使用 GPU。
| 硬件 | device | compute_type | 说明 |
|---|---|---|---|
| NVIDIA GPU | "cuda" | "float16" | 速度与精度平衡,首选 |
| NVIDIA GPU | "cuda" | "int8_float16" | 显存紧张时的混合量化 |
| CPU | "cpu" | "int8" | 比 fp32 快且内存约省一半(官方基准参考值) |
二、5 分钟搭好本地推理环境 🐍
安装只有一条命令,要求 Python 3.9 以上。音频解码由 PyAV 库内置完成,不需要单独安装 FFmpeg:
pip install faster-whisperGPU 环境需要额外准备 NVIDIA 的 cuBLAS(CUDA 12)和 cuDNN 9 两个库。Linux 上可以直接用 pip 装,并设置LD_LIBRARY_PATH:
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__))')下面是最小可运行示例,用的是仓库自带的示例音频:
from faster_whisper import WhisperModel audio_file = "tests/data/jfk.flac" # 仓库自带示例音频 asr_model = WhisperModel("base", device="cpu", compute_type="int8") segments, info = asr_model.transcribe(audio_file, beam_size=5) print(f"语言: {info.language},置信度 {info.language_probability:.2f}") for seg in segments: print(f"[{seg.start:7.2f} -> {seg.end:7.2f}] {seg.text}")segments是生成器(generator,一种惰性序列),在遍历它之前不会真正执行转录——这一点是新手最常踩的坑,第三节详细说。
三、跑不通?三个高频坑与解法 🛠️
坑 1:调了 transcribe,程序却没动静
model.transcribe返回的segments是生成器,调用瞬间只完成参数解析,音频不遍历、模型不加载推理。把结果物化成列表,或直接在for循环里消费:
segments, info = asr_model.transcribe(audio_file) results = list(segments) # 转录在这一步才真正执行 print(results[0].text)坑 2:VAD 把语音切没了,或静音全留着
vad_filter=True会启用 Silero VAD(语音活动检测模型,先筛出有声片段再送模型,避免空转),默认策略偏保守:只丢弃超过 2 秒的静音。参数默认值定义在 VAD 模块,可通过vad_parameters覆盖:
segments, info = asr_model.transcribe( audio_file, vad_filter=True, vad_parameters=dict(min_silence_duration_ms=500), # 默认 2000ms )- 背景噪音多、误判出多余片段:调大
min_silence_duration_ms(如 800) - 句子交界处有字被切掉:调小(如 300),或增大
speech_pad_ms(默认 400,每段语音两侧的保护垫)
坑 3:GPU 报 CUDA / cuDNN 版本冲突
最新版ctranslate2只支持 CUDA 12 + cuDNN 9。环境不匹配时的降级方案:
- CUDA 11 + cuDNN 8:
pip install --force-reinstall ctranslate2==3.24.0 - CUDA 12 + cuDNN 8:
pip install --force-reinstall ctranslate2==4.4.0
图省事可以直接用 Docker,官方镜像nvidia/cuda:12.3.2-cudnn9-runtime-ubuntu22.04已内置所需库,仓库里给了可直接参考的 Docker 示例。
四、进阶参数:更准、更快的转录
以下参数都在transcribe上直接传参,完整签名见核心推理模块。
词级时间戳:给每个词打点
segments, _ = asr_model.transcribe(audio_file, word_timestamps=True) for seg in segments: for word in seg.words: print(f"[{word.start:7.2f} -> {word.end:7.2f}] {word.word}")做逐词高亮、字幕对齐时必开。
批量推理:GPU 上的最大提速点
BatchedInferencePipeline把多个 30 秒窗口打包一起送 GPU,是 GPU 环境下提升最明显的开关,且默认就带 VAD:
from faster_whisper import WhisperModel, BatchedInferencePipeline model = WhisperModel("turbo", device="cuda", compute_type="float16") pipeline = BatchedInferencePipeline(model=model) segments, info = pipeline.transcribe(audio_file, batch_size=16) # int8 时用 8官方基准中(large-v2,GPU),fp16 加batch_size=8时 13 分钟音频 17 秒跑完,比非批量快 3 倍以上(官方基准参考值)。
提高准确率的开关
hotwords="量子 纠缠":给专有名词、术语加权,减少同音词误识initial_prompt="这是一段关于物理学的讲座":注入上下文,引导输出风格beam_size(束搜索宽度,同时保留几条候选路径取最优):默认 5,调到 10 可提升少量准确率,耗时相应变长temperature:默认按 0.0 起步、逐段递增,低置信度段自动重试;language="zh"明确指定语言可跳过检测环节condition_on_previous_text=True默认启用(用前文帮助消歧),但distil-large-v3官方推荐搭配language="en"并关闭它
五、官方基准参考与自验方法
以下数据摘自仓库 README,均为官方基准参考值,请以自己环境实测为准:
| 场景 | 配置 | 13 分钟音频耗时 | 内存/显存 |
|---|---|---|---|
| GPU(RTX 3070 Ti) | openai/whisper fp16 | 2m23s | 4708MB |
| GPU | faster-whisper fp16 | 1m03s | 4525MB |
| GPU | faster-whisper int8 | 59s | 2926MB |
| GPU | faster-whisper fp16 + batch_size=8 | 17s | 6090MB |
| CPU(i7-12700K,small 模型) | fp32 | 2m37s | 2257MB |
| CPU | int8 | 1m42s | 1477MB |
自己复测时注意三点,否则对比没有意义:
beam_size对齐:openai/whisper 默认 1,faster-whisper 默认 5- CPU 下用
OMP_NUM_THREADS=8 python3 my_script.py固定线程数 - 用 WER(词错误率,即识别错词占比)相近的两组结果比速度,仓库自带基准脚本可直接跑
先用small+ int8 在 CPU 上把第二节的最小示例跑通,再对照第三节排查你的硬件环境,然后用第四节的 VAD 和beam_size参数调到自己音频上的效果满意为止。仓库的benchmark/和tests/目录提供了现成的验收素材,遇到异常时把日志级别调到DEBUG(logging.getLogger("faster_whisper").setLevel(logging.DEBUG))通常能直接看到问题段落在哪。
【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考