百度发布Unlimited OCR:3B参数MoE模型,KV缓存恒定实现长文档高效解析
阅读原文· marktechpost.comBaidu这个OCR模型用R-SWA把KV缓存压成常量,长文档解析终于不用越跑越慢了。MIT开源,3B总参但推理只消500M,做文档管线的可以直接接。
百度推出Unlimited OCR,一个3B参数的MoE模型,推理时仅激活500M参数。其核心创新Reference Sliding Window Attention(R-SWA)将KV缓存大小固定为Lm + n(n默认128),内存和延迟不随输出长度增长。模型基于DeepSeek OCR继续训练4000步,支持32K最大长度,通过DeepEncoder实现16倍token压缩。在OmniDocBench v1.5上整体得分93.23,超出DeepSeek OCR基线6.22分;v1.6得分93.92为最高。Base模式下吞吐达5580 TPS,比DeepSeek OCR提升12.7%,6000 token输出时延迟低35%。适用于整本书转录等场景,代码与权重已在HuggingFace开源。
大多数端到端 OCR 模型会随着输出增长而变慢。每生成一个 token 都会增加 KV 缓存,内存占用上升,生成速度拖慢。解析几十页文档变得不切实际。百度推出的 Unlimited OCR 直接解决了这个问题——它用固定内存的设计替换了解码器的注意力机制。
摘要
- Unlimited OCR 是一个 3B 参数的混合专家模型,其中仅有 500M 参数处于激活状态。
- 它用参考滑动窗口注意力(R-SWA)替代了解码器注意力,使 KV 缓存保持恒定。
- 该模型在 32K 最大长度限制下,一次前向传播即可解析数十页文档。
- 它在 OmniDocBench v1.5 上取得 93.23 分,比 DeepSeek OCR 基线高出 6.22 分。
- 它基于 DeepSeek OCR 进行持续训练构建,并非从零开始训练。
什么是 Unlimited OCR?
Unlimited OCR 以 DeepSeek OCR 作为基线。它保留了 DeepEncoder 和混合专家解码器。MoE 设计拥有 3B 总参数量,但推理时仅激活 500M 参数。
DeepEncoder 是压缩引擎。它将窗口注意力下的 SAM-ViT 与全局注意力下的 CLIP-ViT 级联起来。在桥接处,它应用了 16 倍 token 压缩。一张 1024×1024 的 PDF 图像仅变成 256 个视觉 token。更少的输入 token 意味着更小的预填充。
DeepEncoder 原生支持五种分辨率模式,Unlimited OCR 保留了其中两种。'Base' 模式以 1024×1024 分辨率运行,适用于多页处理。'Gundam' 模式使用动态分辨率处理单页。

R-SWA 如何保持缓存恒定
核心贡献是参考滑动窗口注意力。标准多头注意力会为每个 token 存储键和值。当输出长度 T 增长时,缓存也随之增长。其大小为 CMHA(T) = Lm + T。内存和延迟会无界上升。
R-SWA 打破了这种关联。每个生成的 token 会关注所有参考 token(即视觉 token 和提示词)。它还会关注前 n 个输出 token(n 默认为 128)。更早的内容被驱逐。缓存变成一个固定大小的队列,大小为 m + n。
其大小为 CR-SWA(T) = Lm + min(n, T) ≤ Lm + n。它受一个常数限制。当 T 远超过 n 时,缓存比例趋近于零。因此内存保持平稳,每步延迟也保持平稳。
研究团队将此比作“软遗忘”。人在抄写书籍时,会瞥一眼原文和最后几个词,而不会重读已转录的所有内容。视觉 token 从不进行状态更新,这就避免了线性注意力机制中出现的渐进式模糊现象。下面的交互式模拟器允许你调节 T 值,并观察两种缓存各自的响应变化。
训练方式
Unlimited OCR 并非从头训练。研究团队基于 DeepSeek OCR 检查点继续训练了 4000 步。他们冻结了 DeepEncoder,仅训练解码器。训练使用约 200 万份文档样本,部署在 8×16 张 A800 GPU 上,采用 9:1 的分割比例,优先使用单页数据,多页样本则通过拼接方式构建。
基准测试
研究团队在 OmniDocBench v1.5 和 v1.6 上进行评估。主要发现/统计数据为:在 v1.5 上总体得分 93.23,比 DeepSeek OCR 基线高出 6.22 分。下表对比了三个相关模型,三者均为 3B‑A0.5B 规模。
| 指标(v1.5) | DeepSeek‑OCR | DeepSeek‑OCR 2 | Unlimited‑OCR |
|---|---|---|---|
| 总体 ↑ | 87.01 | 89.17 | 93.23 |
| 文本编辑距离 ↓ | 0.073 | 0.049 | 0.038 |
| 公式 CDM ↑ | 83.37 | 86.85 | 92.61 |
| 表格 TEDS ↑ | 84.97 | 85.60 | 90.93 |
| 阅读顺序编辑距离 ↓ | 0.086 | 0.060 | 0.045 |
在 OmniDocBench v1.6 上,Unlimited OCR 总体得分达 93.92。这是研究论文在 v1.6 对比中的最高分。在文本、公式和表格识别方面均有所提升。
速度也有提升。在 Base 模式下,Unlimited OCR 在 OmniDocBench 上达到 5,580 TPS,而 DeepSeek OCR 为 4,951 TPS,提升了 12.7%。输出长度越长,差距越大。在 6,000 token 的输出上限下,DeepSeek OCR 落后于 Unlimited OCR 35%。
适用场景
常量缓存非常适合那些按页处理的系统难以胜任的工作负载。
- 整本书转录:一次性输入 40 页以上并连续解析。报告显示,40 页以上时的编辑距离低于 0.11,Distinct‑35 达 96.90%。
- 文档解析流水线:单次前向传播即可提取文本、表格、公式和阅读顺序。
- 高吞吐量批量解析:附带的 infer.py 可启动 SGLang 服务器,并针对文件夹或 PDF 发送并发请求。
- 超越 OCR:研究团队将 R‑SWA 称为通用解析注意力机制,可应用于 ASR 和翻译。
运行方式:最少代码量
Transformers 路径需要设置 trust_remote_code=True 并配备 CUDA GPU。单图像解析使用 Gundam 模式。
import torch
from transformers import AutoModel, AutoTokenizer
name = "baidu/Unlimited-OCR"
tokenizer = AutoTokenizer.from_pretrained(name, trust_remote_code=True)
model = AutoModel.from_pretrained(
name, trust_remote_code=True, use_safetensors=True,
torch_dtype=torch.bfloat16,
).eval().cuda()
model.infer(
tokenizer,
prompt="<image>document parsing.",
image_file="your_image.jpg",
output_path="your/output/dir",
base_size=1024, image_size=640, crop_mode=True, # gundam mode
max_length=32768,
no_repeat_ngram_size=35, ngram_window=128,
save_results=True,
)多页面和 PDF 解析在 Base 模式下调用 model.infer_multi,设置 image_size=1024。面向生产吞吐量时,SGLang 通过 fa3 注意力后端提供兼容 OpenAI 的 API。
优势与不足
优势:
- 恒定 KV 缓存使长输出中的内存和延迟保持平稳。
- 在 OmniDocBench v1.5 和 v1.6 上取得端到端 SOTA 分数。
- 仅 500M 活跃参数,推理成本低廉。
- 采用 MIT 许可证、开放权重,并同时支持 Transformers 和 SGLang。
- R-SWA 的改进在单页上未带来可测量的精度损失。
不足:
- 解析并非真正无限制;32K 上下文仍对预填充阶段形成限制。
- 尽管经过高度压缩,长预填充仍随页数增加而增长。
- 多页面运行仅使用 Base 模式,因此可能遗漏非常小的文本。
- 语音识别和翻译迁移仍属未来工作,尚未交付结果。