faster-whisper 不是又一个 Whisper 套壳。它是 SYSTRAN 基于 CTranslate2 推理引擎对 OpenAI Whisper 的完整重实现,官方给出的定位是「在同等精度下比 openai/whisper 快最多四倍,同时占用更少内存」。仓库地址是 github.com/SYSTRAN/faster-whisper,MIT 协议,PyPI 上最新的稳定版本是 1.2.1。装它甚至不需要系统里有 FFmpeg——音频解码走 PyAV,FFmpeg 的动态库已经打包在 wheel 里了。
真正让它在 2025 年之后重新变成默认选择的,是 1.1.0 引入的 BatchedInferencePipeline:一行代码换成批量管线,官方 benchmark 里 13 分钟音频的转写时间从 1 分 03 秒掉到 17 秒。之后 1.1.1 修掉了 VAD 吃爆内存导致的 OOM,1.2.0 加上了 distil-large-v3.5 支持和批量转写里的静音剔除,1.2.1 把 Silero-VAD 升到了 V6 并修掉了批量管线里冒出 <|nocaptions|> token 的老毛病。搜「faster-whisper 本地部署」的人多半是被 openai-whisper 的速度劝退过来的,这条路径是对的。
显存这件事上,faster-whisper 的门槛低到有点反直觉。1550M 参数的 large-v3 权重文件只有 3.09GB,官方在一块 RTX 3070 Ti 8GB 上实测 fp16 顺序解码峰值 4,525MB、int8 峰值 2,926MB。换句话说,一张 24GB 的消费级卡不是「勉强够跑」,而是「够跑三四路并发还剩空间」。真正卡住自建的从来不是显存,是 CUDA 12 + cuDNN 9 那套依赖,和 VAD 参数没调好导致的漏句与重复。这两件事下面都讲。
01 —
能跑哪些模型,各要多少显存
faster-whisper 直接加载 CTranslate2 格式权重;下面的权重体积是 Hugging Face 上 model.bin 的实际字节数,峰值显存是官方 benchmark 的实测值
| 版本 | 参数量 | 显存 | 上下文 | 说明 |
|---|---|---|---|---|
| large-v3(Systran/faster-whisper-large-v3) | 1550M | fp16 权重 3.09GB/实测峰值 4,525MB;int8 峰值 2,926MB;batch_size=8 时 fp16 6,090MB、int8 4,500MB | 30 秒窗口 · 448 token · 100 语种 | 多语种精度上限,也是中文长音频转写的默认选择。HF 上月下载量 118 万次,生态里几乎所有下游项目都默认拉它。 |
| large-v3-turbo(deepdml/faster-whisper-large-v3-turbo-ct2) | 809M | fp16 权重 1.62GB,显著低于 large-v3 的 3.09GB | 30 秒窗口 · 448 token · 99 语种 | 解码层从 32 层剪到 4 层,编码器不动。OpenAI 自己的说法是「快很多,代价是轻微的质量下降」。要低延迟又不想丢多语种能力,选它。faster-whisper 从 1.1.0 起原生支持。 |
| distil-large-v3.5(distil-whisper/distil-large-v3.5-ct2) | 756M | fp16 权重 1.51GB | 30 秒窗口 · 仅英文 | faster-whisper 1.2.0 新增支持。相对实时率约为 large-v3-turbo 的 1.46 倍,短音频域外 WER 7.08%、长音频 11.39%。纯英文场景的性价比之王,也可以当 large-v3 投机解码的草稿模型用。中文用不了。 |
| large-v2(Systran/faster-whisper-large-v2) | 1550M | 与 large-v3 同规模:fp16 峰值 4,525MB、int8 峰值 2,926MB(官方 benchmark 即以此模型测得) | 30 秒窗口 · 99 语种 | 别急着跳过。仓库里「Whisper-v3 worse than v2」的 issue 攒了二十多条讨论,部分语种和口音上 v2 反而更稳。上生产前拿自己的音频对比一轮,成本只有几分钟卡时。 |
| medium / small / base / tiny | 769M / 244M / 74M / 39M | fp16 权重 1.53GB / 0.48GB / 约 0.15GB / 约 0.08GB | 30 秒窗口 · 99 语种 | medium 在很多中文场景下已经够用且快得多;small 及以下适合做关键词唤醒、语种识别预筛或超大规模粗筛,再把可疑片段丢给 large-v3 复核。 |
02 —
该租哪张卡
按 CTranslate2 的 compute_type 支持情况和实测显存峰值来挑,不多给也不少给
large-v3 fp16 批量转写长音频,成本优先
RTX 3090 24GB$0.193/卡·时
batch_size=8 的 fp16 峰值是 6,090MB,24GB 塞得下三到四个 worker 同时跑;Ampere 计算能力 8.6,fp16、bf16、int8 全支持,不会触发 CTranslate2 的类型回退。
实时字幕 / 会议转写,延迟优先,跑 large-v3-turbo 或 distil-large-v3.5
RTX 4090 24GB$0.540/卡·时
turbo 权重只有 1.62GB,瓶颈完全在时钟和显存带宽而不是容量,4090 把单请求首字延迟压得最低。
int8 量化稳定跑批,把单位音频成本压到最低
Tesla T4 16GB$0.298/卡·时
int8 峰值 2,926MB,16GB 绰绰有余;Turing 计算能力 7.5 带原生 INT8 张量核,正好吃满 CTranslate2 的 int8_float16 路径。
转写 + 强制对齐 + 说话人分离一条流水线(WhisperX / whisper-diarization)
RTX A6000 48GB$0.817/卡·时
48GB 能让 large-v3、wav2vec2 对齐模型和 pyannote 分离模型常驻同一张卡,省掉反复加载卸载,并发路数还能再翻一倍。
03 —
四步跑起来
在 NexGPU 上从开机到对外提供 OpenAI 兼容接口,实际耗时不到十分钟
- 01
开一台带 CUDA 12 的实例,装 faster-whisper
控制台里挑 PyTorch 或 Ubuntu CLI 预置镜像(2,000+ 个镜像里也有现成的 Whisper ASR 镜像),SSH 进去直接 pip。Python 3.9 以上即可,不需要另外装 FFmpeg——PyAV 已经把 FFmpeg 的库带进来了。
pip install faster-whisper==1.2.1 - 02
补齐 cuBLAS 与 cuDNN 9
这一步是自建 faster-whisper 唯一真正会翻车的地方。CTranslate2 的新版本只认 CUDA 12 + cuDNN 9。如果你的环境是 CUDA 12 + cuDNN 8,把 ctranslate2 降到 4.4.0;如果是 CUDA 11 + cuDNN 8,降到 3.24.0。走 Docker 的话直接用 nvidia/cuda:12.3.2-cudnn9-runtime-ubuntu22.04 做基础镜像,省事。注意 LD_LIBRARY_PATH 必须在启动 Python 之前设好。
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__))'` - 03
用批量管线跑第一段音频
别用最朴素的 model.transcribe 就下结论。BatchedInferencePipeline 是 1.1.0 引入的直接替换品,官方口径快四倍。还有一点必须记住:segments 是生成器,你不去迭代它,转写根本不会开始——很多人第一次跑觉得「瞬间返回、什么也没发生」就是栽在这。
from faster_whisper import WhisperModel, BatchedInferencePipeline model = WhisperModel("large-v3", device="cuda", compute_type="float16") batched = BatchedInferencePipeline(model=model) segments, info = batched.transcribe("audio.mp3", batch_size=16, vad_filter=True, language="zh") for s in segments: print("[%.2fs -> %.2fs] %s" % (s.start, s.end, s.text)) - 04
对外暴露 OpenAI 兼容的转写接口
官方社区集成里的 speaches(MIT 协议)用 faster-whisper 做后端,提供与 OpenAI 完全兼容的接口,还支持 SSE 流式返回边转边推。业务侧原来调 OpenAI 的 SDK 一行不用改,把 base_url 指到你这台实例就行。要做实时流式则换 WhisperLive 或 Whisper-Streaming,要说话人分离就上 WhisperX。
git clone https://github.com/speaches-ai/speaches && cd speaches docker compose --file compose.cuda.yaml up --detach
算一笔真账:1,000 小时音频要花多少
官方 benchmark 的口径很实在:13 分钟音频、large-v2、beam_size=5、batch_size=8、fp16,在一块 RTX 3070 Ti 8GB 上 17 秒跑完,也就是约 45.9 倍实时(780 ÷ 17 ≈ 45.9)。NexGPU 的 RTX 3090 24GB 是同代规格更高的 GA102,把 45.9 倍当保守下限并不过分。按 $0.193/卡·时 算:一个卡时约等于 45.9 小时音频,转写 1,000 小时音频 ≈ 1000 ÷ 45.9 ≈ 21.8 卡时,21.8 × $0.193 ≈ $4.21,折合每小时音频 0.42 美分。同一批活换到 RTX 4090 24GB($0.540/卡·时),即便还按 45.9 倍这个偏低的系数算也只要 21.8 × $0.540 ≈ $11.77,而 4090 实际只会更快,所以这是上限不是下限。模型缓存要不要留在持久盘?large-v3 的 model.bin 是 3.09GB,按 $0.414/GB·月 的中位价算约 $1.28/月;不留的话每次开机重新从 Hugging Face 拉一遍,也就几分钟的事。计费按秒走、按小时报价,17 秒的活就收 17 秒的钱,没有起步价、没有开通费、不用申请配额;实例一停算力就停止计费,只有存储会一直计到你销毁它为止。
04 —
