news 2026/9/11 13:51:17

十分钟把语音识别搬上显卡:whisper.cpp CUDA 加速教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
十分钟把语音识别搬上显卡:whisper.cpp CUDA 加速教程

十分钟把语音识别搬上显卡:whisper.cpp CUDA 加速教程

【免费下载链接】whisper.cppPort of OpenAI's Whisper model in C/C++项目地址: https://gitcode.com/GitHub_Trending/wh/whisper.cpp

昨晚试着转录一段两小时的播客,纯 CPU 跑 whisper-cli,第二天早上起来还没跑完。转折其实很简单:whisper.cpp 是 OpenAI Whisper 语音识别模型的 C/C++ 移植,它对 NVIDIA GPU 有一等公民级别的支持,开启 CUDA 做 GPU 加速后,同样的音频几分钟就能转完,精度也基本不掉。这篇就是带你从零走到"看到显卡真的在干活"的那一步。

三步编译出 CUDA 版本

动手前先花一分钟确认环境:终端里跑一下nvidia-smi,能看到显卡型号和显存就说明驱动正常;再跑nvcc --version,能看到 CUDA 工具链的版本说明编译器也装好了。两样齐了,编译本身只有两行:

cmake -B build -DGGML_CUDA=1 cmake --build build -j --config Release

第一个参数就是全部关键:-DGGML_CUDA=1告诉构建系统把计算卸载到 GPU,缺了它编译出来的就是纯 CPU 版本。如果没有仓库代码,先克隆下来:

git clone https://gitcode.com/GitHub_Trending/wh/whisper.cpp cd whisper.cpp

跑通第一条最小命令

模型不用自己训练或转换,仓库带了现成的下载脚本,一行拿到 ggml 格式的 base 英语模型:

./models/download-ggml-model.sh base.en

然后用仓库自带的示例音频跑一条最小命令:

./build/bin/whisper-cli -m models/ggml-base.en.bin -f samples/jfk.wav

几秒后终端会输出"Ask not what your country can do for you..."这段转录结果。想确认 GPU 真的参与了计算,最简单的办法是换一段长一点的音频,跑起来的同时另开一个终端看nvidia-smi:你能看到 whisper-cli 进程挂在进程列表里,显存占用和 GPU 利用率都会动。如果跑完了显存纹丝不动,别急着怀疑显卡,先往下翻到排查那节,九成是编译时 CUDA 没开。

模型按显存档位选

whisper.cpp 的模型从 tiny 到 large 一共五档,精度和速度大致正相关,选哪个基本由你的显存决定。下表是实践中的粗档位,供你直接对号入座:

模型显存档位适合的卡一句话点评
tiny / tiny.en约 1 GB2 GB 以上随便跑通流程、快速验证首选
base / base.en约 2 GB4 GB 卡速度和精度的平衡点
small / small.en约 4 GB6 GB 以上日常转录够用,推荐起步
medium / medium.en约 6 GB8 GB 卡专业级精度
large-v38 GB 以上12 GB 以上精度最高,速度最慢

两点小提醒:一是带.en后缀的模型只支持英语,如果你的音频是中文或混合语言,选不带后缀的版本;二是下载脚本的模型列表里本身就有一批量化版,比如base.en-q5_1small.en-q5_1,显存紧张时可以直接下载量化版,省去自己量化的步骤。

显存不够时先翻这三个开关

如果你的卡比表格推荐的档位小一圈,或者报CUDA out of memory,按这个顺序试,每个开关都很便宜:

第一个开关是量化。把 fp16 的原始模型压成 q5_0 或 q8_0,显存占用能明显下降,q8_0 的精度损失几乎无感,q5_0 能省得更多、偶尔会掉一点字:

./build/bin/quantize models/ggml-base.en.bin models/ggml-base.en-q5_0.bin q5_0

第二个开关是 flash attention。命令行加一个-fa参数即可开启,注意力部分的显存开销会降下来,长音频上尤其明显,代价是可以忽略的耗时变化。

第三个开关是把长音频切成小段。whisper-cli 支持偏移和时长两个参数(-ot-od),你可以把两小时的音频按 10 分钟一段循环处理,每段处理完显存就释放掉,代价是需要自己写个循环拼结果,但这是最稳的兜底方案。

跑挂了:两类高频问题按顺序排查

编译了,但 CUDA 其实没生效。先看运行时的nvidia-smi:显存和利用率纹丝不动,就是信号。再往下查两件事,一是有没有装 CUDA 工具链(nvcc --version给不出版本就要先装),二是构建缓存里GGML_CUDA到底是不是 ON——去build/CMakeCache.txt里搜一下这个关键字就知道。确认没开后,用-DGGML_CUDA=1重新 configure 并完整重编一遍,注意别复用旧的 build 目录,删掉重来最省心。

显存爆掉了(CUDA out of memory)。先看nvidia-smi里还剩多少空闲、被谁占着,有时候只是浏览器或别的推理进程把显存吃光了,关掉就好。空间确实不够再改:换小一档或量化后的模型、开-fa、把音频切片分批跑,就是上一节三个开关的顺序,基本都能救回来。

继续深挖的三个方向

跑通之后,想理解 GPU 上到底发生了什么,可以直接读 ggml/src/ggml-cuda/ 里的 CUDA 内核实现,注意力、矩阵乘都有对应的.cu文件,配合编译选项(比如 FP16 计算、cuBLAS 与自研内核的取舍)看很有意思。想要完整应用而不是命令行,examples/ 目录下有流式识别、HTTP 服务端、基准测试等现成示例,每个都带自己的说明。想对照不同硬件的性能预期,scripts/bench-all-gg.txt 里沉淀了历次的基准数据。社区层面,仓库的 Discussions 和 issue 区是 CUDA 相关问题反馈最集中的地方,遇到奇怪的现象先去搜一遍,大概率有人踩过。

【免费下载链接】whisper.cppPort of OpenAI's Whisper model in C/C++项目地址: https://gitcode.com/GitHub_Trending/wh/whisper.cpp

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/1 14:47:59

PowerShell 实战教程:从第一条命令到日常自动化的完整指南

PowerShell 实战教程:从第一条命令到日常自动化的完整指南 【免费下载链接】PowerShell PowerShell for every system! 项目地址: https://gitcode.com/GitHub_Trending/po/PowerShell 如果你想在 Windows、Linux 和 macOS 上用同一套脚本环境搞定日常自动化…

作者头像 李华
网站建设 2026/9/3 0:56:49

Memos 标签管理实战指南:多级标签 5 分钟上手,别再乱建了

Memos 标签管理实战指南:多级标签 5 分钟上手,别再乱建了 【免费下载链接】memos Open-source, self-hosted note-taking tool built for quick capture. Markdown-native, lightweight, and fully yours. 项目地址: https://gitcode.com/GitHub_Trend…

作者头像 李华
网站建设 2026/9/3 17:23:31

水母堵塞核电站取水口引发的系统韧性思考

一条关于核电站的新闻,往往会让读者第一时间联想到复杂的安全系统、严格的操作规程和厚重的混凝土屏障。但如果告诉你,让三台核反应堆同时停下来的,是一群水母,你是不是会产生一种“工业世界的顶级防线,竟然被生物世界…

作者头像 李华