如何开启 whisper.cpp CUDA 加速:从编译、选模型到跑通样例的完整指南
【免费下载链接】whisper.cppPort of OpenAI's Whisper model in C/C++项目地址: https://gitcode.com/GitHub_Trending/wh/whisper.cpp
如果你的长音频转录一直卡在 CPU 上,whisper.cpp CUDA 加速可以把识别计算交给 NVIDIA 显卡。本文讲清楚四件事:判断要不要上 GPU、编译出 GPU 版本、按显存选模型、显存不够怎么办。适合手里有一张 NVIDIA 卡、想批量或实时转写音频的用户。
先花 30 秒判断:你的场景值不值得上 GPU
结论先说:只有当 CPU 确实扛不住、且显卡是 NVIDIA 时,GPU 加速才值得折腾。对照下表自查:
| 检查项 | 上 GPU | 不必上 GPU |
|---|---|---|
| 单次音频时长 | 30 分钟以上的长录音、批量文件 | 几秒到几分钟的短音频 |
| 是否实时 | 直播字幕、会议转写等对延迟敏感 | 离线批处理、可排队执行 |
| CPU 占用 | 转录时 CPU 打满、其他任务卡顿 | 转录时 CPU 还有余量 |
| 显卡品牌 | NVIDIA(CUDA 只支持 N 卡) | AMD/核显(可另看 Vulkan 方案) |
四项里命中三条"上 GPU",再往下读;否则 CPU 版本够用,编译还更省事。
三步跑通第一次 GPU 转录
三步走完,你能听到 GPU 参与计算的第一次转录结果。
第一步:确认环境。下面两条命令分别验证 CUDA 编译器和驱动是否正常:
nvcc --version nvidia-sminvidia-smi应显示你的显卡型号。若提示命令不存在,先装 CUDA Toolkit 和匹配的 NVIDIA 驱动。
第二步:带着 CUDA 开关编译。-DGGML_CUDA=1是 whisper.cpp 开启 GPU 支持的唯一必需选项:
cmake -B build -DGGML_CUDA=1 cmake --build build --config Release -j$(nproc)编译耗时较长,取决于机器核数。成功后可查 ggml/src/ggml-cuda/ 目录确认 CUDA 内核确实参与了构建。
第三步:下载模型并转录仓库自带的样例。先用项目脚本拉一个 base.en 模型,再跑 jfk.wav:
./models/download-ggml-model.sh base.en ./build/bin/whisper-cli -m models/ggml-base.en.bin -f samples/jfk.wav输出里出现 "INFO: model loaded" 且结尾打印出 "And so my fellow Americans..." 这段文字,就说明链路通了。注意 whisper-cli 目前只收 16-bit WAV,其他格式请先转码。
按显存选模型:各档位对照表
模型大小直接决定显存下限。whisper.cpp 的模型按 tiny 到 large-v3 五档递进,下表是各档文件体积与显存建议(模型文件加载后还需额外开销,故留了余量):
| 档位 | 文件体积 | 建议显存 | 点评 |
|---|---|---|---|
| tiny / tiny.en | 75 MiB | 2 GB 起 | 精度明显偏弱,只建议用来验证环境 |
| base / base.en | 142 MiB | 4 GB 起 | 速度最快的一档,英文短内容够用 |
| small / small.en | 466 MiB | 4~6 GB | 精度与速度的平衡点,多语言场景的默认选择 |
| medium / medium.en | 1.5 GiB | 8 GB 起 | 专业级精度,会议、讲座类长音频 |
| large-v3 | 2.9 GiB | 12 GB 起 | 最高精度,显存 8 GB 的卡建议用其 q5_0 量化版(1.1 GiB) |
默认推荐:base.en(纯英文)或 small(多语言)。两档在 4~6 GB 显存的卡上都能跑,精度损失对日常转写几乎无感,后面还有量化手段可补。
想要更快:三个进阶动作
动作一:量化模型。量化用更低的比特数存权重,模型变小、加载和读取都更快,代价是轻微精度下降。项目自带 quantize 工具,把 fp32 模型压成 q5_0:
./build/bin/quantize models/ggml-base.en.bin models/ggml-base.en-q5_0.bin q5_0以 large-v3 为例,从 2.9 GiB 压到 1.1 GiB,体积减少约 62%,速度通常有 10%~30% 提升,精度损失肉眼难辨。
动作二:调推理参数。-t控制 CPU 侧线程数,-b控制批处理大小,长音频可加大 batch 提高吞吐,代价是显存占用上升:
./build/bin/whisper-cli -m models/ggml-small.en.bin -f samples/jfk.wav -t 8 -b 512所有参数用./build/bin/whisper-cli -h查看,不需要背。
动作三:显存不够时分级处理。顺序是:换量化版模型 → 换更小档位 → 把长音频切段逐段处理。量化优先,因为它几乎不动精度;切段是最后手段,但能救急。
卡住了:症状对照处理表
遇到报错先对号入座,多数问题出在编译开关和显存两处:
| 症状 | 可能原因 | 处理 |
|---|---|---|
| cmake 报找不到 CUDA | nvcc 不在 PATH,或未装 CUDA Toolkit | which nvcc,缺则补环境变量 |
| 编译通过但运行报 CUDA error | 驱动与 CUDA 版本不匹配 | nvidia-smi看驱动支持的最高 CUDA 版本 |
CUDA out of memory | 模型太大 | 换-q5_0量化模型或更小档位 |
| 跑得慢、GPU 几乎没用 | 编译时漏了 CUDA 开关 | 加-DGGML_CUDA=1重新配置再编译 |
| 模型加载失败/乱码 | 模型文件下载不完整 | 按 models 目录 README 里的 SHA 校验 |
用数据说话:基准数字意味着什么
在 RTX 2060(8 GB 显存)上对 20 秒的 jfk.wav 做基准测试,各阶段耗时(毫秒):
| 模型 | 编码 | 解码 | 批处理 | 后处理 |
|---|---|---|---|---|
| tiny | 12.5 | 0.9 | 0.3 | 0.02 |
| base | 24.1 | 1.3 | 0.4 | 0.03 |
| small | 74.7 | 2.9 | 0.8 | 0.07 |
| medium | 200.7 | 6.5 | 1.8 | 0.17 |
三个解读:一是时间几乎全在"编码"阶段,解码和后处理可以忽略,优化方向也就明确了;二是模型每上一档,编码耗时大约翻 2~4 倍,选档时要对得起你的硬件;三是 200 毫秒处理 20 秒音频,意味着 GPU 跑 medium 模型接近实时,长音频不再需要等。想要自己复现,用 examples/bench/ 目录下的 bench 工具即可,仓库里 scripts/bench-all-gg.txt 存了多卡型的完整数据可作参照。
上生产前必须落实的两件事
容器化:用带 CUDA 的官方基础镜像,把编译和模型下载都固化进去,避免换机器就踩环境坑。关键几行:
FROM nvidia/cuda:11.8.0-devel-ubuntu22.04 # 仓库克隆与 cmake -DGGML_CUDA=1 编译步骤略监控:生产环境至少要有 GPU 利用率与显存两个指标,最简单的做法是定时采样:
watch -n 1 nvidia-smi显存长期贴顶就该换量化模型,利用率长期低于 20% 则说明 batch 或并发没调好。
资源清单
- CUDA 内核源码:ggml/src/ggml-cuda/,想理解加速原理从这里入手
- 示例工具集:examples/,含 cli、bench、quantize、server 等
- 模型下载脚本:models/download-ggml-model.sh,模型体积与 SHA 见 models/README.md
- 多硬件基准数据:scripts/bench-all-gg.txt
- 参数速查:直接运行
./build/bin/whisper-cli -h
今天就能做的三件事:
- 跑
nvidia-smi,确认驱动和显存,决定你能用的模型上限 - 按本文第二步编译一次 GPU 版本,用 jfk.wav 验证链路
- 拿一段 5 分钟的真实音频,分别用 base.en 和 small 各跑一遍,自己量出速度差再定档
【免费下载链接】whisper.cppPort of OpenAI's Whisper model in C/C++项目地址: https://gitcode.com/GitHub_Trending/wh/whisper.cpp
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考