核心数字#
docling.org 使用 Docling 2.143.1 实测。越低越好。
查看数据表
| 秒/页 | |
|---|---|
| 默认(自动 OCR + 表格) | 8.51 秒 |
| 关闭 OCR | 2.31 秒 |
| 关闭 OCR + 快速表格 | 2.05 秒 |
| 关闭 OCR + 不用表格模型 | 1.59 秒 |
| 配置 | CLI 参数 | 中位数(9 页) | 每页 |
|---|---|---|---|
| 默认 | — | 76.6 秒 | 8.51 秒 |
| 关闭 OCR | --no-ocr | 20.8 秒 | 2.31 秒 |
| 关闭 OCR + 快速表格 | --no-ocr --table-mode fast | 18.4 秒 | 2.05 秒 |
| 关闭 OCR + 不用表格模型 | --no-ocr --no-tables | 14.3 秒 | 1.59 秒 |
时间花在哪里#
Docling 内置性能分析计时(settings.debug.profile_pipeline_timings),docling.org 实测。
查看数据表
| 版面分析 | OCR | 表格结构 | 解析与组装 | 合计 | |
|---|---|---|---|---|---|
| 默认(自动 OCR + 表格) | 15.5 | 61.0 | 11.6 | 0.7 | 88.7 |
| 关闭 OCR | 13.2 | 0.0 | 12.8 | 0.9 | 26.8 |
| 关闭 OCR + 快速表格 | 12.7 | 0.0 | 8.3 | 0.8 | 21.8 |
| 关闭 OCR + 不用表格模型 | 13.5 | 0.0 | 0.0 | 0.8 | 14.4 |
默认设置下 OCR 占绝对大头。这份技术报告是原生数字 PDF,文字直接来自文件本身——OCR 只处理了嵌入的插图(截图和图表),但 9 页仍花了 61 秒。换来的是从这些图片中多找到约 5,000 个字符(Markdown 34,063 对 29,036 个字符)。
测量方法#
- 机器:4 vCPU x86_64 云主机,15 GB 内存,无 GPU,Linux,Python 3.13,PyTorch 2.14.1 CPU 版。
- 软件:Docling 2.143.1、docling-parse 7.23.1、docling-ibm-models 4.0.4;默认模型(Heron 版面模型、TableFormer accurate、auto 引擎选中的 RapidOCR)。
- 文档:Docling Technical Report,arXiv 2408.09869——9 页,3 张表格,若干插图。
- 方法:每种配置一个
DocumentConverter,先预热转换一次,再在同一进程中计时转换三次,取中位数。各阶段时间来自 Docling 内置的性能分析器(settings.debug.profile_pipeline_timings = True)。
在你自己的文档上做同样的分析:
docling convert your.pdf --profiling # 打印各阶段耗时表
docling convert your.pdf --profiling --save-profiling # 同时保存为 JSON冷启动与预热#
新进程需要加载模型。在关闭 OCR 的配置下,首次转换耗时 27.5 秒;之后三次的中位数为 20.8 秒。在服务或批处理任务中,请只创建一次转换器并复用它——或者使用启动时即加载模型的 docling-serve。
扫描文档#
docling.org 实测:原生文本中(≥4 个字母的)不重复单词在各输出中出现的比例。
查看数据表
| 还原比例 | |
|---|---|
| Unstructured | 99.7% |
| Marker | 97.2% |
| Docling | 94.2% |
| PyMuPDF4LLM | 93.8% |
| MarkItDown | 0.0% |
我们把同一篇论文的前四页以 150 DPI 栅格化,并加入轻微模糊和倾斜,因此完全没有文本层。Docling 的默认流水线在 CPU 上以每页 20.4 秒还原了 94.2% 的原文单词。没有本地 OCR 的 MarkItDown 什么也没返回;PyMuPDF4LLM 在安装 Tesseract 之前也没有输出。把 Docling 的 OCR 引擎换成 Tesseract 后达到 95.1%、每页 6.8 秒;onnxruntime 后端的 RapidOCR 输出相同,耗时减半(每页 8.7 秒)。大量处理扫描件时,CUDA GPU 或 Apple Silicon 带来的差别最大——引擎选择见 OCR 指南。
影响速度的设置#
| 设置 | CLI | 效果 |
|---|---|---|
| 跳过 OCR | --no-ocr | 我们在原生数字 PDF 上的测试中快 3.7 倍 |
| 快速表格 | --table-mode fast | 我们的测试中端到端快 11% |
| 线程 | --num-threads N(默认 4) | 设为物理核心数 |
| 设备 | --device auto|cpu|cuda|mps|xpu | auto 选择最佳可用设备 |
| 页面批次 | --page-batch-size N(默认 4) | GPU 上更大的批次有帮助 |
| 更少页面 | --page-range 1-5 | 只转换需要的部分 |
| 安全网 | --document-timeout 300 | 得到部分结果,而不是卡住的任务 |
| 完全不用模型 | --pipeline native(+ --parser-threads N) | 无模型:只有 PDF 自带的文本单元和图片——没有版面、标题、阅读顺序或表格。最快,结构最少。 |
| 内存 | --release-native-memory-every-n-pages N(默认 128) | 长文档占用内存过多时调低 |
对应的 Python 设置在 PdfPipelineOptions 和 AcceleratorOptions 中——见 Python API 指南。
IBM 公布的数据#
Docling 技术报告(v1,2024 年 8 月)在关闭 OCR 的情况下,用 225 页测试集测量了旧版本:Apple M3 Max 上每秒 1.27–1.34 页,Intel Xeon E5-2690 上每秒 0.60–0.92 页,分别使用 4 和 16 线程。这些机器比我们的快,Docling 版本也更旧,因此这些数字只作参考,不宜直接比较。
常见问题
Docling 每页要多久?
在我们没有 GPU 的 4 vCPU 测试机上,Docling 2.143.1 默认设置每页 8.5 秒,关闭 OCR 每页 2.3 秒,需要完整 OCR 的扫描文档每页约 20 秒。实际数字取决于 CPU、GPU 和文档类型。
如何让 Docling 更快?
对原生数字 PDF 关闭 OCR(--no-ocr),使用 --table-mode fast,只转换需要的页面(--page-range),在核心更多的机器上调高 --num-threads,复用同一个 DocumentConverter,并在 OCR 密集或 VLM 任务中使用 GPU。
Docling 会自动使用 GPU 吗?
会。--device auto(默认)时,Docling 依次选择 CUDA、Apple MPS、Intel XPU、CPU,前提是你的 PyTorch 版本支持该设备。
为什么 Docling 第一次运行这么慢?
第一次运行需要下载并加载模型。在我们的测试中,新进程中的首次转换耗时 27.5 秒,模型加载后同一文档只需 20.8 秒。
资料来源
- Docling 性能分析:settings.debug.profile_pipeline_timings
- 测试文档:Docling Technical Report(arXiv 2408.09869)
- Docling 技术报告表 1(IBM 自己的运行时间数据)