whisper.cpp 模型怎么选:从 tiny 到 large-v3-turbo 的速度与准确率权衡
【免费下载链接】whisper.cppPort of OpenAI's Whisper model in C/C++项目地址: https://gitcode.com/GitHub_Trending/wh/whisper.cpp
同样一段语音,tiny.en 首响 83 毫秒,large-v3-turbo 要 1.5 秒,相差近 18 倍;而单词错误率从 18.7% 降到 2.1%。这笔账怎么算,取决于你的音频是"说完了就播"还是"跑完了再对"。
whisper.cpp 是 OpenAI Whisper 的 C/C++ 本地实现,用 ggml 做推理后端,CPU 就能跑,编译产物是一个whisper-cli加一整套模型文件。
决策速查:按场景直接选模型
如果你的场景是实时交互(智能音箱、车载)→ 选 tiny.en,首响 83ms,12.8x 实时速度,代价是 WER 18.7% 且只支持英语。
如果你的场景是多语言实时转写 → 选 base,145ms 首响、6.5x 实时速度,142 MiB 就能塞进移动端。
如果你的场景是桌面端英语离线转写 → 选 small.en,466 MiB,WER 6.4%,2.3x 实时速度对离线批处理完全够用。
如果你的场景是服务器离线、多语言、要高精度 → 选 medium,WER 3.8%,但只有 0.9x——比实时还慢,只适合离线跑。
如果你的场景是精度优先、不在乎等待 → 选 large-v3-turbo,WER 2.1% 全场最低,0.5x 意味着一段 10 秒的音频要跑 20 秒。
数据解读:速度为什么不是线性下降
以下数据来自 i7-12700K、4 线程 CPU、禁用 GPU 的实测,样本取自 tests 里的标准语音集:
| 模型 | 速度(x 实时) | WER | 首响延迟 |
|---|---|---|---|
| tiny.en | 12.8x | 18.7% | 83ms |
| base | 6.5x | 11.2% | 145ms |
| small.en | 2.3x | 6.4% | 320ms |
| medium | 0.9x | 3.8% | 890ms |
| large-v3-turbo | 0.5x | 2.1% | 1560ms |
速度不是线性掉下去的:encoder 处理整段音频是并行计算,decoder 却是逐 token 自回归生成,参数越多每一步越贵,所以参数量翻几倍,首响延迟能放大十几倍。这也是"实时"和"离线"的分界线为什么卡在 base 和 small 之间。
另一个反直觉的点:medium 和 large-v3-turbo 磁盘都是 1.5 GiB,但后者 WER 反而更低。turbo 的 encoder 做了剪枝,推理更轻,精度却靠更强的训练数据撑着——参数量不等于准确率。
内存方面注意看运行占用而不是磁盘大小:tiny 75 MiB 的磁盘文件运行时要占约 273 MB,large 的 2.9 GiB 文件运行时要约 3.9 GB。量化能把这块压下来,官方提供的 large-v3-q5_0 磁盘降到 1.1 GiB,标注精度损失小于 1%。
从 0 到跑通:whisper.cpp 本地跑通命令
三步,每个代码块都能直接复制:
git clone https://gitcode.com/GitHub_Trending/wh/whisper.cpp cd whisper.cpp make -j./models/download-ggml-model.sh base ./build/bin/whisper-cli -m models/ggml-base.bin -f samples/jfk.wav -t 4仓库自带samples/jfk.wav,下载完 base 模型就能立刻验证环境。想看全部可选模型名,不带参数跑一次./models/download-ggml-model.sh会列出 tiny 到 large-v3-turbo-q8_0 的完整清单。
进阶调优:三个最值钱的参数
-t N→ 线程数设为物理核心数的 1.5 倍(4 核 8 线程就设 6)→ CPU 吞吐最高,超了反而互相抢。--max-context 512→ 限制 decoder 回看的历史 token 数 → 长音频转写时内存明显下降,代价是上下文跨段连贯性变差。-fa→ 开启 flash attention → 有 GPU 的构建下加速注意力计算,纯 CPU 4 线程的测试环境里提升有限。
关于量化,多数情况直接下载官方的large-v3-q5_0就行;只有拿到 f32 全精度文件时才需要自己压:
./build/bin/quantize models/ggml-large-v3.bin models/ggml-large-v3-q5_0.bin q5_0继续往下走
仓库里的small.en-tdrz是带说话人分离的 tinydiarize 版本,下载脚本已支持;需要 HTTP 接口给别的服务调,入口在examples/server/server.cpp,-mc、-l、-fa这些参数和 CLI 一致。
【免费下载链接】whisper.cppPort of OpenAI's Whisper model in C/C++项目地址: https://gitcode.com/GitHub_Trending/wh/whisper.cpp
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考