15分钟跑通 faster-whisper:CTranslate2 语音转写从零安装到 GPU 加速实战
15分钟跑通 faster-whisper:CTranslate2 语音转写从零安装到 GPU 加速实战
用原版 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 依赖安装最省心) |
| Python | 3.9(setup.py 中 python_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 可用 CPU | RTX 3070 级别 / 8GB 显存 |
| CUDA + cuDNN | 仅 GPU 路线需要:CUDA 12 + cuDNN 9 | 保持最新 NVIDIA 驱动 |
版本兼容性对照表(以本项目 requirements.txt 与 setup.py 声明为准):
| faster-whisper 1.2.1 组件 | 版本约束 | 不满足时的替代方案 |
|---|---|---|
| Python | >=3.9(classifiers 声明 3.9/3.10/3.11) | 用 pyenv / 系统包管理器换到 3.10 |
| ctranslate2 | >=4.0,<5 | CUDA 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 时才实际加载 |
自检决策流,按图走即可确定你的安装路径:
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)按设备取舍,结论先行:
| 计算类型 | 适用设备 | 速度 | 显存/内存 | 精度 |
|---|---|---|---|---|
| float32 | CPU | 基准 | 最高 | 最高 |
| float16 | GPU | 快 | 中 | 高(GPU 首选) |
| int8_float16 | GPU | 最快 | 省约一半 | 略降(显存紧张时用) |
| int8 | CPU | 最快 | 最低 | 略降(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/whisper | fp16 | 5 | 2m23s | 4708MB | 基准 |
| faster-whisper | fp16 | 5 | 1m03s | 4525MB | 2.3x |
| faster-whisper(batch_size=8) | fp16 | 5 | 17s | 6090MB | 8.4x |
| faster-whisper | int8 | 5 | 59s | 2926MB | 2.4x(显存 -36%) |
| faster-whisper(batch_size=8) | int8 | 5 | 16s | 4500MB | 8.9x |
CPU 端:13 分钟音频,small 模型,Intel i7-12700K(8 线程):
| 实现 / 配置 | 精度 | beam size | 耗时 | 内存 |
|---|---|---|---|---|
| openai/whisper | fp32 | 5 | 6m58s | 2335MB |
| faster-whisper | fp32 | 5 | 2m37s | 2257MB |
| faster-whisper(batch_size=8) | fp32 | 5 | 1m06s | 4230MB |
| faster-whisper | int8 | 5 | 1m42s | 1477MB |
| faster-whisper(batch_size=8) | int8 | 5 | 51s | 3608MB |
另有 distil-whisper-large-v3 对比(GPU,fp16,batch_size=16,YT Commons WER):
| 实现 | 耗时 | WER |
|---|---|---|
| transformers(SDPA) | 46m12s | 14.801 |
| faster-whisper | 25m50s | 13.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 insufficient) | ctranslate2 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.py 中VadOptions)按语料分别调。
资源清单(全部为仓库内路径):
| 资源 | 位置 |
|---|---|
| 使用说明与基准数据 | 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]))" |
更多推荐

所有评论(0)