15分钟跑通 faster-whisper:CTranslate2 语音转写从零安装到 GPU 加速实战

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

用原版 Whisper 转一段 13 分钟音频,GPU 上要等 2 分 23 秒;换成 faster-whisper,1 分 03 秒就能跑完,还能用 8 比特量化再省一半显存。faster-whisper 用 CTranslate2 重写了 Whisper 推理,精度不变的情况下提速最高 4 倍。读完本文你将获得:A. 一套 3 步安装流程(含 GPU 依赖与模型预下载),B. 一个带词级时间戳和 VAD 过滤的最小可运行转写脚本,C. 一张 7 行报错速查表,遇到错误直接抄解法。

1. 开始之前:环境自检与选型决策

本节解决"装之前先确认什么":5 分钟自检,避免装到一半才发现缺 CUDA 或 Python 版本不够。

硬件与软件要求如下,按"最低/推荐"双栏对照:

项目最低要求推荐配置
操作系统Windows 10 / 11 / Linux / macOS(64 位)Linux(GPU 依赖安装最省心)
Python3.9(setup.pypython_requires=">=3.9"3.10 / 3.11
CPU任意 x86-64,4 线程以上8 线程以上(i7-12 代 / Ryzen 7 级别)
内存8GB(跑 small 模型约 1.5GB 峰值)16GB 以上(large-v3 + 批量转写)
NVIDIA GPU可选,无 GPU 可用 CPURTX 3070 级别 / 8GB 显存
CUDA + cuDNN仅 GPU 路线需要:CUDA 12 + cuDNN 9保持最新 NVIDIA 驱动

版本兼容性对照表(以本项目 requirements.txtsetup.py 声明为准):

faster-whisper 1.2.1 组件版本约束不满足时的替代方案
Python>=3.9(classifiers 声明 3.9/3.10/3.11)pyenv / 系统包管理器换到 3.10
ctranslate2>=4.0,<5CUDA 11 + cuDNN 8 环境:降级 ctranslate2==3.24.0;CUDA 12 + cuDNN 8:降级 ctranslate2==4.4.0
CUDA / cuDNN最新 ctranslate2 仅支持 CUDA 12 + cuDNN 9无 NVIDIA GPU:跳过,走 CPU 路线
av(PyAV)>=11随 pip 自动安装,无需系统 FFmpeg(PyAV 已打包 FFmpeg 库)
onnxruntime>=1.14,<2仅使用 vad_filter 时才实际加载

自检决策流,按图走即可确定你的安装路径:

mermaid

2. 一次装完:安装与验证

本节解决"从零到能 import":3 个依赖块,每块都是"为什么需要 → 装 → 验"三段式,抄命令即可。

2.1 安装 faster-whisper 主包

为什么需要:它是全部入口,负责模型下载、音频解码和转写调度。

# 安装主包,依赖自动带上 ctranslate2 / av / onnxruntime 等
pip install faster-whisper

# 验证导入与版本
python -c "import faster_whisper; print(faster_whisper.__version__)"

想跟最新代码开发时,可改从源码安装:git clone https://gitcode.com/GitHub_Trending/fa/faster-whisper 进入目录后执行 pip install .(注意:本仓库默认只读,仅在你本地克隆副本中安装)。

2.2 验证 PyAV 音频解码

为什么需要:没有系统 FFmpeg 也能读 mp3/wav/flac,解码全靠它。

pip install "av>=11"

# 验证解码链可用(仓库自带测试音频)
python -c "from faster_whisper.audio import decode_audio; print(decode_audio('tests/data/jfk.flac').shape)"

av 提供各平台预编译 wheel,Windows 下直接 pip install av 即可,无需 GCC 编译环境;遇到 wheel 缺失再考虑预编译包站点。

2.3 配置 NVIDIA GPU 依赖(有卡才做)

为什么需要:CTRanslate2 的 CUDA 推理运行时依赖 cuBLAS 与 cuDNN 动态库。

# 方式一(Linux):pip 装库并配置库路径
pip install nvidia-cublas-cu12 "nvidia-cudnn-cu12==9.*"
export LD_LIBRARY_PATH=$(python3 -c 'import os; import nvidia.cublas.lib as c, nvidia.cudnn.lib as d; print(os.path.dirname(c.__file__) + ":" + os.path.dirname(d.__file__))')

# 验证 GPU 可用(列表中应出现 cuda)
python -c "import ctranslate2; print(ctranslate2.get_supported_compute_types('cuda'))"

Windows 用户把 cuBLAS / cuDNN 9 的 dll 放入已加入 PATH 的目录(可解压官方 CUDA 12 运行库包,或参考 README 中 Purfview 的独立库包方案);Docker 用户直接用官方镜像 nvidia/cuda:12.3.2-cudnn9-runtime-ubuntu22.04,库已内置。

版本陷阱:最新 ctranslate2 仅支持 CUDA 12 + cuDNN 9。CUDA 11 + cuDNN 8 → pip install --force-reinstall ctranslate2==3.24.0;CUDA 12 + cuDNN 8 → ctranslate2==4.4.0

2.4 模型:首次自动下载,可预下载

为什么需要:WhisperModel("large-v3") 首次加载会从 Hugging Face Hub 拉取 CTranslate2 权重,预下载可避免首次转写卡顿。

# 预下载指定模型到本地目录
python -c "from faster_whisper import download_model; print(download_model('large-v3', output_dir='models/large-v3'))"

# 列出全部可选模型名
python -c "from faster_whisper import available_models; print(available_models())"

模型缓存在标准 Hugging Face 缓存目录,可用 WhisperModel(..., download_root=...) 改路径;local_files_only=True 可完全离线。可选模型名:tiny / tiny.en / base / base.en / small / small.en / medium / medium.en / large-v1 / large-v2 / large-v3 / large / distil-large-v2 / distil-medium.en / distil-small.en / distil-large-v3 / turbo(见 faster_whisper/utils.py 中的 _MODELS 映射)。

3. 从 Hello 到生产:最小示例与批量转写

本节解决"装好了怎么跑":先给 3 行最小示例,再给生产级参数与真实基准数据。

3.1 最小可运行示例

from faster_whisper import WhisperModel

# GPU 半精度;无 GPU 改 device="cpu", compute_type="int8"
model = WhisperModel("large-v3", device="cuda", compute_type="float16")

segments, info = model.transcribe("tests/data/jfk.flac", beam_size=5)
for seg in segments:  # segments 是生成器,迭代才真正开始转写
    print(f"[{seg.start:.2f}s -> {seg.end:.2f}s] {seg.text}")

计算类型(compute_type)按设备取舍,结论先行:

计算类型适用设备速度显存/内存精度
float32CPU基准最高最高
float16GPU高(GPU 首选)
int8_float16GPU最快省约一半略降(显存紧张时用)
int8CPU最快最低略降(CPU 首选)

3.2 进阶用法:时间戳、VAD、批量文件

生产场景常用的三个开关:

# 1) 词级时间戳(做字幕/Karaoke 必开)
segments, _ = model.transcribe("audio.mp3", word_timestamps=True)
for seg in segments:
    for w in seg.words:
        print(f"[{w.start:.2f} -> {w.end:.2f}] {w.word}")

# 2) VAD 过滤:先用 Silero VAD 切掉静音(默认只删 >2 秒的静音,
#    可用 vad_parameters=dict(min_silence_duration_ms=500) 收紧)
segments, _ = model.transcribe("audio.mp3", vad_filter=True)

# 3) 批量转写 + 热词提示专有名词
for path in files:
    segs, _ = model.transcribe(path, language="zh",
                               initial_prompt="热词提示语", hotwords="产品名 人名")
    lines = [f"[{s.start:.2f}s -> {s.end:.2f}s] {s.text}" for s in segs]
    (out_dir / (path.stem + ".txt")).write_text("\n".join(lines), encoding="utf-8")

GPU 上有多个文件要并行时,用批量管道(VAD 默认开启,batch_size 调吞吐):

from faster_whisper import WhisperModel, BatchedInferencePipeline

model = WhisperModel("turbo", device="cuda", compute_type="float16")
pipeline = BatchedInferencePipeline(model=model)
segments, info = pipeline.transcribe("audio.mp3", batch_size=16)

3.3 性能基准(与项目 README 实测数据一致)

GPU 端:13 分钟音频,large-v2,NVIDIA RTX 3070 Ti 8GB,CUDA 12.4:

实现 / 配置精度beam size耗时显存相对 openai/whisper
openai/whisperfp1652m23s4708MB基准
faster-whisperfp1651m03s4525MB2.3x
faster-whisper(batch_size=8)fp16517s6090MB8.4x
faster-whisperint8559s2926MB2.4x(显存 -36%)
faster-whisper(batch_size=8)int8516s4500MB8.9x

CPU 端:13 分钟音频,small 模型,Intel i7-12700K(8 线程):

实现 / 配置精度beam size耗时内存
openai/whisperfp3256m58s2335MB
faster-whisperfp3252m37s2257MB
faster-whisper(batch_size=8)fp3251m06s4230MB
faster-whisperint851m42s1477MB
faster-whisper(batch_size=8)int8551s3608MB

另有 distil-whisper-large-v3 对比(GPU,fp16,batch_size=16,YT Commons WER):

实现耗时WER
transformers(SDPA)46m12s14.801
faster-whisper25m50s13.527

对比注意:测速前先确认 beam size、词错误率(WER)、CPU 线程数(OMP_NUM_THREADS)三者一致,否则数字不可比。

4. 遇到报错:排错速查表

本节解决"报错了对什么药":7 个高频错误按"报错信息 | 常见原因 | 一句话解法"列出,查表即修。

报错信息常见原因一句话解法(附命令)
Invalid model size 'xxx', expected one of: ...模型名写错python -c "from faster_whisper import available_models; print(available_models())" 核对,如 large-v3 / turbo
cuBLAS / cudnn 加载失败(找不到库)缺 CUDA 12 运行库安装 cuBLAS for CUDA 12 与 cuDNN 9 并加入 PATH / LD_LIBRARY_PATH(Linux 可 pip install nvidia-cublas-cu12 "nvidia-cudnn-cu12==9.*"
CUDA 版本不匹配(如 CUDA driver version is insufficientctranslate2 5.x 只认 CUDA 12按兼容表降级:pip install --force-reinstall ctranslate2==4.4.0(cuDNN 8)或 ==3.24.0(CUDA 11)
CUDA error: out of memory显存不足降精度 compute_type="int8_float16",或批量转写时调小 batch_size(16 → 4)
int8 计算类型初始化失败GPU 架构过老(GTX 10 系等)int8 需要较新架构,改用 compute_type="float16" 或 CPU 端 int8
FileNotFoundError / 音频解码报错文件损坏或 PyAV 读不了该封装换 WAV:ffmpeg -i in.mp3 -ac 1 -ar 16000 out.wav,或直接传 np.ndarray 波形
No clip timestamps found. Set 'vad_filter' to True or provide 'clip_timestamps'.批量管道对长音频必须给切分信息BatchedInferencePipeline.transcribe(..., vad_filter=True) 或显式传 clip_timestamps

首次加载任何模型都需要联网从 Hub 下载;内网机器先在一台外网机器执行 2.4 的 download_model 预下载,再把目录拷过去用 download_root 指向即可。

5. 更进一步

本节解决"跑通之后往哪走":4 个方向各一两句,附资源清单。

  • 量化:CPU/GPU 均支持 compute_type="int8"(GPU 用 int8_float16),内存最低可降到 1477MB(small 模型实测),显存省约一半。
  • 多卡与多线程WhisperModel(..., device_index=[0, 1]) 加载到多张 GPU,配合 num_workers 与多线程调用 transcribe() 提升总吞吐。
  • 模型转换:用 pip install "transformers[torch]>=4.23"ct2-transformers-converter 命令,把原版或微调过的 Transformers 格式 Whisper 权重转成 CTranslate2 格式,再 WhisperModel("本地目录") 加载。
  • 参数调优beam_size(默认 5,越小越快)、hotwords / initial_prompt(提升专有名词准确率)、VAD 参数(faster_whisper/vad.pyVadOptions)按语料分别调。

资源清单(全部为仓库内路径):

资源位置
使用说明与基准数据README.md
转写主实现(全部 transcribe 参数)faster_whisper/transcribe.py
模型名映射与下载逻辑faster_whisper/utils.py
VAD 参数与默认值faster_whisper/vad.py
GPU 容器示例docker/

6. 附录:一行命令速查表

功能命令
安装主包pip install faster-whisper
克隆源码仓库git clone https://gitcode.com/GitHub_Trending/fa/faster-whisper
查已装版本python -c "import faster_whisper; print(faster_whisper.__version__)"
查 GPU 支持列表python -c "import ctranslate2; print(ctranslate2.get_supported_compute_types('cuda'))"
列出可用模型python -c "from faster_whisper import available_models; print(available_models())"
预下载模型到指定目录python -c "from faster_whisper import download_model; print(download_model('large-v3', output_dir='models/large-v3'))"
CPU 端限线程跑脚本OMP_NUM_THREADS=8 python3 my_script.py
最小转写验证python -c "from faster_whisper import WhisperModel; m=WhisperModel('tiny.en', device='cpu', compute_type='int8'); print(list(m.transcribe('tests/data/jfk.flac')[0]))"

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

更多推荐