Releases: RapidAI/RapidSpeech.cpp
Releases · RapidAI/RapidSpeech.cpp
新增ASR 模型 FunASR-nano
📦 模型支持
新增 FunASR-nano(ASR), 支持q3、q4、 q5、 q6、 q8
🚀 新特性
- Flash Attention 支持:Qwen3 注意力层新增
ggml_flash_attn_ext路径,通过llm_cparams::flash_attn参数控制开关(默认开启)。相比标准多头注意力实现,Flash Attention 在长序列上具有更好的内存局部性和计算效率。 - 量化工具
rs-quantize:新增模型量化命令行工具,支持 Q4_0、Q4_K、Q5_0、Q5_K、Q8_0 等多种量化格式。funasr-nano-fp16 (1955 MB) → Q4_K (596 MB),压缩 3.3x。
⚡ 性能优化
- Decode KV 只追加新列:每步仅回读最后 1 列 KV(~0.1MB),替代全量回读(~50MB/步)
- Prefill 仅输出最后位置 logits:logits 传输从 242MB 降到 0.6MB
- Embedding lookup 内联到 decode 图:去掉每步独立 mini embed 图,省去 36 次 alloc/sched_reset 开销
- KV 持久化驻留 GPU:用
ggml_backend_alloc_ctx_tensors在 GPU 端独立分配 KV buffer,省去每步 ~100MB CPU→GPU 全量上传
GPU 性能基准 (Apple M1 Pro, funasr-nano-fp16, 15s 音频):
| 阶段 | 优化前 | 优化后 | 提升 |
|---|---|---|---|
| Decoder | 4.36s | 3.45s | 21% |
| RTF | 0.205 | 0.170 | 17% |
🐛 Bug 修复
- Metal 后端
memcpy静默失败:set_position_ids/set_input_data改用ggml_backend_tensor_set,修复 GPU tensordata为 null 时的写入问题 - KV output tensor buffer 未分配:Prefill 分支直接将 3D
ggml_conttensor 标记为 output,避免 scheduler 不分配独立 buffer 导致 abort - Causal mask shape:从
[n_tokens, n_kv]改为[n_kv, n_tokens],修复 decode 阶段 n_tokens=1 时 broadcast 失败 - Flash Attention mask 类型:
ggml_flash_attn_ext要求 F16 mask,自动将 F32 mask 转换为 F16 - Flash Attention tensor 布局:permute q/k/v 从
[d_k, n_head, n_seq]到[d_k, n_seq, n_head],匹配ggml_flash_attn_ext接口要求 - CI 构建修复:Windows DLL 搜索路径、
rs_log/load_wav_filehidden visibility 链接错误、PowerShell2>/dev/null兼容性