综合介绍
olmOCR 是由 Allen Institute for Artificial Intelligence (AI2) 的 AllenNLP 团队开发的一款开源工具,专注于将 PDF 文件转换为线性化文本,特别适合用于大规模语言模型 (LLM) 的数据集准备与训练。它支持从复杂的 PDF 文档中提取文本,保持自然阅读顺序,并能处理表格、公式甚至手写内容。工具设计高效,可在本地 GPU 上运行,或通过 AWS S3 实现多节点并行处理,显著降低处理成本。据官方数据,其处理速度可达每秒 3000+ 令牌,成本仅为 GPT-4o 的 1/32,非常适合需要处理大量 PDF 的研究人员和开发者。olmOCR 采用 Apache 2.0 许可,代码、模型权重和数据完全开源,鼓励社区参与改进。
演示地址:https://olmocr.allenai.org/
功能列表
- PDF 文本提取与线性化: 将 PDF 文件转换为 Dolma 风格的 JSONL 格式文本,保留阅读顺序。
- GPU 加速推理: 利用本地 GPU 和 sglang 技术,实现高效文档处理。
- 多节点并行处理: 支持通过 AWS S3 协调多节点任务,适合处理数百万 PDF。
- 复杂内容识别: 处理表格、数学公式和手写文本,输出结构化结果。
- 灵活的工作区管理: 支持本地或云端工作区,存储处理结果和中间数据。
- 开源生态支持: 提供完整代码和文档,方便二次开发与定制。
使用帮助
安装流程
olmOCR 的安装需要在支持 Python 的环境中进行,且推荐使用 GPU 以提升处理效率。以下是详细步骤:
1. 环境准备
- 安装 Anaconda: 如果没有 Anaconda,前往官网下载并安装。
- 创建虚拟环境:
conda create -n olmocr python=3.11 conda activate olmocr
- 克隆代码仓库:
git clone https://github.com/allenai/olmocr.git cd olmocr
2. 安装核心依赖
- 安装基本依赖:
pip install -e .
- 安装 GPU 支持(可选): 如果需要 GPU 加速,安装 sglang 和 flashinfer:
pip install sgl-kernel==0.0.3.post1 --force-reinstall --no-deps pip install "sglang[all]==0.4.2" --find-links https://flashinfer.ai/whl/cu124/torch2.4/flashinfer/
注意: 确保你的 GPU 驱动和 CUDA 版本与上述依赖兼容。
3. 验证安装
- 在命令行运行
python -m olmocr.pipeline --help
,如果输出帮助信息,说明安装成功。
使用方法
olmOCR 提供两种主要使用场景:本地单文件处理和云端大规模处理。以下详细介绍操作流程。
本地处理单个 PDF
- 准备 PDF 文件:
- 将需要处理的 PDF 放入本地目录,例如
./tests/gnarly_pdfs/horribleocr.pdf
。
- 将需要处理的 PDF 放入本地目录,例如
- 运行处理命令:
python -m olmocr.pipeline ./localworkspace --pdfs tests/gnarly_pdfs/horribleocr.pdf
- 查看结果:
- 处理完成后,结果以 JSON 格式保存在
./localworkspace
。 - 提取的文本以 Dolma 风格的 JSONL 格式存储在
./localworkspace/results
中。
- 处理完成后,结果以 JSON 格式保存在
- 调整参数(可选):
--workers
: 设置并发工作线程数,默认 8。--target_longest_image_dim
: 设置渲染图像最大边长,默认 1024 像素。
示例输出:
{"text": "Molmo and PixMo:\nOpen Weights and Open Data\nfor State-of-the...", "metadata": {"primary_language": "en", "is_table": false}}
云端大规模处理(AWS S3)
- 配置 AWS 环境:
- 确保有 AWS 账户并生成访问密钥。
- 在 S3 上创建两个存储桶,例如
s3://my_s3_bucket/pdfworkspaces/exampleworkspace
和s3://my_s3_bucket/jakep/gnarly_pdfs/
。
- 上传 PDF 文件:
- 将 PDF 文件上传至
s3://my_s3_bucket/jakep/gnarly_pdfs/
。
- 将 PDF 文件上传至
- 启动主节点任务:
python -m olmocr.pipeline s3://my_s3_bucket/pdfworkspaces/exampleworkspace --pdfs s3://my_s3_bucket/jakep/gnarly_pdfs/*.pdf
- 此命令会创建一个工作队列并开始处理。
- 添加从节点:
- 在其他机器上运行:
python -m olmocr.pipeline s3://my_s3_bucket/pdfworkspaces/exampleworkspace
- 从节点会自动从队列中获取任务并处理。
- 结果查看:
- 处理结果存储在
s3://my_s3_bucket/pdfworkspaces/exampleworkspace/results
。
- 处理结果存储在
注意: 需要配置 AWS CLI 并确保有足够权限访问 S3 存储桶。
使用 Beaker(AI2 内部用户)
- 添加 Beaker 参数:
python -m olmocr.pipeline s3://my_s3_bucket/pdfworkspaces/exampleworkspace --pdfs s3://my_s3_bucket/jakep/gnarly_pdfs/*.pdf --beaker --beaker_gpus 4
- 运行效果:
- 本地准备工作区后,自动在集群中启动 4 个 GPU 工作节点。
特色功能操作
1. 处理复杂文档
- 操作步骤:
- 上传包含表格或公式的 PDF。
- 使用默认模型
allenai/olmOCR-7B-0225-preview
,运行处理命令。 - 检查输出的 JSONL 文件,确保表格和公式被正确解析为文本。
- 提示: 如果识别效果不佳,可调整
--target_longest_image_dim
参数提高图像分辨率。
2. 高吞吐量处理
- 操作步骤:
- 配置多节点环境(如 AWS 或 Beaker)。
- 增加
--workers
参数以提升单机并行能力。 - 监控处理速度,确保达到每秒 3000+ 令牌。
- 优势: 成本低至每百万页 190 美元,远低于商业 API。
3. 自定义开发
- 操作步骤:
- 修改
olmocr/pipeline.py
,调整处理逻辑。 - 替换
--model
参数,使用自定义模型路径。 - 提交代码至 GitHub,参与社区开发。
- 修改
注意事项
- 硬件要求: 本地运行需 GPU,推荐 NVIDIA 显卡。
- 网络需求: 云端处理需稳定网络连接 AWS。
- 调试技巧: 使用
--stats
参数查看工作区统计信息,便于排查问题。
通过以上步骤,你可以快速上手 olmOCR,无论是处理单个 PDF 还是大规模数据集,都能高效完成任务。