百度OCR 2开源:KV缓存从47GB压到1.77GB

一、发生了什么:48 小时内,两家把"长文档显存"摊开讲

2026 年 10 月 27 日,百度发布并开源 Unlimited OCR Works 2(文心 Unlimited OCR 2)。GitHub 仓库 baidu/Unlimited-OCR 的 Release 记录写明「2026/10/27 We release Unlimited OCR 2」,权重同步上到 Hugging Face,代码仓截至当日抓取为 2.89 万 star、MIT 许可。

量子位 10 月 27 日的报道给了三组关键数字:百页级单序列测试中,峰值 KV 缓存从标准解码的 47GB 降到 1.77GB,降幅约 96%;16 路并发下端到端吞吐从 360 词元/秒提升到 1315 词元/秒,约 3.65 倍;单步解码速度分别是全注意力的 7.0 倍、上一代所用参考滑动窗口注意力(R-SWA)的 5.6 倍。质量侧,MPDocBench 综合 84.59,团队自建的百页级基准 MarathonDocBench(100 份文档,每份 103--300 页)得分 77.06。演示任务是 884 页的英文版《指环王》,42 分 56 秒读完,平均每页约 2.9 秒,过程中自动标记 466 处跨页合并。

另一条线索在 10 月 26 日:量子位报道,岩山科技旗下岩芯矩阵联合香港科技大学、CMU 开源 EdgeRock-4B------256K 上下文下注意力 KV 固定 72MiB,比源模型少 99.1%,单张 80GB 卡跑 512 路并发、12124 词元/秒(6.42 倍),Apache-2.0。

两件事回答的是同一个问题:**文档或推理历史变长时,那笔显存账能不能不涨。**一个从推理调度下手,一个从记忆结构下手。

二、技术拆解:一笔账,两条路线

账先算清楚:按量子位 10 月 26 日报道,Qwen3.5-4B 每词元新增 32 KiB KV 缓存,64K 序列即 2 GiB、256K 即 8 GiB;500 条序列光 KV 就要 1 TiB。

路线 A:不动模型结构,动注意力和解码调度

OCR 2 沿用上一代 DeepEncoder + 语言模型结构,改动集中在语言模型内部:把 R-SWA 升级成稀疏参考滑动窗口注意力(SR-SWA),用两层筛选取舍"这一步该看什么":

  • **第一层 Page Gate:**根据当前解析位置,把候选视觉信息收拢到相关页面范围,无关页面不参与计算。
  • **第二层 Token Sieve:**页内也只挑相关的视觉信息块------先用各块简要表示算相关性,再 TopK 取固定数量的块,然后读块内具体视觉信息,而不是只读摘要。
  • **Local Window:**固定大小的局部滑动窗口随生成前移,负责顺着刚才的内容往下写。

块数固定、窗口固定,单步要参考的信息量就被框死------文档再长,这一步还是这么多活。另一半在存:无限解码机制把文档切成页面块依次解析,相邻两块重叠一页,进下一块时复用这页的视觉 KV 缓存,同时保留上段末尾的文本缓存,其余及时释放。算得少 + 存得封顶,才有 47GB→1.77GB。

路线 B:把"记忆"改成有界结构

EdgeRock-4B 走另一条路。它基于 Qwen3.5-4B 分阶段转换而来,不需要从头预训练:保留 24 个 Gated DeltaNet 层,把 8 个全注意力层换成 1024 窗口的滑动窗口注意力,外加独立的记忆模块------记忆岩锚(Rock Memory Anchors,RMA)。

每条序列的历史拆成三份:循环状态抓大意,1024 词元的局部窗口管眼前,锚点库从更早历史里留住关键。写入规则很工程化:每个词元生成候选记录并打分,每累积 256 条就与库里已有记录比较,只留得分最高的 1024 条,四个 KV 组各自独立。锚点内容不变、带来源位置,哪怕来源早已滑出局部窗口仍能读到,注意力 KV 因此固定 72MiB。

说服力在消融实验:256 段 16K--130K 词元上下文、共 1024 个问题,开着 RMA 答对 964 个(94.1%),关掉 8 个 RMA 模块只答对 4 个(0.4%)。推理能力也没牺牲------AIME 2024--2026 平均一次通过率 82.9%,对照组最强的有界状态模型只有 18.8%。

维度 Unlimited OCR 2 EdgeRock-4B
改造对象 注意力选择 + 分块解码调度,模型结构不变 解码器结构 + 记忆机制,需权重转换
KV 上界 被框在当前页面块规模内 固定 72MiB(256K 上下文)
压缩幅度 47GB → 1.77GB,约 96% 减少 99.1%
吞吐 16 路并发 360 → 1315 词元/秒 单卡 512 路,12124 词元/秒
主打指标 MarathonDocBench 77.06 AIME 2024--26 82.9%
许可 MIT Apache-2.0

三、工程上怎么用:先按内存算容量,再调旋钮

OCR 2 的 README 给了条可直接照抄的部署路径:Transformers 快速验证、SGLang 服务化,影响显存的环境变量都写了,踩坑信息在注释里。

复制代码
# 长文档按页窗调度,复用上一个窗口的 KV 尾部
export SGLANG_UOCR_EANABLE_DOC_LIMIT=1
export SGLANG_UOCR_DOC_BASE_PAGE_WINDOW=10
export SGLANG_UOCR_MAX_PAGE_TOKENS=20000
# SAM 注意力偏置的分块上限,默认 512 会一次性分配约 462MiB 容易 OOM
export SGLANG_OPT_UOCR_SAM_REL_POS_BIAS_MB=64
export SGLANG_UOCR_SHM_WRAP_MODEL_DATA=1
export SGLANG_VLM_CACHE_SIZE_MB=0
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True

python -m sglang.launch_server \
    --model-path baidu/Unlimited-OCR-2 \
    --chat-template unlimited-ocr \
    --mem-fraction-static 0.7 \
    --max-running-requests 64 \
    --max-prefill-tokens 2048 \
    --cuda-graph-backend-decode full \
    --cuda-graph-max-bs-decode 64 \
    --cuda-graph-max-bs-prefill 16384 \
    --cuda-graph-bs-prefill 1024 2048

README 点明的几个旋钮值得记下来:

  • --mem-fraction-static 给 0.75 在 32 路以上并发时余量不够,0.7 更稳。
  • --max-prefill-tokens 驱动一个约 [tokens, context/32] 的临时张量,显存随它线性涨;4096 降到 2048,峰值直接减半。
  • 最大的 --cuda-graph-bs-prefill 桶必须等于 --max-prefill-tokens:偏小会回落 eager,偏大则白占捕获显存。
  • 页窗越小峰值越低,但跨窗边界的续接块会丢上下文,跨页合并质量下滑------省内存和保质量直接冲突。

容量可以自己算一遍(按公开参数推算,不是我们的跑分):80GB 卡按 0.7 预留约 56GB,减去 4B 模型 bf16 权重约 8GB,剩约 48GB 给 KV。EdgeRock 每条序列全部历史状态 97.76MiB,48GB 约合 500 路,与技术报告的 512 路上限吻合;换成源模型每条 2GiB,只剩 24 路左右。同样一张卡,并发差一个数量级。

我们的内容流水线每天出十来条稿子,卡住的不是生成,而是把几十页 PDF 资料转成可检索文本:以前按页拆、按批提交、再拼接,返工基本都出在跨页断句和跨页表格上。OCR 2 把切块和衔接收进模型内部,外部只提交整份文档,这层手工拼接就能省掉;对做智能体和内容工程的人,这类"少一层胶水"的改进比榜单涨两分更有体感。这个方向在智能体世界(agentshijie.com)的工具选型里一直被当作硬指标。

四、读者可核对清单

  • 仓库与许可:github.com/baidu/Unlimited-OCR(MIT,Release 记录 2026/10/27);github.com/rockmatrix-ai/EdgeRock(Apache-2.0,仓库创建于 2026-10-07)。权重分别在 Hugging Face 的 baidu/Unlimited-OCR-2 与 rockmatrix-ai/EdgeRock。
  • 技术报告:EdgeRock 中文报告在 rockmatrix.ai/documents/edgerock-report-zh.pdf,第 1 页摘要即给出 72MiB、99.1%、6.42 倍、82.9% 四个数。
  • 最小验证代码:pip install torch==2.13.0 transformers==4.52.1 后 AutoModel.from_pretrained("baidu/Unlimited-OCR-2", trust_remote_code=True),多页调用 model.infer_multi(..., image_files=pages)。
  • 数字出处:47GB→1.77GB、1315 词元/秒、7.0×/5.6×、84.59、77.06、884 页、466 处来自量子位 2026-10-27 报道;12124 词元/秒、512 路、82.9%、18.8%、94.1%/0.4% 来自量子位 2026-10-26 报道与上述 PDF。

五、一句判断

我的判断是:长上下文竞争点已从"能不能装下"转到"每一步开销是不是常数"。对做智能体的人,上下文长度不再是架构约束,容量可按请求数规划、推理前就把内存算清------确定性比峰值数字更值钱。

#AI智能体 #大模型 #开源

相关推荐
2501_944521591 小时前
开源鸿蒙平台 CMP 三方库「scroll-effects」适配全流程
华为·开源·harmonyos
开开心心就好1 小时前
免安装PDF盖章工具,透明度和位置可调
运维·服务器·前端·javascript·pdf·ocr·1024程序员节
街头便衣1 小时前
OpenRouter周榜复算:164万亿token,输出2.55%,DeepSeek账单占1.4%
android·java·开发语言·人工智能·语言模型·开源
2501_944525541 小时前
开源鸿蒙平台 KMP 三方库「FileKit」适配全流程
华为·开源·harmonyos
king王一帅2 小时前
做了三年 ProseMirror 后,我用四个月自研排版引擎实现 WPS / Google Docs 替代品,整套框架 MIT 开源
前端·vue.js·开源
冬奇Lab12 小时前
一天一个开源项目(第249篇):Hallmark —— 一个拒绝“AI 味”的设计 Skill,用 48 套材质主题和浏览器 Linter 约束编程助手
人工智能·开源·资讯
用户5794507706115 小时前
BaoCode,你不是读不懂 Claude Code,是终端不让你读懂
开源
SL_staff15 小时前
运维救火实战:钉钉API变更致薪资计算中断,如何用可视化逻辑引擎5分钟热修复
java·开源·全栈
weh96016 小时前
受够了同事之间的拌嘴,所以我做了一个多Agent协同平台
开源