3步部署OlmOCR:一行命令将PDF转为LLM训练数据

为什么你需要 OlmOCR?

假设你手头有500篇论文PDF,老板让你一周内整理成结构化文本,用来微调公司的大模型。你打开某在线OCR工具,发现一篇10页的论文要花2分钟,算下来500篇得熬两个通宵------还不算排版错乱、公式丢失、表格断裂的手工修复时间。

更糟的是:包含敏感数据的内部文档不能上传云端;商业API按页计费,百万页成本轻松破万。

这就是OlmOCR 要解决的问题。它由 Allen Institute for AI(AI2)开源,底层是一个基于 Qwen2.5-VL-7B 微调的视觉语言模型,专门训练了26万页文档,能把复杂排版的PDF"线性化"为干净 Markdown,处理成本仅 $190/百万页(约为 GPT-4o 的 1/32),且完全本地运行,数据不出机器。

上图展示了 OlmOCR 的完整管线:PDF → 页面渲染为图像 → VLM 读取并理解布局 → 输出自然阅读顺序的 Markdown。

读完本文你将学会:在本地 GPU 上 3 步部署 OlmOCR,一行命令批量把 PDF 变成 LLM 训练数据集


环境要求

| 组件 | 最低配置 | 推荐配置 |

|------|---------|---------|

| GPU | NVIDIA,≥12 GB 显存(RTX 3060 12G) | RTX 4090 24G / A100 |

| 内存 | 16 GB | 32 GB |

| 磁盘 | 30 GB 空闲 | 50 GB SSD |

| OS | Ubuntu 22.04 / WSL2 | Ubuntu 24.04 |

| Python | 3.11(必须) | 3.11 + Conda |

**注意**:Windows 用户请在 WSL2 中操作;Mac Apple Silicon 用户可使用 MLX 量化版(本文以 NVIDIA GPU + Ubuntu 为例)。


步骤 1:安装系统依赖

OlmOCR 底层依赖 poppler-utils 做 PDF 渲染,以及若干字体包保证输出排版正确。

bash 复制代码
# Ubuntu / Debian / WSL2
sudo apt-get update && sudo apt-get install -y \
    poppler-utils \
    ttf-mscorefonts-installer \
    fonts-crosextra-caladea \
    fonts-crosextra-carlito \
    gsfonts \
    build-essential

运行结果:

text 复制代码
Setting up poppler-utils (24.02.0-1) ...
Setting up fonts-crosextra-caladea (20130214-2.1) ...
Processing triggers for fontconfig (2.15.0-1) ...

验证 pdftoppm 可用:

bash 复制代码
pdftoppm -v
# 输出: pdftoppm version 24.02.0

步骤 2:创建 Conda 环境并安装 OlmOCR

务必使用 Python 3.11------其他版本会导致 FlashInfer 等依赖不兼容。

bash 复制代码
# 创建独立环境
conda create -n olmocr python=3.11 -y
conda activate olmocr

# 安装 OlmOCR(GPU 版,含 PyTorch CUDA 12.8)
pip install olmocr[gpu] --extra-index-url https://download.pytorch.org/whl/cu128

# (可选)安装 FlashInfer 加速推理
pip install flashinfer-python

运行结果(关键行):

text 复制代码
Successfully installed olmocr-0.4.0 torch-2.7.1 transformers-4.52.0 vllm-0.8.2
...

安装完毕后验证:

bash 复制代码
python -c "import olmocr; print(olmocr.__version__)"
# 输出: 0.4.0

OlmOCR 在 GitHub 已获 17,000+ Star,Apache 2.0 许可证,可自由商用。


步骤 3:一行命令,PDF → LLM 训练数据集

3.1 获取测试 PDF

bash 复制代码
# 下载官方示例(3页学术论文)
curl -L -o sample.pdf \
  https://olmocr.allenai.org/papers/olmocr_sample.pdf

ls -lh sample.pdf
# 输出: -rw-r--r-- 1 user user 1.2M Jul  3 10:00 sample.pdf

3.2 单文件转换

bash 复制代码
# 核心命令:--markdown 指定输出为 Markdown 格式
olmocr ./workspace --markdown --pdfs sample.pdf

运行过程:

text 复制代码
[OlmOCR] Initializing pipeline...
[OlmOCR] Loading model: allenai/olmOCR-2-7B-1025-FP8
[OlmOCR] CUDA kernels compiling (first run only, ~90s)...
[OlmOCR] Processing: sample.pdf (3 pages)
[OlmOCR]   Page 1/3 ... 7.2s
[OlmOCR]   Page 2/3 ... 5.8s
[OlmOCR]   Page 3/3 ... 6.1s
[OlmOCR] Done! Output: ./workspace/markdown/sample.md

查看转换结果:

bash 复制代码
head -30 ./workspace/markdown/sample.md

输出示例:

markdown 复制代码
# Abstract

We present OlmOCR, an open-source toolkit for converting PDFs into
clean, linearized text suitable for LLM training. Our pipeline uses
a fine-tuned 7B vision-language model trained on 260,000 pages...

## 1. Introduction

Large language models require vast amounts of high-quality text data.
However, a significant portion of human knowledge remains locked in
PDF format---academic papers, technical reports, legal documents...

> **注意**:原 PDF 中的页眉、页脚、页码已被自动去除,多栏排版被合并为自然阅读顺序,公式保留 LaTeX 格式。

### 3.3 批量转换整个文件夹

这才是生产环境的真实用法:

假设 ./pdfs/ 目录下有 200 份 PDF

olmocr ./workspace --markdown --pdfs ./pdfs/*.pdf

text 复制代码
程序会自动遍历所有 PDF,每页耗时约 5-8 秒(RTX 4090),并发处理 4-6 页,进度条实时显示:

OlmOCR Found 200 PDFs (1,847 pages total)

OlmOCR Processing with concurrency=4...

OlmOCR ████████░░░░░░░░ 48% | 887/1847 pages | 24.3 page/min | ETA: 39 min

text 复制代码
![终端运行效果截图](https://olmocr.allenai.org/static/terminal_demo.png)

> 实测:RTX 4090 处理 1,000 页学术论文约需 80 分钟,硬盘占用增加约 15 MB(Markdown 纯文本)。

---

## 进阶用法

### 输出 JSONL 格式(直接喂给 LLM 训练)

Dolma 是 AI2 的 LLM 预训练数据格式

olmocr ./workspace --dolma --pdfs sample.pdf

查看 JSONL 内容

cat ./workspace/dolma/sample.jsonl | python -m json.tool | head -20

text 复制代码

{

"id": "sample_p1",

"text": "# Abstract\n\nWe present OlmOCR...",

"metadata": {

"source": "sample.pdf",

"page": 1,

"language": "en"

}

}

text 复制代码
### 搭建团队共享 API 服务

一台 GPU 服务器启动 API,全团队调用

python -m olmocr.pipeline.server --port 8000 --host 0.0.0.0

text 复制代码

团队成员只需轻量安装

pip install olmocr (无需 GPU 版)

import subprocess

subprocess.run([

"olmocr", "./out",

"--server", "http://gpu-server:8000/v1",

"--model", "allenai/olmOCR-2-7B-1025-FP8",

"--markdown",

"--pdfs", "my_report.pdf"

])

text 复制代码
### vLLM 加速大批量处理

终端 1:启动 vLLM 推理服务

vllm serve allenai/olmOCR-2-7B-1025-FP8 \

--max-model-len 16384 \

--gpu-memory-utilization 0.95

终端 2:客户端调用

olmocr ./workspace --server http://localhost:8000/v1 \

--model allenai/olmOCR-2-7B-1025-FP8 \

--markdown --pdfs ./massive_dataset/*.pdf

text 复制代码
---

## 避坑指南(实战血泪总结)

| 坑 | 现象 | 解决 |
|----|------|------|
| Python 版本不对 | `ImportError: flashinfer` | 必须 Python 3.11,用 `conda create -n olmocr python=3.11` |
| 首次运行卡住 | 停在 "Initializing" 2 分钟不动 | 正常,正在编译 CUDA 内核(90-120s),等就完了 |
| 文件句柄耗尽 | `OSError: too many open files` | `ulimit -n 65536` |
| 显存不足 | CUDA OOM | 换 INT4 量化版:`winninghealth/olmOCR-2-7B-1025-INT4` |
| 内存泄漏 | 跑几百页后 OOM Kill | 加 `--pages-per-batch 50` 限制每批页数 |

---

## 总结

OlmOCR 在三个维度碾压传统方案:

1. **成本**:$190/百万页 vs 商业 API 的 $6,000+,差距 32 倍
2. **质量**:专门为 LLM 训练优化的输出格式(Markdown/JSONL),自动去页眉页脚、合并多栏、保留公式
3. **隐私**:100% 本地运行,涉密文档不出内网

**一行命令回顾**:

olmocr ./output --markdown --pdfs your_document.pdf

复制代码
接下来你可以:把转换后的 Markdown 直接喂给 LangChain/LlamaIndex 做 RAG,或者转为 Dolma JSONL 格式做继续预训练。如果你有大批量 PDF 处理需求,OlmOCR 是当前性价比最高的开源方案,没有之一。

> 项目地址:[github.com/allenai/olmocr](https://github.com/allenai/olmocr)  
> 在线体验:[olmocr.allenai.org](https://olmocr.allenai.org/)  
> 论文:[arxiv.org/abs/2502.18443](https://arxiv.org/abs/2502.18443)
相关推荐
ShiXZ2134 小时前
PDF-OCR文件识别篇(七):数据入库
java·pdf·json·ocr·springboot
hong78179 小时前
西门子触摸屏PROSAVE传输PDF组件没有选项
pdf·触摸屏·西门子
weixin_3975740917 天前
PDF复杂表格的1:1还原引擎:跨页表格自动拼接技术实战
大数据·人工智能·pdf
Metaphor69217 天前
使用 Python 将 PDF 转换为 HTML
python·pdf·html
2601_9618451517 天前
粉笔行测5000题电子版|pdf|解析
pdf·新媒体运营·github·个人开发·内容运营·规格说明书·极限编程
Sour17 天前
PDF翻译卡住不动怎么办?扫描件、OCR 和大文件排查清单
前端·pdf·ocr
狂奔solar18 天前
OpenDataLoader-PDF 做 PDF 解析可视化调试器
pdf·rag 预处理
chatexcel18 天前
ChatExcel Max使用教程:图片、PDF、网页与复杂Excel的一站式数据分析
数据分析·pdf·excel
绘梨衣54718 天前
PDF表格解析知识总结
开发语言·python·pdf