olmOCR
요약
olmOCR은 PDF 및 이미지 기반 문서를 깨끗한 Markdown 형식으로 변환하는 VLM 기반 툴킷입니다. 수식, 표, 필기체 등 복잡한 서식을 지원하며, 자체 벤치마크인 olmOCR-Bench를 통해 성능을 검증합니다.
핵심 포인트
- 7B 파라미터 VLM 기반의 고성능 문서 변환 툴킷
- 수식, 표, 다단 레이아웃 등 복잡한 서식 및 읽기 순서 지원
- 100만 페이지 변환 시 200 USD 미만의 높은 비용 효율성
- olmOCR-Bench를 통한 체계적인 OCR 성능 측정 가능
PDF 및 기타 이미지 기반 문서 형식을 깨끗하고 읽기 쉬운 일반 텍스트 형식으로 변환하기 위한 툴킷 (toolkit).
온라인 데모 체험하기: https://olmocr.allenai.org/
주요 기능:
-
PDF, PNG, JPEG 기반 문서를 깨끗한 Markdown 형식으로 변환
-
수식 (equations), 표 (tables), 필기 (handwriting) 및 복잡한 서식 (formatting) 지원
-
헤더 (headers) 및 푸터 (footers) 자동 제거
-
그림 (figures), 다단 레이아웃 (multi-column layouts) 및 삽입물 (insets)이 있는 경우에도 자연스러운 읽기 순서 (reading order)로 텍스트 변환
-
효율적인 비용, 100만 페이지 변환 시 200 USD 미만 소요
-
(7B 파라미터 VLM 기반이므로 GPU가 필요함)
-
2025년 10월 21일 - v0.4.0 - 새로운 모델 출시, 합성 데이터 (synthetic data)를 사용하여 olmOCR-bench 점수를 약 4점 향상시키고 RL (강화학습) 훈련 도입.
-
2025년 8월 13일 - v0.3.0 - 새로운 모델 출시, 자동 회전 감지 (auto-rotation detection) 및 빈 문서에서의 환각 (hallucinations) 현상 수정.
-
2025년 7월 24일 - v0.2.1 - 새로운 모델 출시, olmOCR-Bench에서 3점 높은 점수 기록, 기본 FP8 적용으로 훨씬 빠른 속도 구현, 문서당 재시도 (retries) 횟수 대폭 감소.
-
2025년 7월 23일 - v0.2.0 - 새롭게 정리된 트레이너 (trainer) 코드, olmOCR 모델을 직접 훈련하는 과정을 훨씬 단순화함.
-
2025년 6월 17일 - v0.1.75 - 추론 파이프라인 (inference pipeline)을 sglang에서 vllm 기반으로 전환, Docker 이미지를 CUDA 12.8로 업데이트.
-
2025년 5월 23일 - v0.1.70 - 공식 Docker 지원 및 이미지 사용 가능! Docker 사용법 참조
-
2025년 5월 19일 - v0.1.68 - olmOCR-Bench 출시, 77.4점 기록. 프롬프트 (prompts) 버그 수정으로 인해 olmOCR 파이프라인 성능이 2점 향상됨.
-
2025년 3월 17일 - v0.1.60 - 샘플링 (sampling) 시 더 나은 온도 선택 (temperature selection)을 통한 성능 개선.
-
2025년 2월 25일 - v0.1.58 - 최초 공개 출시 및 데모.
olmOCR-Bench:
OCR 시스템의 성능 측정을 돕기 위해 1,400개의 문서에 걸친 7,000개 이상의 테스트 케이스를 포함하는 종합적인 벤치마크 스위트 (benchmark suite)를 함께 제공합니다.
| ArXiv | 오래된 스캔 수학 |
| 표 (Tables) | 오래된 스캔 |
| 헤더 및 푸터 (Headers & footers) |
| 다중 열 (Multi column) |
| 길고 작은 텍스트 (Long tiny text) |
| 기본 (Base) | 전체 (Overall) | |
|---|---|---|---|---|---|---|---|---|---|
| Mistral OCR API | 77.2 | 67.5 | 60.6 | 29.3 | 93.6 | 71.3 | 77.1 | 99.4 | 72.0±1.1 |
| ... | olmOCR v0.4.0 |
| | 83.0 | 82.3 | 84.9 | 47.7 | 96.1 | 83.7 | 81.9 | 99.7 | 82.4±1.1 |
PDF 이미지를 렌더링하려면 poppler-utils와 추가 폰트를 설치해야 합니다.
의존성 설치 (Ubuntu/Debian):
sudo apt-get update
sudo apt-get install poppler-utils ttf-mscorefonts-installer msttcorefonts fonts-crosextra-caladea fonts-crosextra-carlito gsfonts lcdf-typetools
conda 환경을 설정하고 olmocr를 설치하세요. olmOCR 실행을 위한 요구 사항은 기존 파이썬 (Python) 환경에 설치하기 까다로우므로, 반드시 깨끗한 파이썬 환경을 새로 만들어 설치하시기 바랍니다.
conda create -n olmocr python=3.11
conda activate olmocr
사용 사례에 맞는 설치 옵션을 선택하세요:
옵션 1: 원격 추론 (Remote Inference, 경량형)
--server 플래그를 사용하여 원격 vLLM 서버를 사용할 계획이라면, 기본 패키지를 설치하세요:
pip install olmocr
이렇게 하면 PyTorch (~2GB+)와 같은 무거운 GPU 의존성을 설치하지 않아도 됩니다.
옵션 2: 로컬 GPU 추론 (Local GPU Inference)
요구 사항:
- 최소 12GB의 GPU RAM을 갖춘 최신 NVIDIA GPU (RTX 4090, L40S, A100, H100에서 테스트됨)
- 30GB의 여유 디스크 공간
자신의 GPU로 추론을 실행하려면:
pip install olmocr[gpu] --extra-index-url https://download.pytorch.org/whl/cu128
# 권장 사항: GPU에서 더 빠른 추론을 위해 flash infer 설치
pip install https://download.pytorch.org/whl/cu128/flashinfer/flashinfer_python-0.2.5%2Bcu128torch2.7-cp38-abi3-linux_x86_64.whl
옵션 3: Beaker 클러스터 실행 (Beaker Cluster Execution)
--beaker 플래그를 사용하여 Beaker 클러스터에 작업을 제출하려면:
pip install olmocr[beaker]
옵션 4: 벤치마크 스위트 (Benchmark Suite)
olmOCR 벤치마크 스위트를 실행하려면:
pip install olmocr[bench]
통합 설치 (Combined Installation)
여러 옵션을 조합할 수 있습니다:
GPU + Beaker 지원
pip install olmocr[gpu,beaker] --extra-index-url https://download.pytorch.org/whl/cu128
GPU + 벤치마크 (Benchmark) 지원
...
문제 해결 (Troubleshooting)
too many open files 오류가 발생하는 경우, ulimit을 업데이트하세요:
ulimit -n 65536
빠른 테스트를 위해 웹 데모 (web demo)를 사용해 보세요.
단일 PDF 변환 (로컬 GPU):
# 샘플 PDF 다운로드
curl -o olmocr-sample.pdf https://olmocr.allenai.org/papers/olmocr_3pg_sample.pdf
# 마크다운 (markdown)으로 변환
...
이미지 파일 변환:
olmocr ./localworkspace --markdown --pdfs random_page.png
여러 개의 PDF 변환:
olmocr ./localworkspace --markdown --pdfs tests/gnarly_pdfs/*.pdf
원격 추론 서버 (Remote Inference Server) 사용:
olmocr ./localworkspace --server http://remote-server:8000/v1 --model allenai/olmOCR-2-7B-1025-FP8 --markdown --pdfs *.pdf
--markdown 플래그를 사용하면, 결과가 ./localworkspace/markdown/ 내부에 마크다운 파일로 저장됩니다.
참고: 선호에 따라 olmocr 대신 python -m olmocr.pipeline을 사용할 수도 있습니다.
이 경우 ./localworkspace/ 워크스페이스 폴더에 Dolma 파일과 마크다운 파일(--markdown 사용 시)이 모두 생성됩니다.
cat localworkspace/markdown/olmocr-sample.md
olmOCR: Vision Language Models를 통해 PDF 내 수조 개의 토큰을 해제합니다
...
이미 다른 곳에서 vLLM 서버가 실행 중이거나 (또는 OpenAI API를 구현하는 모든 추론 플랫폼), 로컬 인스턴스를 생성하는 대신 olmOCR이 해당 서버를 사용하도록 지정할 수 있습니다.
원격 추론을 위한 설치:
# 경량 설치 - GPU 의존성 필요 없음
pip install olmocr
외부 서버 사용:
# 로컬 서버 대신 외부 vLLM 서버 사용
olmocr ./localworkspace --server http://remote-server:8000/v1 --model allenai/olmOCR-2-7B-1025-FP8 --markdown --pdfs tests/gnarly_pdfs/*.pdf
vLLM에서 서비스되는 모델 이름은 --model에 제공된 값과 일치해야 합니다.
vLLM 서버 실행 예시:
vllm serve allenai/olmOCR-2-7B-1025-FP8 --max-model-len 16384
저희는 다음과 같은 외부 모델 제공업체(external model providers)에서 olmOCR-2-7B-1025-FP8을 테스트하였으며, 정상 작동을 확인했습니다.
| 1M 입력 토큰당 비용 ($/1M Input tokens) | 1M 출력 토큰당 비용 ($/1M Output tokens) | 실행 예시 명령 (Example Command) |
|---|---|---|
| Cirrascale | $0.07 | $0.15 |
| ... |
인자(arguments)에 관한 참고 사항
--server
: OpenAI 호환 엔드포인트(endpoint)를 정의합니다: 예) https://api.deepinfra.com/v1/openai
--api_key
: Authorization Bearer HTTP 헤더를 통해 전달되는 귀하의 API 키입니다.
--max_concurrent_requests
: 추론 제공업체(inference provider)로 한 번에 전송될 수 있는 최대 동시 요청(concurrent requests) 수입니다.
--workers
: 한 번에 처리될 페이지 그룹(page groups)의 최대 수입니다. 한 그룹의 작업을 마친 후 다음으로 넘어가려면 이 값을 1로 설정하는 것이 좋습니다.
--pages_per_group
: 많은 외부 제공업체가 낮은 동시 요청 제한을 가지고 있으므로, 그룹당 페이지 수를 더 적게 설정해야 할 수도 있습니다.
--model
: 모델 식별자(model identifier)입니다. 예: allenai/olmOCR-2-7B-1025. 제공업체마다 이름이 다를 수 있으며, 로컬에서 실행하는 경우 olmocr을 사용할 수 있습니다.
- 기타 인자들은 로컬 추론(local inference) 시와 동일하게 작동합니다.
병렬로 실행되는 여러 노드를 사용하여 수백만 개의 PDF를 변환하려면, olmOCR은 AWS S3에서 PDF를 읽고 AWS S3 출력 버킷을 사용하여 작업을 조정(coordinating)하는 기능을 지원합니다.
첫 번째 워커 노드(worker node) 시작:
olmocr s3://my_s3_bucket/pdfworkspaces/exampleworkspace --pdfs s3://my_s3_bucket/jakep/gnarly_pdfs/*.pdf
이렇게 하면 AWS 버킷에 간단한 작업 큐(work queue)가 설정되고 PDF 변환이 시작됩니다.
이후 워커 노드들:
olmocr s3://my_s3_bucket/pdfworkspaces/exampleworkspace
이 노드들은 동일한 워크스페이스 큐에서 항목을 자동으로 가져오기 시작합니다.
만약 Ai2에 소속되어 있으며 Beaker를 사용하여 수백만 개의 PDF를 효율적으로 선형화(linearize)하고자 한다면, Beaker 지원 옵션과 함께 설치하십시오:
pip install olmocr[gpu,beaker] --extra-index-url https://download.pytorch.org/whl/cu128
그 다음 --beaker 플래그를 사용하여 로컬에서 워크스페이스 (workspace)를 준비하고 클러스터에서 N개의 GPU 워커 (worker)를 실행합니다:
olmocr s3://my_s3_bucket/pdfworkspaces/exampleworkspace --pdfs s3://my_s3_bucket/jakep/gnarly_pdfs/*.pdf --beaker --beaker_gpus 4
Docker 이미지를 가져옵니다 (모델을 포함하여 크기가 큼, 약 30GB):
docker pull alleninstituteforai/olmocr:latest-with-model
자신만의 모델 다운로드를 관리하고자 하는 고급 사용자를 위해, 모델이 포함되지 않은 베이스 이미지 (base image)도 제공합니다:
docker pull alleninstituteforai/olmocr:latest
현재 디렉터리에 있는 단일 PDF를 처리합니다:
docker run --gpus all \
-v $(pwd):/workspace \
alleninstituteforai/olmocr:latest-with-model \
...
여러 개의 PDF를 처리합니다:
docker run --gpus all \
-v /path/to/pdfs:/input \
-v /path/to/output:/output \
...
탐색 및 디버깅 (debugging)을 위해 컨테이너를 대화형 (interactively)으로 실행합니다:
docker run -it --gpus all alleninstituteforai/olmocr:latest-with-model
더 자세한 정보는 Docker Hub에 있는 저희 Docker 저장소 (repository)를 방문하세요.
사용 가능한 모든 옵션을 확인하려면:
olmocr --help
usage: pipeline.py [-h] [--pdfs [PDFS ...]] [--model MODEL] [--workspace_profile WORKSPACE_PROFILE] [--pdf_profile PDF_PROFILE] [--pages_per_group PAGES_PER_GROUP] [--max_page_retries MAX_PAGE_RETRIES] [--max_page_error_rate MAX_PAGE_ERROR_RATE] [--workers WORKERS]
[--apply_filter] [--stats] [--markdown] [--target_longest_image_dim TARGET_LONGEST_IMAGE_DIM] [--target_anchor_text_len TARGET_ANCHOR_TEXT_LEN] [--guided_decoding] [--gpu-memory-utilization GPU_MEMORY_UTILIZATION] [--max_model_len MAX_MODEL_LEN]
...
여러분의 프로젝트에 유용할 수 있는 재사용 가능한 코드 조각들이 몇 가지 있습니다:
- ChatGPT 4o를 사용하여 매우 뛰어난 자연어 텍스트 파싱 (Natural Text Parsing)을 수행하기 위한 프롬프팅 전략 - buildsilver.py
- 언어별 기본 필터링 및 SEO 스팸 제거 - filter.py
- Qwen2.5-VL을 위한 SFT 미세 조정 (Finetuning) 코드 - train.py
- GRPO RL 트레이너 - grpo_train.py
- 합성 데이터 생성 (Synthetic data generation) - mine_html_templates.py
- VLLM을 사용하여 미세 조정된 모델로 수백만 개의 PDF 처리 - pipeline.py
- PDF에서 생성된 Dolma 문서 보기 - dolmaviewer.py
olmOCR은 Allen Institute for Artificial Intelligence (AI2)의 지원을 받는 AllenNLP 팀에서 개발 및 유지 관리합니다.
AI2는 영향력 있는 AI 연구 및 엔지니어링을 통해 인류에 기여하는 것을 사명으로 하는 비영리 연구소입니다.
이 코드베이스에 구체적으로 누가 기여했는지 자세히 알아보려면 기여자 (contributors) 페이지를 참조하세요.
olmOCR은 Apache 2.0 라이선스 하에 배포됩니다.
라이선스의 전체 사본은 GitHub에서 확인할 수 있습니다.
olmOCR v1 및 OlmOCR-bench의 경우:
@misc{olmocrbench,
title={{olmOCR: Unlocking Trillions of Tokens in PDFs with Vision Language Models}},
author={Jake Poznanski and Jon Borchardt and Jason Dunkelberger and Regan Huff and Daniel Lin and Aman Rangapur and Christopher Wilhelm and Kyle Lo and Luca Soldaini},
...
olmOCR v2 RL을 이용한 유닛 테스트 보상 (Unit Testing Rewards)의 경우:
@misc{olmocr2,
title={olmOCR 2: Unit Test Rewards for Document OCR},
author={Jake Poznanski and Luca Soldaini and Kyle Lo},
...
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Trending All (daily)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기