跳到主要内容

文档智能 · OCR 下游理解

DocFormer 本地部署:一篇 ICCV 论文,和一份你得自己训出来的权重

DocFormer 是 Amazon 在 ICCV 2021 提出的多模态文档理解 Transformer,base 183M、large 536M;续作 DocFormerv2 做到 750M。它的问题不在显存——而在于官方从头到尾没有公开过一行代码、一个 checkpoint。

先把定位说清楚:DocFormer 不是 OCR 引擎。它吃的是 OCR 的输出——词级文本 token 加上每个词的 bounding box,再叠加页面像素,做的是表单键值抽取、收据字段提取、文档分类、DocVQA 这类下游理解任务。论文作者是 Srikar Appalaraju、Bhavan Jasani、Bhargava Urala Kota、Yusheng Xie、R. Manmatha(arXiv:2106.11539)。架构上它有两处和同期 LayoutLM 系列明显不同:视觉分支用的是一个朴素的 ResNet50 而非 Faster R-CNN 之类的目标检测网络,以及空间注意力权重在视觉和语言两条流之间共享,预训练靠 MM-MLM、LTR(Learn To Reconstruct)、TDI(Text Describes Image)三个自监督任务在 IIT-CDIP 的 500 万页文档上完成。

然后是所有想本地部署 DocFormer 的人都会撞上的那堵墙:没有官方权重。在 Hugging Face Hub 上搜 docformer,返回的是空列表;transformers 库里也没有 DocFormer 这个模型类。DocFormerv2(AAAI 2024,arXiv:2306.01733)同样只有论文和 Amazon Science 的页面,没有 repo,没有 checkpoint。今天能跑起来的只有一份 MIT 许可的社区复现 github.com/shabie/docformer(维护者 uakarsh 与 shabie,约 290 star、42 fork、280 次提交),作者自己用 IDL 数据集的一个子集做了 MLM 预训练并把权重放在了 Kaggle 上——注意那不是论文那套 MM-MLM + LTR + TDI 三任务权重,指标对不上是正常的。

所以这页只讲两件真事:一,如果你就是要复现 DocFormer——微调要多少显存、从零预训练一个 epoch 花多少钱,我们把论文里给出的 17 小时/epoch on A100 40GB 直接换算成账单;二,如果你的实际目标是把文档解析这件事在自己机器上跑起来,2026 年更该看的是 DeepSeek-OCR、dots.ocr 这类文档 VLM。两条路都要 GPU,NexGPU 从 $0.188/卡·时的 Tesla V100 32GB 到 141GB 的 H200 都能按秒计费开出来。

01 —

DocFormer 各变体与显存口径

参数量、层数、指标全部来自原论文;显存按 AdamW 混合精度 16 bytes/参数 的训练态估算,不含激活。

版本参数量显存上下文说明
DocFormer-base(ICCV 2021)183Mfp16 权重 ~0.37GB / 训练态 ~2.9GB + 激活,16GB 卡够用512 text token12 层、hidden 768、12 头,视觉分支为朴素 ResNet50。论文成绩:FUNSD 83.34 F1、CORD 96.33 F1、RVL-CDIP 96.17%、Kleister-NDA 85.8 F1。绝大多数复现工作用的都是这一档。
DocFormer-large536Mfp16 权重 ~1.1GB / 训练态 ~8.6GB + 激活,24GB 起步、48GB 从容512 text token24 层、hidden 1024、16 头。FUNSD 84.55 F1、CORD 96.99 F1。有个反直觉的真实结果:它在 RVL-CDIP 文档分类上 95.50%,反而输给 base 的 96.17%——上 large 之前先确认你的任务真的吃得下这个容量。
DocFormerv2-small(AAAI 2024)66M训练态 ~1.1GB + 激活,任意 16GB 卡随便跑编码器-解码器,128 image tokenv2 最大的改动是把重型视觉编码器整个砍掉:不用 Swin、不用 ViT,只保留一层 linear(conv 2×2),随机初始化。small 档是做消融和小规模验证的性价比选择。
DocFormerv2-base232M训练态 ~3.7GB + 激活,16–24GB 卡舒适编码器-解码器自回归生成式,直接吐答案而不是做序列标注,因此 DocVQA、InfoVQA、TabFact 这类任务不需要额外接 head。预训练任务改成编码器上的 Token-to-Line 与 Token-to-Grid,加解码器上的去噪 MLM。
DocFormerv2-large750Mfp16 权重 ~1.5GB / 训练态 ~12GB + 激活,24–32GB 起,48GB 更稳编码器-解码器论文的 SOTA 档:DocVQA 87.84 ANLS、FUNSD 88.89 F1、CORD 97.70 F1、TabFact 83.2、InfoVQA 48.8、OCR-VQA 71.5、TextVQA 64.0、ST-VQA 71.8。论文强调它在场景文字 VQA 上压过体量大得多的 GIT2、PaLI、Flamingo。
社区实现 shabie/docformer对齐 base 的 183M同 base,单卡 16GB 可跑通前向与微调max_position_embeddings 512MIT 许可,是今天唯一能真正跑起来的 DocFormer 代码。默认 config 里 coordinate_size 96、shape_size 96、max_2d_position_embeddings 1000、max_relative_positions 8、image_feature_pool_shape [7,7,256],编码器输出 (1, 512, 768)。Kaggle 上的权重只做过 IDL 子集的 MLM,不等于论文权重。

02 —

按你要干的事选卡

DocFormer 这个体量的模型,瓶颈从来不是权重大小,而是 OCR 预处理吞吐和你打算跑多少组实验。

  • 复现 FUNSD / CORD 微调,DocFormer-base 183M

    Tesla V100 32GB$0.188/卡·时

    论文的下游微调本来就是在 V100 16GB 上做的,32GB 版本让你把 batch 和 OCR 缓存都开大,而它恰好是我们整个货架上最便宜的一张卡。

  • DocFormer-large 536M 或 DocFormerv2-large 750M 全参数微调

    RTX A6000 48GB$0.817/卡·时

    750M 的 AdamW 训练态约 12GB,加上 512 token 注意力和图像分支的激活,48GB 能让你不必为了塞下去而反复调 batch size 和梯度累积。

  • 照论文从零预训练:MM-MLM + LTR + TDI,IIT-CDIP 量级语料

    A100 PCIE 80GB$0.824/卡·时

    论文明确给了 A100 40GB 上 17 小时/epoch 这个数,80GB 版本能直接放大 batch;单节点最多 14 卡、节点显存上限 2,152GB,数据并行不用跨机。

  • 放弃复现,直接上文档 VLM:DeepSeek-OCR 3B 或 dots.ocr

    RTX 4090 24GB$0.540/卡·时

    3B 的 bf16 权重约 6GB,剩下十几 GB 全给 vLLM 的 KV cache 和高分辨率图像 token,是这一档模型最划算的常驻推理卡。

03 —

在 NexGPU 上把 DocFormer 跑起来

四步,从空实例到一次成功的前向;第四步是分叉口,看你走复现还是走生产。

  1. 01

    开实例并装好 OCR 链路

    从 2,000+ 预置镜像里挑 PyTorch 镜像开机,SSH 或 Jupyter 进去。重点:DocFormer 自己不做 OCR,它要的是词级文本加 bounding box,所以 tesseract 是硬依赖,不是可选项。社区实现的 dataset.create_features 直接调 pytesseract。

    sudo apt update && sudo apt install -y tesseract-ocr && pip install pytesseract transformers torch
  2. 02

    拉社区实现(官方代码从未公开)

    不用去 Hugging Face 上找 model id,搜 docformer 是空结果。唯一可用的是 MIT 许可的 shabie/docformer。它没有打成 pip 包,用法是 clone 之后把 src 目录塞进 sys.path。Kaggle 上有维护者用 IDL 子集做 MLM 预训练的权重和一份 FUNSD 微调 notebook,可以当起点。

    git clone https://github.com/shabie/docformer.git
  3. 03

    跑通一次前向,确认拿到 (1, 512, 768)

    用 BertTokenizerFast 加载 bert-base-uncased 的分词器,把一页文档图像喂进 create_features,再经 ExtractFeatures 和 DocFormerEncoder。输出形状对上 (1, 512, 768) 就说明视觉、文本、空间三路特征都接好了。这一步在 V100 上几秒钟就能验完,别拿 A100 做冒烟测试。

    v_bar, t_bar, v_bar_s, t_bar_s = feature_extractor(encoding); output = docformer(v_bar, t_bar, v_bar_s, t_bar_s)  # -> (1, 512, 768)
  4. 04

    分叉:继续复现,还是切到文档 VLM

    要论文级指标,就得自己补上 MM-MLM + LTR + TDI 的预训练,换 A100 多卡按下面的账单跑。要的是今天就能解析发票、合同、表格的能力,那就直接在同一台机器上换镜像起 vLLM——DeepSeek-OCR 和 dots.ocr 都是 MIT 许可、都支持 vLLM,单张 4090 就能常驻服务。实例停了计费就停,切换成本几乎为零。

    vllm serve deepseek-ai/DeepSeek-OCR --trust-remote-code --gpu-memory-utilization 0.85

把论文里的 17 小时/epoch 换算成账单

复现 FUNSD 微调:FUNSD 只有 149 页训练样本,DocFormer-base 183M 在 Tesla V100 32GB 上跑完整轮次约 1.5 小时,$0.188 × 1.5 = $0.28。这是本页所有数字里最便宜的一个,比你为它开会讨论的时间成本低得多。一轮 large 级别的完整微调实验:RTX A6000 48GB,$0.817 × 12 小时 = $9.80。真正的大头是从零预训练:论文给的是 A100 40GB 上 17 小时/epoch,用 A100 PCIE 80GB 单卡算,17 × $0.824 = $14.01/epoch;换 8 卡数据并行,理想线性加速下 17 ÷ 8 ≈ 2.13 小时,8 × $0.824 × 2.13 ≈ $14.04/epoch——注意钱几乎没变,变的是墙钟时间从 17 小时压到两小时出头。跑 10 个 epoch 约 $140,8 卡约 21 小时收工。存储另算:IIT-CDIP 量级的图像加 OCR 缓存按 500GB 估,$0.414 × 500 = $207/月,摊到每天约 $6.9,跑完记得销毁卷——计算停了不计费,存储会一直算到你删掉为止。如果你走的是文档 VLM 那条路,RTX 4090 24GB 连开一整天是 $0.540 × 24 = $12.96,比预训练一个 epoch 还便宜。

04 —

常见问题

DocFormer 有官方预训练权重吗?在哪里下载?

没有。Amazon 发表了 DocFormer(ICCV 2021)和 DocFormerv2(AAAI 2024)两篇论文,但从未公开代码或 checkpoint;Hugging Face Hub 上搜 docformer 返回空列表,transformers 里也没有对应模型类。今天能用的只有 MIT 许可的社区实现 shabie/docformer,以及维护者在 Kaggle 上放的、仅用 IDL 子集做过 MLM 的权重。也就是说想要论文级效果,你得自己预训练——这正是按秒计费的 A100 PCIE 80GB($0.824/卡·时)派上用场的地方,跑完就停,不用为闲置的自有集群买单。

DocFormer 支持中文文档吗?

开箱即用地说,不支持。社区实现用的是 bert-base-uncased 的 BertTokenizerFast,词表只有 30,522 且全小写英文,中文会被切成一堆 [UNK]。要做中文,你得换成中文或多语种分词器、重建词表、再从头跑一遍预训练——工程量约等于重训一个模型。如果你的目标只是中文票据、合同、表格解析,更现实的路是直接跑支持多语种的文档 VLM。两种方案在 NexGPU 上都是同一台机器换个镜像的事,前者选 A100,后者一张 RTX 4090 24GB($0.540/卡·时)就够。

微调 DocFormer 到底需要多大显存?

按 AdamW 混合精度 16 bytes/参数 估算训练态:base 183M 约 2.9GB、large 536M 约 8.6GB、DocFormerv2-large 750M 约 12GB,再加 512 token 注意力和视觉分支的激活。论文自己的下游微调就是在 V100 16GB 上完成的。结论很直接:base 用 Tesla V100 32GB($0.188/卡·时)绰绰有余,large 和 v2-large 建议 RTX A6000 48GB($0.817/卡·时)省心。NexGPU 无最低消费、无起租时长,试一个 batch size 不合适就换卡重来。

DocFormer 和 LayoutLMv3、Donut 怎么选?

如果你在写论文、需要一个多模态文档理解的对照基线,DocFormer 的三任务预训练设计和共享空间注意力仍然值得跑。但要上生产,先看许可:LayoutLMv3 的模型卡是 CC BY-NC-SA 4.0,明确非商用,很多团队到合规评审那步才发现这一点;Donut 和 DeepSeek-OCR、dots.ocr 则是 MIT。DocFormer 因为没有官方权重,商用路径最长。无论你比哪几个,在 NexGPU 上并行开几台不同卡型的实例同时跑基准,比在本地一台机器上排队快得多。

2026 年了,DocFormer 还值得部署吗?

作为一个研究架构值得读、值得复现,它对 ResNet50 视觉分支和跨模态共享空间注意力的取舍,到 v2 干脆砍到只剩 linear(conv 2×2),这条演化线本身很有参考价值。但作为生产系统,它有两个硬伤:官方权重缺失,以及 512 token 上限加纯英文词表。今天真正在跑的文档解析基本都是 VLM 路线——DeepSeek-OCR(3B、MIT、bf16、vLLM 官方支持,olmOCR-bench 75.7)、dots.ocr(1.7B LLM 底座、MIT、多语种版面加内容一体化)。这两个都能塞进一张 RTX 4090 24GB,$0.540/卡·时 就能起一个常驻服务。

从零预训练一个 DocFormer 要多久、要多少卡?

论文给的锚点是 IIT-CDIP 的 500 万页文档、A100 40GB 上 17 小时一个 epoch。真正麻烦的不是 GPU,而是先把这 500 万页全部过一遍 OCR 拿到词框——这一步 CPU 密集,建议单独开一台高核数实例批处理,别占着 A100 干这活。GPU 阶段用 8 张 A100 PCIE 80GB 数据并行,理想情况下每 epoch 压到两小时出头。NexGPU 单节点最多 14 张卡、节点显存上限 2,152GB,全网 1,175 个已验证可租节点、2,498 张 GPU 分布在 51 个国家和地区,不用提配额申请,Telegram 上有中英文支持随时问,不排队。

开始使用 NexGPU

无论你是企业研发团队还是独立开发者,都可以在几分钟内跑起第一个任务。

注册即可浏览全网实时价格,无需绑定支付方式。