CUDA、Metal、Vulkan 三后端构建:parakeet.cpp GPU 加速编译指南
【免费下载链接】parakeet.cpp
Fast and portable Parakeet implementation in C++ with ggml
parakeet.cpp 是一个用 C++17 和 ggml 编写的 NVIDIA Parakeet 语音识别(ASR)推理引擎:纯 C++ 实现、读取自包含的 GGUF 模型文件、推理时完全不需要 Python。这篇文章是它三大 GPU 后端——CUDA、Metal、Vulkan——的完整编译指南:从环境准备、一键构建命令到验证 GPU 生效与实测加速效果,新手照着做就能拿到 GPU 加速的语音识别工具 🚀
先搞懂:parakeet.cpp 的 GPU 后端怎么选
parakeet.cpp 的 GPU 加速全部由底层 ggml 计算库的后端提供,顶层 CMake 只负责把开关"转发"过去。四个可选后端一览:
| GPU 后端 | CMake 开关 | 适用平台 | 说明 |
|---|---|---|---|
| CUDA | -DPARAKEET_GGML_CUDA=ON | NVIDIA GPU(Turing sm_75 及更新架构) | 官方发布预编译二进制,GB10 上实测加速 |
| Metal | -DPARAKEET_GGML_METAL=ON | Apple GPU(macOS arm64) | M4 上实测比 CPU 快 1.3x~5.6x |
| Vulkan | -DPARAKEET_GGML_VULKAN=ON | Linux / Windows 跨平台 | 需要系统装有 Vulkan loader |
| ROCm (HIP) | -DPARAKEET_GGML_HIP=ON | AMD GPU | 仅转发给 ggml,官方未做测试 |
几个对新手重要的默认行为:
- 所有 GPU 开关默认 OFF,不加任何参数构建出来的是纯 CPU 版本;
- 开启 CUDA 后会自动同时打开
GGML_CUDA_GRAPHS(CUDA Graphs 计算图捕获/重放,官方实测有约 1% 的免费加速,不会变慢)。不想用时可在运行期设置GGML_CUDA_DISABLE_GRAPHS=1; - 构建时会自动打一份内置的 ggml 补丁(卷积、pad、CUDA/Metal 小 kernel 优化),无需手动操作;
- 默认开启
GGML_NATIVE(针对当前 CPU 做指令集优化)和GGML_LLAMAFILE(tinyBLAS SGEMM 加速)。想要能带到别的机器上跑的"通用二进制",加-DGGML_NATIVE=OFF即可。
所有开关都在顶层 CMakeLists.txt 中定义,后端实现在 third_party/ggml/ 子模块里。
准备工作:环境要求与获取源码
通用要求
| 依赖 | 要求 |
|---|---|
| CMake | ≥ 3.18 |
| 编译器 | 支持 C++17(GCC / Clang / MSVC / AppleClang 均可) |
| 子模块 | third_party/ggml、ced.cpp、voice-detect.cpp(用--recursive自动拉取) |
按后端补充
- CUDA:NVIDIA 驱动 + CUDA Toolkit(官方预编译镜像基于 CUDA 13 构建,覆盖 Turing 到 Blackwell);
- Vulkan:Vulkan loader,通常随显卡驱动自带(Linux 可能需要装
vulkan-tools/ 驱动包); - Metal:macOS 自带,需安装 Xcode Command Line Tools,且为 Apple Silicon(arm64)机器。
获取源码(含子模块):
git clone --recursive https://gitcode.com/gh_mirrors/pa/parakeet.cpp cd parakeet.cpp⚠️ 一定要带
--recursive:ggml 子模块缺失会导致构建直接报third_party/ggml is missing错误。
分后端构建:三条命令的完整写法
NVIDIA CUDA(Windows / Linux)
cmake -B build -DPARAKEET_GGML_CUDA=ON cmake --build build -j构建完成后 CLI 位于build/examples/cli/parakeet-cli。
Windows 用户注意:如果机器上没有安装 CUDA Toolkit,还需要从 release 包中下载并放入cudart-parakeet-bin-win-cuda-x64.zip里的运行时 DLL。
Apple Metal(macOS,推荐 M 系列芯片)
cmake -B build -DPARAKEET_GGML_METAL=ON cmake --build build -jMetal 路径下整个编码器(Conformer encoder)都会跑在 Apple GPU 上;个别没有 Metal kernel 的操作会自动回退 CPU,所以任何模型都能跑。
Vulkan(Linux / Windows)
cmake -B build -DPARAKEET_GGML_VULKAN=ON cmake --build build -j三个后端互斥使用(一次只开一个 GPU 开关),命令结构完全相同,只是开关不同,记一条就会全部。
验证 GPU 是否真的生效
构建成功不等于 GPU 在用,建议按下面两步确认:
- 查看设备选择逻辑:
parakeet-cli会自动使用 ggml 设备注册表报告的第一块 GPU。想用 CPU 就设PARAKEET_DEVICE=cpu,想指定设备就设成具体设备名,例如PARAKEET_DEVICE=CUDA0或PARAKEET_DEVICE=Vulkan1; - 跑一条最短转写:仓库里自带测试音频,直接验证:
build/examples/cli/parakeet-cli transcribe \ --model <你的模型>.gguf \ --input tests/fixtures/speech.wav能正常输出文本,说明所选后端工作正常;某个后端缺少对应算子时,该算子会自动落到 CPU 执行,不会直接报错。
更严格的做法是跑后端正确性测试(同一套测试在 CPU、Metal、CUDA 上验证构建正确性,见 AGENTS.md):
cmake -B build -DPARAKEET_BUILD_TESTS=ON cmake --build build -j ctest --test-dir build --output-on-failure -LE model实测加速效果:GPU 版比 NeMo 快多少
官方基准(NVIDIA GB10,对比同机 NeMo PyTorch 运行时,完整数据见 benchmarks/BENCHMARK.md):
| 平台 | 结果 |
|---|---|
| GB10 + CUDA(f32) | 中位数1.25x快于 NeMo,最高4.3x(tdt_ctc-110m) |
| Apple M4 + Metal | 比 CPU 快1.3x~5.6x,大模型收益最大(如ctc-1.1b达 5.6x) |
| GB10 批量解码(batch 16) | 最高约10x~12x |
两个值得知道的细节:
- 纯 CTC 编码器模型的 GPU 收益最小(约 1.2x),因为 ggml 的通用 CUDA 卷积/注意力内核还略逊于 NeMo 精调的 cuDNN,官方已将其列为"进行中的工作";
- 转写结果在 GPU 上与 NeMo 逐字节一致(WER 0),加速不牺牲准确性 ✅
不想自己编译?预编译包与 Docker 两条捷径
预编译二进制:每个 release 都提供打包好的parakeet-cli,覆盖 Linux x64(cpu / vulkan / cuda)、Linux arm64(cpu / vulkan)、macOS arm64(metal)、macOS x64(cpu)、Windows x64(cpu / vulkan / cuda),下载即用,零编译。
Docker:官方发布 CLI 与 Server 两套镜像,各有 CPU 和 CUDA 两个变体(CUDA 标签带-cuda后缀),多架构自动匹配:
# CLI,CUDA 变体(宿主机需装 nvidia container toolkit) docker run --rm --gpus all \ -v "$PWD/models:/models:ro" -v "$PWD/audio:/audio:ro" \ ghcr.io/mudler/parakeet.cpp-cli:latest-cuda \ transcribe --model /models/parakeet-tdt_ctc-110m-q5_k.gguf --input /audio/speech.wav镜像基于 CUDA 13 构建,从 Turing 到 Blackwell(含 arm64 的 GB10 / DGX Spark)都能覆盖。自行构建镜像的参数写在 Dockerfile 顶部注释里,详细说明见 docs/docker.md。
构建选项速查表
| 选项 | 默认 | 作用 |
|---|---|---|
PARAKEET_BUILD_TESTS | OFF | 生成 ctest 测试目标 |
PARAKEET_BUILD_CLI | ON | 构建parakeet-cli |
PARAKEET_BUILD_SERVER | ON | 构建 OpenAI 兼容示例服务parakeet-server |
PARAKEET_SHARED | OFF | 输出共享库libparakeet.so(C API 场景需要) |
PARAKEET_WITH_CED | ON | 声音事件检测(依赖 ced.cpp) |
PARAKEET_WITH_VOICEDETECT | ON | 说话人识别(依赖 voice-detect.cpp) |
GGML_NATIVE | ON | 针对当前 CPU 优化;OFF 得到可移植二进制 |
常见问题速查
Q:构建时报third_party/ggml is missing?A:clone 时漏了--recursive,补一句git submodule update --init --recursive后重新 cmake 即可。
Q:Vulkan 构建成功但运行时找不到设备?A:确认系统装了 Vulkan loader 和驱动(vulkaninfo可查看设备列表);Vulkan 变体的 Windows/Linux 预编译包可以直接用来交叉验证。
Q:想把一个二进制发到别的机器上跑?A:加-DGGML_NATIVE=OFF重新构建,避免把本机 CPU 指令集"烤进"二进制。
Q:GPU 后端有问题去哪看?A:GPU 后端不在 CI 中跑(官方原话),出问题先跑一遍上文的后端正确性测试;数值和性能依据见 docs/performance.md。
参考资料
- 构建开关与默认优化:CMakeLists.txt
- ggml 补丁脚本与补丁目录:scripts/apply_ggml_patches.sh、third_party/ggml-patches/
- 后端与设备选择实现:src/backend.hpp
- 完整基准与方法论:benchmarks/BENCHMARK.md
- 性能速览:docs/performance.md
- Docker 镜像说明:docs/docker.md
- 仓库结构与测试清单:AGENTS.md
🎯小结:记住一条公式就够——cmake -B build -DPARAKEET_GGML_<CUDA|METAL|VULKAN>=ON && cmake --build build -j,然后PARAKEET_DEVICE指定设备,即可在 NVIDIA、Apple、或任意 Vulkan 显卡上获得 1.3x~5.6x 的 GPU 语音识别加速。
【免费下载链接】parakeet.cpp
Fast and portable Parakeet implementation in C++ with ggml
相关推荐
depth-anything.cpp GPU 加速全解析:CUDA、Metal、Vulkan 三后端编译与设备调度
depth anything.cpp GPU 加速全解析:CUDA、Metal、Vulkan 三后端编译与设备调度 depth anything.cpp 是 L
从零构建 stable-diffusion.cpp:CPU 与多 GPU 后端(CUDA/HipBLAS/Metal/Vulkan/SYCL/MUSA/OpenCL)完整编译指南
从零构建 stable diffusion.cpp:CPU 与多 GPU 后端(CUDA/HipBLAS/Metal/Vulkan/SYCL/MUSA/Open
人工智能推理引擎本地部署媒体生成gpt4all GPU加速指南:Vulkan、CUDA、Metal全面支持
gpt4all GPU加速指南:Vulkan、CUDA、Metal全面支持 引言:告别CPU瓶颈,释放本地LLM算力 你是否还在忍受本地大语言模型(Large
人工智能大模型本地部署AI 应用交互助手RAG
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考