为什么你需要 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

> 实测: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)