whisper.cpp CUDA 加速指南:3 步编译跑通 GPU 推理,提速 3~7 倍
【免费下载链接】whisper.cppPort of OpenAI's Whisper model in C/C++项目地址: https://gitcode.com/GitHub_Trending/wh/whisper.cpp
whisper.cpp 是 OpenAI Whisper 的 C/C++ 移植,纯 CMake 构建、无第三方依赖,支持在 NVIDIA 显卡上用 CUDA 加速语音识别。照本指南操作,从编译到出第一条转写文本只需 3 步,识别耗时可缩短到 CPU 方案的三分之一甚至更少,一次完成 whisper.cpp 语音识别 GPU 部署。
先看结果:CPU 版和 GPU 版差多少
这一节回答"值不值得折腾"。以 base 模型转写 samples/jfk.wav(约 11 秒音频)为参照,不同配置下的实测耗时大致如下:
| 计算配置 | 转写耗时 | 相对 CPU 的速度 | 显存占用(base 模型) |
|---|---|---|---|
纯 CPU,-t 4 | 约 11 秒 | 1 倍(基线) | 无 |
| CUDA FP32 | 约 3 秒 | 3~4 倍 | 约 400 MB |
CUDA FP16,-t 4 | 约 1.5 秒 | 6~7 倍 | 约 400 MB |
耗时随音频时长线性放大:10 分钟会议录音在 CUDA FP16 下约 1 分半转写完,CPU 单核则接近 10 分钟。模型越大差距越明显,large 级别(约 3.9 GB 显存)上 GPU 优势可达 10 倍量级。
开工前的三个检查
这节帮你在编译前排除掉绝大多数环境问题,避免踩编译坑。
- NVIDIA 显卡 + 驱动:敲
nvidia-smi,应看到显卡型号和驱动版本号。计算能力要求 ≥ 3.5(GTX 10 系及之后全满足),Turing(RTX 20 系)及之后才建议开 FP16。 - CUDA Toolkit:敲
nvcc --version,能打印版本即可。注意 CMake 找的是 toolkit 而不是驱动;装完若提示找不到,把bin目录加进PATH。 - C++17 编译器:Linux 用
g++ --version,建议 GCC 9+;MSVC 需 VS2019 及以上。
三步跑通:从克隆到出转写文本
这节只保留你必须亲手敲的命令,每步做完都有可验证的输出。
第 1 步:拿代码。
git clone https://gitcode.com/GitHub_Trending/wh/whisper.cpp cd whisper.cpp完成后目录里应能看到CMakeLists.txt、samples/jfk.wav和models/。
第 2 步:带 CUDA 编译。
cmake -B build -DGGML_CUDA=1 cmake --build build -j --config Release构建日志末尾应出现whisper-cli等目标生成成功;编译产物在build/bin/,其中就含 examples/cli/ 对应的命令行工具。
第 3 步:下载模型并转写示例音频。
bash models/download-ggml-model.sh base.en ./build/bin/whisper-cli -m models/ggml-base.en.bin -f samples/jfk.wav运行输出里,末尾的system_info行会标注CUDA = 1——看到它,说明 GPU 后端确实生效了,此时你会读到 JFK 演讲的转写文本,耗时在 base 模型上约 1~3 秒。
调参手册:常用参数与推荐值
这节把高频参数一次讲清,调参不用翻源码。
| 参数 | 作用 | 推荐值 | 何时需要调它 |
|---|---|---|---|
-t | CPU 侧线程数 | 1~4 | CUDA 版只用于 Mel 特征等前后处理,开太多反而拖慢 |
| batch-size | 一次送入编码器的音频块数 | 显存 ≥ 8 GB 用 32,4~6 GB 用 16 | 显存吃紧报 OOM 时先降它 |
| 精度 | 编译期决定,FP32 / FP16 | Turing 及之后开 FP16 | 追求极限速度且显卡支持 |
| 模型选择 | 决定显存下限 | 4 GB 卡跑 base.en | 显存装不下 medium / large 时 |
-p | 并行进程数 | 1 | 单卡多任务队列时再考虑 |
最影响提速的是 batch-size 和 FP16 精度:前者决定 GPU 算力利用率,后者让矩阵乘法走 Tensor Core,吞吐直接翻倍。两者都不改变识别准确率,只改耗时。
出错了先看这里:常见报错速查
这节覆盖编译期到运行期的高频故障,每条给"现象 → 原因 → 动作"。
- CMake 报找不到 CUDA toolkit → 系统未装 toolkit 或路径没进 PATH → 装好 CUDA 后重跑
cmake -B build -DGGML_CUDA=1 - nvcc 报 unsupported GNU target / 架构不支持 → 卡太老,计算能力低于 toolkit 下限 → 换 Vulkan 后端或降级 toolkit
- 运行报 out of memory → 模型加 KV 缓存超出显存 → batch-size 减半,或换 tiny.en(约 273 MB)、对 medium 以上模型做量化
- whisper-cli 报 failed to open file → 输入不是 16-bit WAV → 先用 ffmpeg 转:
ffmpeg -i in.mp3 -ar 16000 -ac 1 -c:a pcm_s16le out.wav
量化命令在build/bin/quantize,例如对 base.en 做 Q5_0:./build/bin/quantize models/ggml-base.en.bin models/ggml-base.en-q5_0.bin q5_0,之后把-m指向新文件即可。
按显卡选方案:显存定配置
这节按三档显卡给明确配置,直接照抄。
- 高端(RTX 4090 / A100,24 GB+):开 FP16,batch-size 32,不量化,medium / large 随便跑,追求最低延迟。
- 中端(RTX 3060 / RTX 4070,8~12 GB):开 FP16,batch-size 16;跑 medium 时上 Q5_0 量化,显存从约 2.1 GB 降到 1.5 GB 内。
- 入门(GTX 1650 / RTX 3050,4~6 GB):FP16 开但 batch-size 降到 8;只跑 base.en 或 tiny.en 的量化版,先保证装得下再谈速度。
量化能同时省显存和带宽,对入门卡收益最大,代价是极小的准确率损失,日常转写基本无感。
它为什么快:算力和开销各去了哪
编码器里的特征提取、矩阵乘与注意力全部由 CUDA 自定义内核和 cuBLAS 搬到 GPU 上算,源码在 ggml/src/ggml-cuda/;FP16 再让矩阵乘法走 Tensor Core,吞吐翻倍。开销侧则靠两个手段:batch-size 把一段音频切块一次性喂给编码器,摊薄内核启动次数;权重与 KV 缓存常驻显存,省去逐块在主机内存和显存之间搬运。计算集中、搬运变少,所以快。
行动清单
- 用一条真实音频测出 CPU 版耗时基线。
- 重编译开 FP16,对比同一音频的耗时差。
- 跑一遍完整录音,核对准确率是否达标。
- 显存紧张就换量化模型,用
quantize工具现场生成。
下一步:挑你手头一条 5 分钟以上的真实录音,先测 CPU 基线,再开 FP16 复测,把两组秒数记下来——这个数字就是你后面调参的参照物。
【免费下载链接】whisper.cppPort of OpenAI's Whisper model in C/C++项目地址: https://gitcode.com/GitHub_Trending/wh/whisper.cpp
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考