Web Analytics

parakeet.cpp

⭐ 298 stars Simplified Chinese by Frikallo

parakeet.cpp

使用NVIDIA的Parakeet模型实现纯C++的快速语音识别。

基于axiom构建 —— 一个轻量级张量库,支持自动Metal GPU加速。无ONNX运行时,无Python运行时,无重量级依赖。仅使用C++和一个比PyTorch MPS更快的张量库。

Apple Silicon GPU上10秒音频的编码器推理约27毫秒(110M模型)——比CPU快96倍。支持FP16,内存减少约2倍。

支持的模型

| 模型 | 类别 | 规模 | 类型 | 说明 | |-------|-------|------|------|-------------| | tdt-ctc-110m | ParakeetTDTCTC | 110M | 离线 | 英语,双CTC/TDT解码头 | | tdt-600m | ParakeetTDT | 600M | 离线 | 多语言,TDT解码器 | | eou-120m | ParakeetEOU | 120M | 流式 | 英语,带结束语检测的RNNT | | nemotron-600m | ParakeetNemotron | 600M | 流式 | 多语言,可配置延迟(80ms–1120ms) | | sortformer | Sortformer | 117M | 流式 | 说话人分离(最多4个说话人) | | diarized | DiarizedTranscriber | 110M+117M | 离线 | 语音识别 + 说话人分离 → 说话人标注词汇 |

所有ASR模型共享相同的音频流水线:16kHz单声道WAV → 80箱Mel频谱图 → FastConformer编码器。

快速开始

#include 

parakeet::Transcriber t("model.safetensors", "vocab.txt"); t.to_gpu(); // optional — Metal acceleration t.to_half(); // optional — FP16 inference (~2x memory reduction)

auto result = t.transcribe("audio.wav"); std::cout << result.text << std::endl;

功能特性

请参见 examples/ 目录获取演示各项功能的代码示例。

安装

预编译二进制文件附带于每个 GitHub 发布,支持 macOS arm64、macOS x86_64 和 Linux x86_64。下载对应平台的压缩包并解压:

tar -xzf parakeet-v0.1.0-macos-arm64.tar.gz
cd parakeet-v0.1.0-macos-arm64

On macOS, clear the Gatekeeper quarantine attribute first:

xattr -dr com.apple.quarantine . ./bin/parakeet --help

该归档包含一个自包含的 bin/parakeet(和 bin/example-server)以及带有设置了 @rpath/$ORIGINlib/libaxiom,使二进制文件能够相对于安装目录解析其依赖关系——可以将目录放置在任何地方。include/parakeet/ 下的 C-API 头文件供嵌入使用。

从源码构建

git clone --recursive https://github.com/frikallo/parakeet.cpp
cd parakeet.cpp
make build
make test

要求:C++20(Clang 14+ 或 GCC 12+),CMake 3.20+,macOS 13+ 以支持 Metal GPU。

macOS: 构建需要 完整的 Xcode 安装(不仅仅是命令行工具),因为 axiom 使用 xcrun metalxcrun metallib 编译其 Metal 着色器 — 这些仅随 Xcode 一起提供。如果您只想运行 parakeet,请使用上面预构建的 tar 包;.metallib 已嵌入到随附的 libaxiom.dylib 中,用户端无需安装任何 Xcode/命令行工具即可运行。

转换权重

# Download from HuggingFace
huggingface-cli download nvidia/parakeet-tdt_ctc-110m --include "*.nemo" --local-dir .

Convert to safetensors

pip install safetensors torch python scripts/convert_nemo.py parakeet-tdt_ctc-110m.nemo -o model.safetensors
转换器支持所有模型类型:110m-tdt-ctc(默认)、600m-tdteou-120mnemotron-600msortformer

python scripts/convert_nemo.py checkpoint.nemo -o model.safetensors --model 600m-tdt
Silero VAD 权重:

python scripts/convert_silero_vad.py -o silero_vad_v5.safetensors

示例

| 示例 | 描述 | |---------|-------------| | basic | 最简单的转录(约20行) | | timestamps | 带置信度的单词/标记时间戳 | | beam-search | 具有可选ARPA语言模型的CTC/TDT束搜索 | | phrase-boost | 针对领域词汇的上下文偏置 | | batch | 多文件批量转录 | | vad | 独立VAD和ASR+VAD预处理 | | gpu | Metal GPU + FP16及时间比较 | | stream | EOU流式转录 | | nemotron | 带有延迟模式的Nemotron流式 | | diarize | Sortformer说话人分离 | | diarized-transcription | ASR + 分离结合 | | c-api | 纯C99 FFI用法 | | cli | 带所有选项的完整CLI |

作为库使用

CMake find_package

安装后(make installcmake --install build):

find_package(Parakeet REQUIRED)
target_link_libraries(myapp PRIVATE Parakeet::parakeet)

CMake add_subdirectory

add_subdirectory(third_party/parakeet.cpp)
target_link_libraries(myapp PRIVATE Parakeet::parakeet)

pkg-config

g++ -std=c++20 myapp.cpp $(pkg-config --cflags --libs parakeet) -o myapp

架构

离线模型

基于共享的 FastConformer 编码器(Conv2d 8倍下采样 → N 个带相对位置注意力的 Conformer 块)构建:

| 模型 | 类别 | 解码器 | 使用场景 | |-------|-------|---------|----------| | CTC | ParakeetCTC | 贪婪最大值或束搜索(+语言模型) | 快速,仅限英语 | | RNNT | ParakeetRNNT | 自回归 LSTM | 支持流式 | | TDT | ParakeetTDT | LSTM + 时长预测,贪婪或束搜索(+语言模型) | 准确率优于 RNNT | | TDT-CTC | ParakeetTDTCTC | 同时具备 TDT 和 CTC 头 | 推理时切换解码器 |

流式模型

基于支持缓存的流式 FastConformer 编码器,带因果卷积和有界上下文注意力:

| 模型 | 类别 | 解码器 | 使用场景 | |-------|-------|---------|----------| | EOU | ParakeetEOU | 流式 RNNT | 语句结束检测 | | Nemotron | ParakeetNemotron | 流式 TDT | 可配置延迟流式 |

说话人分离

| 模型 | 类别 | 架构 | 使用场景 | |-------|-------|-------------|----------| | Sortformer | Sortformer | NEST 编码器 → Transformer → sigmoid | 说话人分离(最多4人) |

基准测试

在 Apple M3 16GB 上使用模拟音频输入(Tensor::randn)测量。时间为每次编码器前向传递(Sortformer:完整前向传递)。

编码器吞吐量 — 10秒音频:

| 模型 | 参数量 | CPU(毫秒) | GPU(毫秒) | GPU 加速比 | |-------|--------|----------|----------|-------------| | 110m (TDT-CTC) | 110M | 2,581 | 27 | 96倍 | | tdt-600m | 600M | 10,779 | 520 | 21倍 | | rnnt-600m | 600M | 10,648 | 1,468 | 7倍 |

| sortformer | 117M | 3,195 | 479 | 7倍 |

110m GPU在不同音频长度下的扩展性能:

| 音频长度 | CPU (毫秒) | GPU (毫秒) | 实时因子 | 吞吐量 | |-------|----------|----------|-----|------------| | 1秒 | 262 | 24 | 0.024 | 41倍 | | 5秒 | 1,222 | 26 | 0.005 | 190倍 | | 10秒 | 2,581 | 27 | 0.003 | 370倍 | | 30秒 | 10,061 | 32 | 0.001 | 935倍 | | 60秒 | 26,559 | 72 | 0.001 | 833倍 |

GPU加速由axiom的Metal图编译器驱动,将完整编码器融合为优化的MPSGraph操作。

make bench ARGS="--110m=models/model.safetensors --tdt-600m=models/tdt.safetensors"

路线图

第一阶段 — 高影响力

音频与输入输出

第二阶段 — 生产准备

第三阶段 — 生态系统

说明

License

MIT

--- Tranlated By Open Ai Tx | Last indexed: 2026-07-20 ---