CoolFace
Modelpublic

Sariel00/cosyvoice2_rknn

sourceHugging Faceapache-2.0updated 1mo agoView on Hugging Face
19likes471downloads
Model Card

CosyVoice2distillrknn RK3588

本项目旨在填补端侧嵌入式设备缺乏高质量现代音色克隆 TTS 方案的空白。

本方案基于 CosyVoice2-0.5B 模型,针对 RK3588 平台进行了“一步 Flow 流式蒸馏”深度优化。项目提供了完整的端到端部署资产,涵盖原始模型、蒸馏模型、ONNX 导出、RKLLM/RKNN 转换脚本、全 C++ 推理引擎及实机测试报告。

经实测,该方案在 RK3588 上已具备流式输出能力,在短、中等长度文本下基本达到或接近实时标准(~~若部署于 QCS6490、AX650N 等更高算力平台,实时表现将更优~~)(AX650N已支持,链接地址

RK3572_rknn3平台已经适配,性能表现比RK3588更好一些。930ms≤TTFT≤1050ms,0.75≤持续RTF≤0.8。rknn3库无法直接开源,如有需要私聊。

受限于一步蒸馏的压缩比,当前方案在超长文本下的持续实时性尚无法绝对保证,且音质存在轻微可听失真,整体听感略低于官方 10 步模型。

客观声学评估表明,该蒸馏模型与官方 Teacher 模型的 Mel L1 相对误差为 0.17048。Mel 余弦相似度高达 0.998754

适配于RK3588的极致优化推理版本正在测试中.在不蒸馏LM模型的情况下(也就是保留最大文本能力情绪音色能力的情况下),手动混合量化int4+int8和手写推理引擎和手动量化会大约50%的提升。

这个方案会在此仓库心心like超过100时开源。(以下是它的性能,实际性能以实际开源为准)

档位文本 token生成 token音频时长一次性初始化TTFT流式 RTF总 RTF
20963.84 s4.440 s1070.217 ms0.5960970.800288
511927.68 s4.602 s1168.456 ms0.6192560.732696
14832012.80 s4.728 s1362.013 ms0.6273360.710218

就算这样也没有把TTFT压进1s。只能说端侧还是任重道远。如果有别的思路确定有一定性能收益可以私聊。

组件配置
LLM24 层 Qwen2,librknnrt / rknn_matmul
LLM 投影74 组 W4A4,22 组 W8A8
Speech headW8A8 RKNN
FlowT16 Encoder + 单步缓存 Estimator,FP16 RKNN
HiFTF0 + Decoder,FP16 RKNN,32/40 帧 bucket
流式调度首段 T16 + 1 lookahead,稳态 T16 + 3 lookahead
KV cache15-token 固定前缀

模型卡

项目内容
基础模型CosyVoice2-0.5B
任务中文零样本音色克隆 TTS
输入已规范化 UTF-8 文本
输出24 kHz、16-bit、单声道 PCM/WAV
默认音色runtime/clone/test.wav
LLM Prompt1 秒
Flow Prompt3 秒
RKLLMQwen2,两核 W8A8,context 2048
RKNNSpeech Head W8A8;Flow、HiFT 和音色注册模型 FP16
运行时RKLLM 1.3.0、RKNN 2.3.2、RKNPU driver 0.9.8
硬件RK3588,4 个大核、3 个 NPU 核

部署结构

text
规范化文本
  -> C++ GPT-2/BPE 文本前端
  -> Qwen2 W8A8 RKLLM,NPU0+1
  -> Speech Head W8A8 RKNN,NPU0
  -> 一步缓存 Flow FP16 RKNN,NPU2
  -> HiFT FP16 RKNN,NPU2
  -> 24 kHz PCM 流

默认使用 CPU5 至 CPU7(mask 0xE0)。RKNN 缓存使用 native I/O memory,文本和语音 embedding 使用 mmap 查表。

音色由 LLM Prompt、Flow Prompt、说话人 embedding 和 HiFT 共同控制。本项目只蒸馏 Flow,没有修改 LLM、Speech Head、CampPlus 和 HiFT 权重。

默认音色档案位于:

text
rknn/models/cosyvoice2/voices/testwav_llm_prompt1s

RK3588 性能

测试条件:默认音色、两核 W8A8 RKLLM、一步 FP16 Flow、FP16 HiFT,不计模型加载时间。

档位音频时长TTFT持续 RTF总 RTF峰值 RSS
短音频5.92 s2.255 s0.74591.02101523.6 MiB
中等音频9.64 s2.090 s0.84560.98881563.8 MiB
长音频24.28 s2.334 s0.91280.97731604.6 MiB
超长音频,分 3 段75.11 s2.165 s0.91821.01001633.9 MiB
  • 相同主验证文本三轮历史持续 RTF 中位数为 0.7880
  • 建议使用 400 ms 启播缓冲。
  • 约 25 秒以上文本应按完整语义句切分,避免长上下文重复、漏句或乱序。

TTFT 是请求开始到第一块 PCM 就绪的时间;持续 RTF 不含第一块;总 RTF 是完整请求耗时除以音频时长。

Flow 蒸馏与质量

一步学生由官方 10 步 Flow Teacher 蒸馏得到。以下为同一固定测试集上的标准化 Mel 对比:

Flow相对 10 步 Mel L1Mel 余弦
官方 10 步01.000000
5 步0.078100.999500
2 步0.151840.999086
最终 1 步0.170480.998754

一步模型适合验证端侧吞吐上限,但听感仍低于 5 步。Mel 余弦不能替代人工试听,也不能解释为主观音质只损失某个百分比。

RK3588 FP16 相对主机一步结果的 Mel MAE 为 0.016937、余弦为 0.999989,说明主要误差来自蒸馏,不是 ONNX/RKNN 转换。

短、中、长和超长样本均通过内容识别检查;对 test.wav 的 CampPlus 音色余弦为 0.6615450.752080

模型精度

组件精度说明
Qwen2 RKLLMW8A8两核生产版本
Speech HeadW8A8logits 余弦 0.999950
Flow Encoder/EstimatorFP16W8A8 音质损失不可接受
HiFT F0/DecoderFP16W8A8 波形和 F0 偏差较大

生产模型位于 rknn/models/,ONNX 位于 onnx/models/,转换清单位于各自的 conversion/manifests/

快速使用

RK3588 短音频:

bash
cd /home/cat/nextTTS/cosyvoice2_rknn
./rknn/examples/infer_short.sh

指定文本和输出目录:

bash
./rknn/examples/infer_short.sh \
  '今天的天气很好,我们一起去公园散步吧。' \
  /home/cat/nextTTS/cosyvoice2_rknn/tests/results/rknn/my_short

长度基准:

bash
./rknn/examples/benchmark_lengths.py

WSL 原始模型与 ONNX 回归:

bash
cd /home/serial/project/nextTTS/cosyvoice2_rknn
./tests/run_wsl_tests.sh

板端组件回归:

bash
cd /home/cat/nextTTS/cosyvoice2_rknn
./rknn/scripts/run_board_tests.sh

试听结果

  • 短音频
  • 中等音频
  • 长音频
  • 75 秒分句音频
  • 性能汇总:tests/results/rknn/length_demo/benchmark_summary.json
  • 质量汇总:tests/results/rknn/length_demo/quality_summary.json

目录

text
original/   原始模型、一步学生和官方推理源码
onnx/       ONNX 模型、导出代码和数值回归
rknn/       RKLLM/RKNN、C++ 推理和板端测试
tests/      测试入口、指标和试听音频
runtime/    默认音色、文本规范化资源和运行目录

已知限制

  1. 1.一步 Flow 仍有可听失真,不能视为官方 10 步模型的无损替代。
  2. 2.超长文本需要语义切分,75.11 秒分句结果的总 RTF 为 1.0100
  3. 3.HiFT Decoder 存在 CPU fallback,不同文本可能出现 NPU/CPU 调度波动。
  4. 4.C++ 入口要求文本已经规范化,日期、货币等需由应用层处理。
  5. 5.固定音色已验证,任意新参考 WAV 的纯板端注册尚未完成严格验收。
  6. 6.W8A8 Speech Head 会轻微改变采样概率,相同 seed 不保证生成相同 token。

完整性与许可

归档约 12 GB,文件清单见 manifest.jsonMANIFEST.sha256。校验命令:

bash
sha256sum -c MANIFEST.sha256

本归档新增的源码、脚本、配置和文档使用顶层 LICENSE(Apache-2.0)。再分发时保留版权和许可证声明,并标注修改内容即可;上游 CosyVoice 源码、模型权重和第三方资产仍遵循各自的授权条款。