☰
Audio8 ASR Infinite 无限长转写原理:Rolling KV Cache 如何让内存与延迟保持恒定
2026/9/27 3:31:01 网站建设 项目流程

Audio8 ASR Infinite 无限长转写原理:Rolling KV Cache 如何让内存与延迟保持恒定

【免费下载链接】Audio8-ASR-Infinite项目地址: https://ai.gitcode.com/hf_mirrors/Edge0/Audio8-ASR-Infinite

Audio8 ASR Infinite 是一个原生流式语音转写模型(streaming speech recognition),能 24 小时不间断转写任意长度音频。它的核心是 Rolling KV Cache(滚动 KV 缓存):无论音频播了多久,显存占用与转写延迟都保持恒定,真正做到无限长转写。下面用尽量少的术语,带你搞懂"无限长"背后的原理。

痛点:为什么普通语音转写做不到"无限长"

大多数流式语音识别模型都有一个隐藏的地雷:KV 缓存会随音频时长一直增长。

问题后果
KV 缓存越积越长内存线性增长,播到几小时就可能爆显存
注意力要扫全量历史延迟越来越高,"越播越卡"
常见妥协:定期截断/重置上下文丢失,转写开始"漂移"、出错率上升

想要 7×24 小时运行,就必须让缓存不增长,同时还不能丢上下文语义。Audio8 ASR Infinite 的答案就是 Rolling KV Cache。

模型一览:30 秒原生上下文 + 无限滚动

先看几个关键参数(来自 config.json):

项目数值说明
原生上下文30 秒模型单次"原生"能看到的窗口
音频时钟80 / 120 / 160 ms三档可选手表,见下文
转写延迟240–560 ms可配置的"用延迟换准确率"旋钮
音频塔Voxtral Realtime 4B32 层、128 mel、滑动窗口 750 帧
文本解码器Qwen2.5-3B-Instruct36 层、GQA(16 查询头 / 2 KV 头)
权重体积8.17 GB(bfloat16)model.safetensors
语言中 / 英双语通过语言特殊 token 切换

架构上,音频先经因果音频塔按 20ms 帧率编码,再由投影器 + 帧长嵌入送入解码器;另外还附带一个语义 VAD 头(semantic_vad_heads.safetensors,8 类 × 4 个预测时距 0.5/1.0/2.0/3.0s),能区分"思考停顿、口吃"和"真的说完了"——这正是传统声学 VAD 做不到的。

Rolling KV Cache 三步拆解:窗口、重定基、恒定

第 1 步:固定 30 秒滚动窗口。解码器只保留最近约 30 秒的 K/V 键值对;窗口写满后,最老的一批直接"挤出",新的顶上来。缓存大小从此是常数——内存恒定。

第 2 步:精确 RoPE 重定基(re-basing)。这是最容易被忽略的一步。注意力机制里的 RoPE 位置编码记录了每个 K 的绝对位置;如果最老的 K 被挤掉后不做任何处理,剩余 K 的"位置刻度"就和当前时间对不上了,长时运行会逐渐漂移。Rolling KV Cache 在每次滚动时,对保留下来的所有 K 统一减去已挤出的位置偏移,把刻度重新"归零"回窗口内。所谓"精确",指用严格的旋转矩阵换算,而不是近似补偿——这正是 24/7 运行下无漂移的来源(见 README.md 中 "exact RoPE re-basing" 的说明)。

第 3 步:延迟恒定。因为注意力只扫固定窗口,每个时钟步解码 1 个 token 的开销完全固定,端到端延迟就锁死在你设定的target_delay_ms上——播 1 分钟和播 10 小时,延迟一模一样。

一句话总结:窗口负责"省内存",重定基负责"不失忆",两者合起来就是"内存与延迟恒定"。

三档音频时钟:80 / 120 / 160 ms 怎么选

音频塔以 20ms 为基本帧,frame_len就是每步"打包"几帧,决定了模型的"心跳"频率:

音频时钟frame_len左上下文 pad每秒决策次数适合场景
80 ms41812.5 次响应最快,交互/字幕首选
120 ms6128.3 次均衡之选
160 ms896.25 次资源最省,批量长音频

左上下文 pad(streaming_n_left_pad_tokens,定义于 config.json)表示每一步往回"多看"多少历史音频,它和时钟一起决定了可配置的转写延迟。时钟的合法性校验与换算逻辑见 configuration_audio8_asr_infinite.py。

可配置转写延迟 target_delay_ms:准确率和速度的旋钮

延迟并不是"越低越好"。模型内部用延迟条件化告诉你它"落在实时多少步":

  1. num_delay_tokens = target_delay_ms ÷ 音频时钟(例如 80ms 时钟下 480ms → 6 个延迟 token,映射表见 config.json);
  2. 延迟数转成正弦时间嵌入,再叠加帧长嵌入,得到条件向量t_cond(实现见 modeling_audio8_asr_infinite.py);
  3. t_cond在解码器每一层注意力之后调制隐状态,让模型"知道"该等多少上下文再开口,从而减少丢词。
frame_len可选target_delay_ms
4(80ms)240 / 320 / 480 / 560
6(120ms)240 / 480
8(160ms)320 / 480

target_delay_ms只需是所选时钟的整数倍,因此每种时钟都能找到合适档位——延迟越高,准确率通常越好,这就是官方给出的"延迟-准确率权衡表"。

24/7 部署实践:vLLM 加速 + 滚动窗口

官方推荐的长跑部署是改造版 vLLM + Docker Compose,滚动 KV 窗口 30 秒,即开即用:

git clone https://gitcode.com/hf_mirrors/Edge0/Audio8-ASR-Infinite cd Audio8-ASR-Infinite/docker AUDIO8_MODEL_DIR=/path/to/checkpoint docker compose up -d

启动后用浏览器打开http://localhost:8080/即可体验网页 demo;终端也能直连 WebSocket 推流(--target-delay-ms 480即上面提到的延迟旋钮,详见 README.md)。

效果验证:平均错误率 3.623%

在 80ms 时钟、480ms 延迟设定下(贪心解码、抑制 EOS),官方评测如下(错误率,%):

测试集指标Audio8 ASR Infinite对比模型
aishell1/testCER1.75016.795
aishell4/testCER2.89316.456
librispeech cleanWER3.0422.210
librispeech otherWER6.8085.552
平均3.62310.253

中文场景优势尤其明显,且官方明确"无重复循环、无丢尾词"——这正是滚动窗口稳定性带来的直接收益(完整评测见 README.md)。

关键文件速查

文件作用
config.json总配置:时钟、延迟映射、VAD 时距
model.safetensors主权重(8.17 GB,bfloat16)
semantic_vad_heads.safetensors语义 VAD 分类头
modeling_audio8_asr_infinite.py前向与延迟条件化实现
configuration_audio8_asr_infinite.py配置类:时钟/延迟合法性校验
preprocessor_config.json16kHz、128 mel、hop 160 的音频预处理
chat_template.jinjaQwen 对话模板
Audio8-Asr-Infinite-Demo.mp424/7 连续转写演示视频

小结

  • Rolling KV Cache:30 秒固定窗口滚动,缓存大小不再随时长增长,内存恒定;
  • 精确 RoPE 重定基:每次滚动后严格重算位置刻度,长时运行无漂移;
  • 恒定延迟:每时钟步 1 个 token + 固定窗口注意力,延迟锁死在target_delay_ms;
  • 三档时钟 + 四档延迟:80/120/160ms 时钟 × 240–560ms 延迟,按场景自由权衡。

这套组合拳让一个"原生只有 30 秒上下文"的模型,具备了 7×24 小时无限长转写的生产能力——这就是 Audio8 ASR Infinite 名字的由来。

【免费下载链接】Audio8-ASR-Infinite项目地址: https://ai.gitcode.com/hf_mirrors/Edge0/Audio8-ASR-Infinite

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询