Faster-Whisper 本地部署指南:3 个判断定配置,5 分钟跑通语音识别
2026/9/5 17:06:53 网站建设 项目流程

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。

硬件devicecompute_type说明
NVIDIA GPU"cuda""float16"速度与精度平衡,首选
NVIDIA GPU"cuda""int8_float16"显存紧张时的混合量化
CPU"cpu""int8"比 fp32 快且内存约省一半(官方基准参考值)

二、5 分钟搭好本地推理环境 🐍

安装只有一条命令,要求 Python 3.9 以上。音频解码由 PyAV 库内置完成,不需要单独安装 FFmpeg

pip install faster-whisper

GPU 环境需要额外准备 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 fp162m23s4708MB
GPUfaster-whisper fp161m03s4525MB
GPUfaster-whisper int859s2926MB
GPUfaster-whisper fp16 + batch_size=817s6090MB
CPU(i7-12700K,small 模型)fp322m37s2257MB
CPUint81m42s1477MB

自己复测时注意三点,否则对比没有意义:

  • 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/目录提供了现成的验收素材,遇到异常时把日志级别调到DEBUGlogging.getLogger("faster_whisper").setLevel(logging.DEBUG))通常能直接看到问题段落在哪。

【免费下载链接】faster-whisperFaster Whisper transcription with CTranslate2项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询