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 4B | 32 层、128 mel、滑动窗口 750 帧 |
| 文本解码器 | Qwen2.5-3B-Instruct | 36 层、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 ms | 4 | 18 | 12.5 次 | 响应最快,交互/字幕首选 |
| 120 ms | 6 | 12 | 8.3 次 | 均衡之选 |
| 160 ms | 8 | 9 | 6.25 次 | 资源最省,批量长音频 |
左上下文 pad(streaming_n_left_pad_tokens,定义于 config.json)表示每一步往回"多看"多少历史音频,它和时钟一起决定了可配置的转写延迟。时钟的合法性校验与换算逻辑见 configuration_audio8_asr_infinite.py。
可配置转写延迟 target_delay_ms:准确率和速度的旋钮
延迟并不是"越低越好"。模型内部用延迟条件化告诉你它"落在实时多少步":
num_delay_tokens = target_delay_ms ÷ 音频时钟(例如 80ms 时钟下 480ms → 6 个延迟 token,映射表见 config.json);- 延迟数转成正弦时间嵌入,再叠加帧长嵌入,得到条件向量
t_cond(实现见 modeling_audio8_asr_infinite.py); 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/test | CER | 1.750 | 16.795 |
| aishell4/test | CER | 2.893 | 16.456 |
| librispeech clean | WER | 3.042 | 2.210 |
| librispeech other | WER | 6.808 | 5.552 |
| 平均 | 3.623 | 10.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.json | 16kHz、128 mel、hop 160 的音频预处理 |
| chat_template.jinja | Qwen 对话模板 |
| Audio8-Asr-Infinite-Demo.mp4 | 24/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),仅供参考