whisper.cpp 评测:把 Whisper 塞进 iPhone,靠的是 C++ 和 ggml
whisper.cpp 是 OpenAI Whisper 语音识别模型的零依赖 C/C++ 移植版,针对 Apple Silicon 优化,可在众多平台上仅使用 CPU 推理。
秒懂
- 它是什么?
- whisper.cpp 是 OpenAI Whisper 的 C/C++ 移植版,主打无依赖、跨平台、可在端侧离线运行。本文拆解它的实现机制、部署方式、量化与 Core ML 加速,并指出它在格式支持、内存占用和模型生态上的边界。
- 适合谁用?
- whisper.cpp 适合需要在资源受限设备上离线运行 Whisper 的开发者,尤其是 iOS、Android、树莓派或 WebAssembly 场景。它不适合追求最新模型特性或需要直接处理非 WAV 格式的团队,因为官方示例仅支持 16-bit WAV,且模型转换依赖 Python 工具链。
- 能商用吗?
- 可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
- 还在维护吗?
- 在维护。仓库最近一次提交在 1 天前。
- 用什么语言写的?
- 主要是 C++(依据 GitHub 的语言统计)。
以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。
开源项目深度解析
它解决的是依赖和平台问题
OpenAI 官方 Whisper 是 Python 实现,依赖 PyTorch 和一堆库,部署到手机或嵌入式设备很吃力。whisper.cpp 把整个模型推理逻辑用 C/C++ 重写,只依赖底层的 ggml 机器学习库。这意味着你可以在没有 Python 运行时、没有 GPU 的环境里跑语音识别。它面向的是需要离线、低延迟、跨平台集成的工程师,比如做语音助手、会议记录工具或无障碍应用的开发者。README 里提到在 iPhone 13 上完全离线运行,这正是它的核心场景。
从音频到文本:一条清晰的流水线
whisper.cpp 的推理流程和原版 Whisper 一致:先对 16-bit WAV 音频做特征提取,然后通过编码器(Encoder)处理,再用解码器(Decoder)逐步生成文本。整个高层实现集中在 whisper.h 和 whisper.cpp 两个文件里,其余代码属于 ggml。ggml 负责张量运算和硬件加速调度。在 Apple Silicon 上,推理完全跑在 GPU 上,通过 Metal 实现。如果你配置了 Core ML,编码器部分可以交给 Apple Neural Engine,速度比纯 CPU 快三倍以上。这个架构让模型可以嵌入到任何 C/C++ 项目中,不需要额外服务。
部署:三条命令跑通,但格式有坑
快速上手很简单:克隆仓库,下载模型,用 cmake 构建。具体命令是:git clone https://github.com/ggml-org/whisper.cpp.git,然后 sh ./models/download-ggml-model.sh base.en 下载 base.en 模型,接着 cmake -B build && cmake --build build -j --config Release,最后 ./build/bin/whisper-cli -f samples/jfk.wav 就能转写示例音频。注意 whisper-cli 只接受 16-bit WAV 文件,其他格式得先用 ffmpeg 转换,例如 ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le output.wav。这个限制对自动化处理流程是个额外步骤,但不算致命。
量化与内存:小模型也能跑,但精度要自己权衡
whisper.cpp 支持整数量化,可以把模型压缩到更小。README 给出的步骤是先用 ./build/bin/quantize models/ggml-base.en.bin models/ggml-base.en-q5_0.bin q5_0 生成 Q5_0 量化模型,然后用 -m 参数指定它运行。量化能减少磁盘和内存占用,但会牺牲一定精度。内存占用表显示,tiny 模型需要约 273 MB 内存,base 约 388 MB,small 约 852 MB,medium 约 2.1 GB,large 约 3.9 GB。如果你只有 1 GB 内存的设备,只能选 tiny 或 base。这个表是官方给的,实际使用中还得考虑操作系统和其他进程的开销。
硬件加速:不止 Apple,还有 Vulkan 和 ROCm
除了 Apple Silicon 的 Metal 和 Core ML,whisper.cpp 还支持 NVIDIA GPU(通过 CUDA)、AMD ROCm、Vulkan、OpenVINO,甚至 AMD Ryzen AI NPU 和 Ascend NPU。这意味着它在桌面和服务器上也能利用 GPU。但要注意,这些加速路径的配置复杂度不同。比如 POWER 架构需要额外安装 BLAS 包,并用 cmake -B build -DGGML_BLAS=1 构建。如果你只是想在 x86 上跑 CPU 推理,AVX 指令集也能提供基础加速。不过 README 没有给出各后端的性能对比数据,所以实际选型时最好自己跑一遍基准测试。
限制:不是所有场景都合适
最明显的限制是输入格式。官方示例只支持 16-bit WAV,这意味着流式音频或压缩格式得先转码,增加延迟和复杂度。其次,模型转换依赖 Python 工具链,比如 Core ML 支持需要安装 ane_transformers、openai-whisper 和 coremltools,还得有 Xcode。如果你完全不想碰 Python,这一步会卡住。另外,量化虽然省资源,但可能引入转录错误,尤其在噪声环境下。对于需要高精度的场景,比如医疗记录,量化模型可能不够可靠。最后,whisper.cpp 是 Whisper 的移植,不包含 OpenAI 未来可能发布的新模型架构,除非社区跟进。
对比原版 Whisper:语言和生态的取舍
原版 OpenAI Whisper 是 Python 包,安装简单,支持直接处理多种音频格式,模型更新也及时。它的缺点是依赖 PyTorch,启动慢,内存占用高,不适合端侧部署。whisper.cpp 用 C++ 重写了推理,去掉了 Python 依赖,但换来的是你需要自己处理格式转换和模型转换。另一个区别是性能:whisper.cpp 在 Apple Silicon 上通过 Metal 和 Core ML 能获得接近实时的速度,而原版在 Mac 上主要靠 CPU 或 MPS,效率可能低一些。如果你做服务器端批量处理,原版更省事;如果你做移动端或嵌入式,whisper.cpp 是更合理的选择。
维护与许可证:MIT 是优点,但升级要跟上
项目使用 MIT 许可证,可以自由商用和修改,这是采用它的一个加分项。仓库最近一次推送是 2026 年 8 月,发布了 v1.9.3,说明维护活跃。但活跃也意味着 API 可能变化,比如 whisper-cli 的参数或构建选项在新版本中可能调整。升级时你需要重新构建,并检查模型格式是否兼容。ggml 库也在独立更新,如果 whisper.cpp 依赖的 ggml 版本有破坏性变更,可能需要同步升级。整体来看,维护成本中等,但如果你长期使用,建议锁定版本并跟踪 release notes。
编辑结论
whisper.cpp 适合需要在资源受限设备上离线运行 Whisper 的开发者,尤其是 iOS、Android、树莓派或 WebAssembly 场景。它不适合追求最新模型特性或需要直接处理非 WAV 格式的团队,因为官方示例仅支持 16-bit WAV,且模型转换依赖 Python 工具链。采用前应先验证目标硬件的推理速度与内存占用,特别是量化后的精度损失是否可接受。若你只做服务器端批量转写,原版 OpenAI Whisper 的 Python 生态更省事;若必须端侧运行,whisper.cpp 是当前最扎实的选项之一,但请先跑通 Core ML 或 Metal 路径,再决定是否投入生产。
社区笔记