docs(gpu): Add benchmarks of standard pipeline with OCR (#2764)

* add results for standard + OCR and more Windows timings

Signed-off-by: Michele Dolfi <dol@zurich.ibm.com>

* fix runtime selection for py 3.14 in CI

Signed-off-by: Michele Dolfi <dol@zurich.ibm.com>

---------

Signed-off-by: Michele Dolfi <dol@zurich.ibm.com>
This commit is contained in:
Michele Dolfi
2025-12-10 20:43:20 +01:00
committed by GitHub
parent da7678a754
commit d03439ccc5
2 changed files with 28 additions and 3 deletions

View File

@@ -27,6 +27,7 @@
# %%
import io
import sys
import time
from pathlib import Path
from typing import Annotated, Literal
@@ -36,6 +37,7 @@ import typer
from PIL import Image
from docling.datamodel import vlm_model_specs
from docling.datamodel.accelerator_options import AcceleratorDevice, AcceleratorOptions
from docling.datamodel.base_models import ConversionStatus, DocumentStream, InputFormat
from docling.datamodel.pipeline_options import (
PdfPipelineOptions,
@@ -47,8 +49,10 @@ from docling.datamodel.pipeline_options_vlm_model import ApiVlmOptions, Response
from docling.datamodel.settings import settings
from docling.document_converter import DocumentConverter, ImageFormatOption
from docling.pipeline.base_pipeline import ConvertPipeline
from docling.pipeline.legacy_standard_pdf_pipeline import LegacyStandardPdfPipeline
from docling.pipeline.standard_pdf_pipeline import StandardPdfPipeline
from docling.pipeline.vlm_pipeline import VlmPipeline
from docling.utils.accelerator_utils import decide_device
def process_document(
@@ -97,12 +101,32 @@ def run(
),
doc_size: int = 192,
batch_size: int = 64,
pipeline: Literal["standard", "vlm"] = "standard",
pipeline: Literal["standard", "vlm", "legacy"] = "standard",
):
acc_opts = AcceleratorOptions()
device = decide_device(acc_opts.device)
ocr_options = RapidOcrOptions()
if "cuda" in device:
ocr_options = RapidOcrOptions(backend="torch")
# On Python 3.14 we only have torch
if sys.version_info >= (3, 14):
ocr_options = RapidOcrOptions(backend="torch")
if pipeline == "standard":
pipeline_cls: type[ConvertPipeline] = StandardPdfPipeline
pipeline_options: PipelineOptions = PdfPipelineOptions(
# ocr_options=RapidOcrOptions(backend="openvino"),
ocr_options=ocr_options,
ocr_batch_size=batch_size,
layout_batch_size=batch_size,
table_batch_size=4,
)
elif pipeline == "legacy":
settings.perf.page_batch_size = batch_size
pipeline_cls: type[ConvertPipeline] = LegacyStandardPdfPipeline
pipeline_options: PipelineOptions = PdfPipelineOptions(
ocr_options=ocr_options,
ocr_batch_size=batch_size,
layout_batch_size=batch_size,
table_batch_size=4,

3
docs/usage/gpu.md vendored
View File

@@ -156,7 +156,8 @@ TBA.
</thead>
<tbody>
<tr><td>Standard - Inline (no OCR)</td><td>3.1 pages/second</td><td>-</td><td>7.9 pages/second<br /><small><em>[cpu-only]* 1.5 pages/second</em></small></td><td>-</td><td>4.2 pages/second<br /><small><em>[cpu-only]* 1.2 pages/second</em></small></td><td>-</td></tr>
<tr><td>VLM - Inference server (GraniteDocling)</td><td>2.4 pages/second</td><td>-</td><td>3.8 pages/second</td><td>3.6-4.5 pages/second</td><td>-</td><td>-</td></tr>
<tr><td>Standard - Inline (with OCR)</td><td></td><td></td><td>tba</td><td>1.6 pages/second</td><td>tba</td><td>1.1 pages/second</td></tr>
<tr><td>VLM - Inference server (GraniteDocling)</td><td>2.4 pages/second</td><td>-</td><td>3.8 pages/second</td><td>3.6-4.5 pages/second</td><td>2.0 pages/second</td><td>2.8-3.2 pages/second</td></tr>
</tbody>
</table>