How to convert PDFs and documents with Docling on a cloud GPU

Rent a GPU on Deploy, then open a terminal in JupyterLab or over SSH. Install Docling from the official docling-project/docling repository the way the README prints, let the package download the models the install pulls in, and run the documented docling command or DocumentConverter. Copy the exported files off the instance before you destroy it, because destroying the instance deletes its disk.

Another PDF pipeline, whose README says at least 12 GB of GPU RAM, is How to convert PDFs to text with olmOCR on a cloud GPU. A different document model, served with SGLang, is How to run Unlimited-OCR-2 on a cloud GPU. Copy documents on and results off with How to transfer files to a cloud GPU. If the process runs out of memory: How to fix CUDA out of memory on a cloud GPU. The vLLM example below listens on 127.0.0.1 port 8000, and the API-server page says a local server defaults to port 5001: How to use SSH port forwarding on a cloud GPU. A converter whose README states 8 GB+ VRAM on two standard rows, and whose quick-start command writes the -o path, is How to convert PDFs to Markdown with MinerU on a cloud GPU. A converter whose README prints no GPU GB figure, and whose default output folder is named conversion_results, is How to convert PDFs to Markdown with Marker on a cloud GPU.

The repository LICENSE file is the MIT License. The copyright line is Copyright The Docling Contributors. The README says the Docling codebase is under MIT license, and that individual model usage follows the model licenses in the original packages. The GitHub license field on 2026-11-13 was MIT. packages/docling/pyproject.toml sets license to MIT, name to docling, and version to 2.150.0. The model card for ibm-granite/granite-docling-258M that day had cardData.license apache-2.0, top-level license null, and gated false, lastModified 2025-09-23T08:52:16.000Z. The card sets language to en. This page does not treat that field as a full language-support list. The README says the project was started by the AI for knowledge team at IBM Research, and the same sentence names a city. This page does not print that city. Read the file before you redistribute the program or a model’s weights.

The commands below are copied from the upstream files named in each step. They were not run on a CloudGPU instance for this page. Anything this page adds around them is marked.

What the docs say about memory

The README and the installation page print no minimum GPU GB figure (read 2026-11-13). The GPU support page has a test-infrastructure table. One GPU cell in that table is NVIDIA L40S 48GB. Two other GPU cells name RTX 5090 and RTX 5070 and do not put a GB figure in those cells. The same table has a RAM row and a pages-per-second results table. This page does not copy the RAM row or the pages-per-second numbers. The 48GB figure describes a test machine on that page. This page does not treat it as a minimum, and it did not remeasure it.

GET /v1/public/compute-capabilities does not list GPUs. It returns feature flags. The memory column is vram_gb from gpu-prices.json, updated_at 2026-11-13T11:07:05.801Z. GET /v1/public/gpu-catalog the same day (generated_at 2026-11-13T11:07:06.881Z) listed the same names and the same vram_gb values, plus Ascend 910B at 64, which is not in gpu-prices.json and is not listed here. The catalog response also includes an availability field. This page does not copy it. Every prices row has gpu_count 1. L40S is not a name in gpu-prices.json. RTX 5070 is not a name in that file. Catalog RTX 5090 is 32. That catalog number is not the GPU-support page’s measurement. The smallest vram_gb in that file is 8, on RTX 2080. This page did not run Docling and does not mark a row as enough. Which listing you can start is on Deploy.

The catalog template list had no Docling template.

Catalog name vram_gb
RTX 2080 8
RTX 3080 10
RTX 2080 Ti 11
RTX 3080 Ti 12
V100 16G 16
A30 24
RTX 3090 24
RTX 4090 24
RTX 4090D 24
RTX 4080 SUPER 32G 32
RTX 5090 32
RTX 5090D 32
V100 32G 32
A100 40G 40
A800 40G 40
A40 48
RTX 4090 48G 48
RTX 4090D 48G 48
RTX A6000 48
NVIDIA RTX PRO 5000 72G 72
RTX PRO 5000 72G 72
A100 80G 80
A800 80G 80
H800 80
RTX 6000D 83
H20 96G 96
RTX PRO 6000 96G 96
RTX PRO 6000 Max-Q 96
H20-3e 141G 141

Install

On Deploy, choose Raw GPU. The README’s install, copied. The note under it says Python 3.9 support was dropped in docling version 2.70.0, and to use Python 3.10 or higher. packages/docling/pyproject.toml sets requires-python to >=3.10,<4.0 and depends on docling-slim[standard]==2.150.0. The standard extra includes models-local. That extra requires torch>=2.2.2,<3.0.0. It does not pin a CUDA wheel index.

pip install docling

The installation page also prints a CPU-only example that adds --extra-index-url https://download.pytorch.org/whl/cpu. The GPU support page’s ONNX Runtime extra, for RapidOCR’s ONNX backend, is:

pip install "docling[onnxruntime]"

The CLI reference documents a separate download command. Its default --output-dir is $HOME/.cache/docling/models. The README quickstart does not print this command. This page did not run it.

docling-tools models download

The installation page has a Nemotron OCR block. That block names a Hugging Face repo and a CUDA wheel index. This page does not print that repo id. Copy the block from the installation page if you need it. The commits API for the default branch main listed b9bf356f9763095ca9d51e7452a054a7db20f237, committed 2026-11-13T05:37:57Z. README.md was 43c016caedf076b3016fe6cdd4ec4d2b53b5acc1, committed 2026-11-10T06:54:28Z.

The RTX 5090 guide says that card is compute capability 12.0 (sm_120) and that PyTorch 2.7 and later, on a build for CUDA 12.8 or newer, is the line that announced support. models-local allows torch>=2.2.2,<3.0.0 and does not select a CUDA build. This page did not re-test Docling on an RTX 5090. Catalog RTX 5090 and RTX 5090D are 32. That is the catalog number only.

The documented CLI and Python API

The README’s CLI example, copied. It says this generates a .md file in the current directory.

docling https://arxiv.org/pdf/2206.01062

The README’s VLM example, copied:

docling --vlm-model granite_docling https://arxiv.org/pdf/2206.01062

docling/cli/main.py sets _DefaultCommandGroup.default_command to convert. A bare docling <source> invocation is routed to convert. The CLI reference lists --to as md, json, yaml, html, html_split_page, text, doctags, vtt, doclang, dclx, chunks, and latex, and says the default is Markdown. The README features list names Markdown, HTML, WebVTT, DocLang, DocTags, and lossless JSON. --output defaults to .. --output-file writes the primary result to one path and requires one input and one output format. When Markdown export is on, export_documents writes {input stem}.md into that directory. This page did not run the URL example, so it does not state the stem of that download.

The README’s Python example, copied. It prints Markdown to the terminal. It does not write a file.

from docling.document_converter import DocumentConverter

source = "https://arxiv.org/pdf/2408.09869"  # a document via a local path or URL
converter = DocumentConverter()
result = converter.convert(source)
print(result.document.export_to_markdown())  # output: "## Docling Technical Report[...]"

Accelerator options

The CLI reference lists --device as auto, cpu, cuda, mps, and xpu, default auto. AcceleratorOptions in docling/datamodel/accelerator_options.py defaults device to auto. The validator also accepts cuda:N. The field description’s parenthetical after cuda names a GPU vendor. The GPU support page’s device snippet, copied:

from docling.datamodel.accelerator_options import AcceleratorDevice, AcceleratorOptions

# Configure accelerator options for GPU
accelerator_options = AcceleratorOptions(
    device=AcceleratorDevice.CUDA,  # or AcceleratorDevice.AUTO
)

The same page’s batch-size snippet sets ocr_batch_size and layout_batch_size to 64, with comments that the default is 4, and table_batch_size to 4. The comment says table batching is currently not using GPU batching. docs/examples/gpu_standard_pipeline.py sets device to AcceleratorDevice.CUDA, ocr_batch_size to 4, layout_batch_size to 64, table_batch_size to 4, and do_ocr to False. Those two files do not use the same ocr_batch_size. docs/examples/run_with_accelerator.py leaves the CUDA block commented and runs with AcceleratorDevice.CPU. This page does not uncomment it.

The GPU support page’s vLLM example, copied. The host and port are the page’s.

vllm serve ibm-granite/granite-docling-258M \
  --host 127.0.0.1 --port 8000 \
  --max-num-seqs 512 \
  --max-num-batched-tokens 8192 \
  --enable-chunked-prefill \
  --gpu-memory-utilization 0.9

Forward that port with how to use SSH port forwarding on a cloud GPU. This page did not start the server.

API server

The deployment page, synced from docling-serve v1.21.0, prints this block. The comments are the page’s. The comment on docling-serve run --enable-ui says the bind is 0.0.0.0 and that the UI is off by default. The comment on the next line says docling-serve dev binds 127.0.0.1 and turns the UI on for localhost only. The same page says the API is at http://localhost:5001, interactive docs are at /docs, and a demo UI is at /ui. This page did not run either command. A container section on that page names GPU vendors. This page does not copy it.

pip install "docling-serve[ui]"
docling-serve run --enable-ui
# docling-serve dev

The index page’s curl, copied:

curl -X POST "http://localhost:5001/v1/convert/source/async" \
  -H "Content-Type: application/json" \
  -d '{"http_sources": [{"url": "https://arxiv.org/pdf/2501.17887"}]}'

ComfyUI

The README does not document a ComfyUI install. The ComfyUI examples top-level directory list on 2026-11-13 had no directory named for this project. Examples HEAD was f9431bb000ce792094ff345446e22cac1ea6cef3, committed 2025-11-26T20:33:58Z. Installing ComfyUI itself is How to install ComfyUI and ComfyUI-Manager on a cloud GPU. This page does not add a ComfyUI install.

When it fails

CUDA out of memory. The README and the installation page print no minimum GPU GB figure. The GPU support page’s test cell NVIDIA L40S 48GB is a description of a test machine. If the process raises that error, use how to fix CUDA out of memory on a cloud GPU.

“CUDA error: no kernel image is available for execution on the device” on an RTX 5090. See the install section. This page did not re-test the package on that card.

Empty Markdown. export_documents logs an error when the Markdown file it writes is empty. This page did not produce that file.

Save the exports, then destroy

The README says the CLI example generates a .md file in the current directory. --output defaults to ., and the Markdown writer uses {input stem}.md. The Python example prints to the terminal. Copy the files you want before you destroy the instance. Save your work before you destroy a cloud GPU is the checklist. The terms say data on local instance storage is permanently deleted when the instance is destroyed.

The pricing page FAQ states the billing rule in these words:

Per-minute options have a 1-minute minimum; unused prepaid minutes are refunded when you destroy the instance. Some configurations use whole-hour billing with a 1-hour minimum; unused time within a charged hour is not refunded on voluntary stop. The billing period, minimum charge and initial prepayment are shown before confirmation. No subscription.

Frequently asked questions

What GPU memory figure does the Docling documentation state?

The README and the installation page print no minimum GPU GB figure. The GPU support page test-infrastructure table has one GPU cell that reads NVIDIA L40S 48GB. This page does not treat that 48GB figure as a minimum. The same table names RTX 5090 and RTX 5070 in other GPU cells and does not put a GB figure in those cells. This page does not copy the RAM row or the pages-per-second results. L40S is not a name in gpu-prices.json (updated_at 2026-11-13T11:07:05.801Z). RTX 5070 is not a name in that file. Catalog RTX 5090 is 32. The smallest vram_gb in that file is 8, on RTX 2080. This page did not run Docling and does not mark a row as enough. Which listing you can start is on https://cloudgpu.app/deploy.

Which commands convert a document, and where is the file written?

The README install is pip install docling. It says Python 3.9 support was dropped in version 2.70.0 and to use Python 3.10 or higher. The README CLI example is docling https://arxiv.org/pdf/2206.01062 and says this generates a .md file in the current directory. cli/main.py writes the input stem plus .md when Markdown export is on, and the CLI reference defaults --output to a single dot. The Python example constructs DocumentConverter, calls convert, and prints export_to_markdown. That example prints to the terminal and does not write a file. _DefaultCommandGroup.default_command is convert, so a bare docling invocation is the convert command. This page did not run the commands.

How does the documentation select a GPU, and does it document ComfyUI?

The CLI reference lists --device values auto, cpu, cuda, mps, and xpu, default auto. AcceleratorOptions defaults device to auto and also accepts cuda:N. The GPU support page sets AcceleratorDevice.CUDA. The deployment page prints pip install docling-serve[ui] and docling-serve run --enable-ui, and a commented docling-serve dev line. It says the API is at http://localhost:5001, interactive docs at /docs, and a demo UI at /ui. The comment on the dev line says it binds 127.0.0.1. The GPU support page vLLM example is vllm serve ibm-granite/granite-docling-258M with --host 127.0.0.1 and --port 8000. The README does not document ComfyUI. The ComfyUI examples top-level directory list on 2026-11-13 had no directory named for this project. Examples HEAD was f9431bb000ce792094ff345446e22cac1ea6cef3.

Which license covers Docling?

The repository LICENSE file is the MIT License, copyright The Docling Contributors. The README says the Docling codebase is under MIT license and that individual model usage follows the model licenses in the original packages. The GitHub license field on 2026-11-13 was MIT. packages/docling/pyproject.toml sets license to MIT and version 2.150.0. The granite-docling-258M card had cardData.license apache-2.0, top-level license null, and gated false. The MIT grant says permission is granted, free of charge. That wording is the upstream license, not a CloudGPU price and not a storage allowance. Read the file before you redistribute the program or the weights.

Sources (read 2026-11-13, Asia/Shanghai)

  • Docling README (pip install docling, the CLI URL example, --vlm-model granite_docling, the DocumentConverter example, MIT for the codebase, model licenses left to the original packages): https://github.com/docling-project/docling/blob/main/README.md commit 43c016caedf076b3016fe6cdd4ec4d2b53b5acc1. Repository HEAD b9bf356f9763095ca9d51e7452a054a7db20f237, committed 2026-11-13T05:37:57Z
  • docs/usage/gpu.md (the AcceleratorDevice.CUDA snippet, batch sizes 64 and 4, the vLLM command, the test cell NVIDIA L40S 48GB, RTX 5090 and RTX 5070 cells with no GB figure in those cells): commit 98dfa0f99c223d09e262e7629e2f4076482e27f7
  • docs/getting_started/installation.md (CPU index URL, docling[onnxruntime], the Nemotron block whose repo id is not printed): commit 77ae451be5f2e3f9befb81616be53cb350f3f9ae
  • docs/reference/cli.md (--to, --output default ., --device default auto, docling-tools models download default $HOME/.cache/docling/models): commit 3df6c9318fc6d91fde424c90a28fc7d7e5f080dc
  • docling/cli/main.py (default_command convert, {stem}.md): commit 3df6c9318fc6d91fde424c90a28fc7d7e5f080dc
  • docling/datamodel/accelerator_options.py (auto, cpu, cuda, cuda:N, mps, xpu): commit 83d5de095cb30846a0df5336117b6213f2c5b335
  • packages/docling/pyproject.toml (docling 2.150.0, MIT, requires-python >=3.10,<4.0, docling-slim[standard]==2.150.0) and the root pyproject.toml (standard includes models-local; torch>=2.2.2,<3.0.0): commit 6852c27fb87dafaaa1a564545a8ce78d4565b186
  • docs/usage/api_server/index.md and docs/usage/api_server/deployment.md (localhost port 5001, docling-serve run --enable-ui, commented docling-serve dev): commit ef9bb95e1e8e95655c2a56edad953e282b6bd15d
  • LICENSE (MIT, Copyright The Docling Contributors): commit 83d5de095cb30846a0df5336117b6213f2c5b335. GitHub license field MIT
  • Model card ibm-granite/granite-docling-258M (apache-2.0, gated false), read 2026-11-13
  • ComfyUI examples top-level directories (no Docling directory): https://github.com/comfyanonymous/ComfyUI_examples commit f9431bb000ce792094ff345446e22cac1ea6cef3
  • Public GPU memory: https://cloudgpu.app/gpu-prices.json (updated_at 2026-11-13T11:07:05.801Z) and https://cloudgpu.app/v1/public/gpu-catalog (generated_at 2026-11-13T11:07:06.881Z). GET /v1/public/compute-capabilities returned feature flags and no GPU list. The catalog had no Docling template

Cards you can start are on the Deploy page. Prices are on https://cloudgpu.app/pricing and are not repeated here.

Last updated: 2026-11-13 (Asia/Shanghai).