简介:本文深入解析百度文心Unlimited OCR 2在超长文档解析上的技术突破:面对数千页输入,如何通过稀疏参考滑动窗口注意力将单步解码成本压至近乎恒定,再配合无限解码机制把视觉KV Cache峰值显存从47GB降至1.77GB,吞吐量提升数倍。读者将理解长文档OCR的显存瓶颈成因、页面级注意力裁剪思路与分块流式解码的工程实现要点。
传统文档解析模型大多在单页或数十页量级上设计和评测。一旦输入扩展到数百乃至数千页,两个瓶颈会同时暴露:
百度此次开源的文心Unlimited OCR 2,正是围绕这两个瓶颈展开:一方面让模型“只翻该翻的页”,另一方面让显存“只用该用的部分”。官方测试显示,数千页的系列长篇与千页级全集可在单序列下连续解析,多页文档基准测试取得SOTA表现,同时KV Cache峰值显存从47GB降至1.77GB,16并发端到端吞吐量从360 TPS提升至1315 TPS。
团队的技术灵感来自一个朴素场景:人抄一本厚书时,目光始终落在当前页;遇到跨页关联(如跨页表格、续写的段落),偶尔翻回去参考几页——但绝不会每抄一句就把前面所有页重读一遍。
这一直觉对应两个设计目标:
由此引出两项关键机制:SR-SWA(稀疏参考滑动窗口注意力)与无限解码机制。
SR-SWA采用“先粗后细”的两级筛选结构:
第一级:页面门控(Page Gating)
先缩小需要参考的页面范围。模型根据当前解码状态判断哪些历史页面可能与当前内容相关,将候选集从“全部历史页”压缩到“少数候选页”。这一步决定了注意力的页面级稀疏性。
第二级:Token筛选器(Token Selector)
在候选页面内部,进一步挑出最相关的视觉Token块。页面内的版面元素(标题、表格、图注、正文)信息密度差异很大,Token级筛选让计算资源集中在真正值得关注的视觉信息上。
两级筛选叠加后,单步解码的注意力计算成本可以保持近乎恒定——不随文档总页数增长而膨胀。这也是“页数极限”得以突破的前提:模型的计算开销与“当前需要参考多少内容”相关,而与“文档一共多长”解耦。
值得注意的是,这里存在精度与效率的权衡:候选页面范围设得越窄,速度越快,但跨页强关联场景(如跨页表格拼接、跨章节引用)可能漏检。官方的评测结论是,在最长300页的评测范围内解析精度保持稳定,说明页面门控的召回设计在实用区间内是可靠的。
即便每步只关注少数Token,若所有页面的视觉缓存一直堆在显存里,几千页依然吃不消。无限解码机制从缓存管理层面解决这个问题,其要点可概括为三步:
用一个简化的伪代码示意其调度逻辑:
# 概念示意:分块流式解码cache = VisualKVCache() # 有限工作区for group in split_with_overlap(pages, size=N, overlap=M):# 复用上一块的边界页缓存cache.reuse_boundary(prev_group.tail_pages)for page in group:tokens = encode_page(page, cache) # SR-SWA 稀疏参考decode_step(tokens, cache)cache.release_outdated() # 释放不再需要的KV
效果直接体现在资源指标上:单序列推理下KV Cache峰值显存从47GB降至1.77GB;16并发场景下端到端吞吐量从360 TPS提升至1315 TPS。显存占用的下降不仅意味着单卡可处理更长文档,也意味着同等硬件下可以承载更高并发。
官方公布的测试维度覆盖了长度扩展性与精度稳定性:
从工程视角看,这组数据的价值在于三点:
上一代Unlimited OCR已在开源模型社区积累了超过千万次下载,验证了长文档解析的真实需求。2.0版本的推进方向很明确:从长文本生成时的缓存优化,进一步深入到超长视觉输入的计算与显存管理——前者主要处理序列维度的KV增长,后者还要面对视觉Token本身的高信息密度与二维结构。
技术报告中还收录了一段致敬经典作品咏唱风格的文字,以“像素为身,Token为血”描述模型不受KV Cache与上下文长度所缚的设计目标。这一创意的源头是开源社区开发者对上一代模型的二次创作,开发团队将其收录进正式报告,也侧面反映了开源协作对技术传播的推动作用。
对于计划在自有系统中落地长文档解析能力的开发者,以下几点值得参考:
长文档OCR的竞争,正在从“单页识别准不准”转向“千页输入下算得省不省、稳不稳”。百度文心Unlimited OCR 2给出的答案是:用页面级与Token级的双层稀疏把注意力收窄,用重叠分块与缓存释放把显存压平——让模型读得完,也读得起。