1. 7.5 Hz 双 tokenizer:把 90 分钟语音压成 6.4 万 token
传统 TTS pipeline 以 50–100 fps 的梅尔帧或离散 codec 表征语音,生成长度超过 10 分钟时,token 数轻松突破 30 万,Transformer 的 O (n²) 注意力成为显存墙。VibeVoice 用「声学 + 语义」双路连续 tokenizer,统一把 24 kHz 波形压到 7.5 Hz 潜在序列,压缩率 3200×,等效 1 秒音频仅 7.5 个向量,90 分钟全长只需 ≈ 6.4 万 token,显存占用从百 GB 级降到 36 GB(FP16)。
- 声学 tokenizer:VAE-style,编码器输出 512 维连续潜码,负责音色、韵律、情绪。
- 语义 tokenizer:用 ASR 代理任务预训练,输出 256 维潜码,保留文本内容、角色标签与上下文逻辑。
- 双潜码拼接后维度 768,以 32 ms 滑窗、4 倍下采样得到 7.5 Hz 序列,既保留 24 kHz 保真度,又让长序列注意力计算量下降 80×。
2. Next-token diffusion 串行推理:LLM 条件 → 扩散头 → 潜码解码
VibeVoice 把「语音生成」转成「一句接一句的潜码自回归」:
- LLM(Qwen2.5-1.5B)以「角色标签 + 文本脚本 + 已生成潜码」为输入,预测下一帧 768 维潜码的高斯均值;
- 轻量级扩散头(4 层 U-Net,参数量 120 M)以该均值作为初始噪声,迭代 8 步去噪,输出精细潜码;
- 双 tokenizer 解码器同步工作,把潜码还原为 24 kHz 波形片段(单段 4800 样本,0.2 s)。
显存占用拆解(FP16,batch=1):
- LLM 推理:3.1 GB(KV-cache 未滚窗)
- 扩散头:1.4 GB(特征图 512×128)
- 双 tokenizer 解码:0.9 GB
- 合计单帧 ≈ 5.4 GB,90 分钟全长峰值 36 GB(KV-cache 滚窗前)。
3. 流式管线:块级自回归 + 滑窗 KV-cache + 异步音频解码
Realtime-0.5B 在 GitHub 首页给出「首包 300 ms」指标,实现要点如下:
- 块级自回归:每 4 帧(≈ 0.53 s)为一块,LLM 一次生成 4 个潜码,扩散头并行去噪,降低调度开销。
- 滑窗 KV-cache:窗口长度 2048 token(≈ 4.5 min 语音),超窗后丢弃最旧 512 token,显存稳定在 11 GB 以内。
- 异步解码:CPU 端后台线程把已生成的潜码流式送入 tokenizer 解码,GPU 端继续计算下一块,隐藏解码延迟。
- 音频输出缓冲:维护 240 ms 环形缓冲,确保网络抖动下仍可持续播放。
落地参数(RTX 3060 12 GB):
| 参数 | 值 | 说明 |
|---|---|---|
| block_size | 4 | 每块 0.53 s,平衡延迟与吞吐 |
| kv_window | 2048 | 显存 11 GB,音色漂移 < 1% |
| diffusion_steps | 8 | 8 步去噪,UTMOS 4.18→4.15 可接受 |
| cpu_threads | 4 | 异步解码占用 25% CPU,不阻塞 GPU |
| output_buffer | 240 ms | 网络抖动容限 120 ms |
4. 生产踩坑与对策
- 中文标点导致异常停顿:模型训练语料以英文标点为主,中文全角符号会触发 LLM 预测空潜码。前置脚本把「,」「。」统一转成「,」「.」,停顿自然度提升 12%。
- 语速过快可懂度下降:长句未切分时,LLM 倾向一次性生成高速潜码。按「角色 + 意群」手动插入换行,把每段控制在 30 字以内,WER 从 3.8% 降到 1.1%。
- KV-cache 线性增长:90 分钟全长峰值 36 GB,超过单卡 24 GB 上限。开启滑窗后显存封顶 11 GB,但窗口外音色一致性下降;建议业务层按 10 min 分段调用,段间复用语音提示向量,MOS 掉分 < 0.15。
- 幻觉 BGM:训练数据未刻意去噪,模型在静音处可能生成轻微伴奏。推理时把「空白文本」替换成「」占位,并降低扩散头 temperature 0.2,背景噪声能量下降 8 dB。
- 重叠语音未建模:多人同时说话会串线。脚本层强制「一人一话」轮次,并用 0.3–0.8 s 呼吸停顿标签 ,听感自然度接近真人录制。
5. 小结
VibeVoice 用 7.5 Hz 双 tokenizer 把长序列压到可承受量级,再以 next-token diffusion 做自回归细化和 LLM 语义控制,配合滑窗 KV-cache 与异步解码,把 90 分钟多角色语音生成的首包延迟压到 300 ms 级别。只要按表调整滑窗长度、批大小与文本预处理脚本,即可在 RTX 3060 级显卡上跑出播客级实时对话,无需百 GB 显存。下一步可尝试把扩散头改成 4 步 DPM-Solver,并引入重叠语音建模,让「多人同时开口」也不再是天花板。
参考资料
[1] Microsoft VibeVoice GitHub 项目页(2025-12-03 快照)
[2] CSDN 实测:42 分钟四人对话无音色漂移(2025-12-05)