olmOCR는 AI2가 문서 선형화를 위해 공개한 오픈소스 툴킷입니다. PDF 각 페이지를 이미지로 렌더링하고, 문서용으로 조정된 비전 언어 모델 olmOCR-2가 본문·표·LaTeX 수식을 자연스러운 읽기 순서로 재구성합니다. 이어 YAML 프런트매터를 검사하고 회전 또는 실패 페이지를 재시도한 뒤 Markdown과 Dolma JSONL을 만듭니다. PNG와 JPEG도 받아 논문 코퍼스, 역사 스캔, 검색, RAG 전처리에 사용할 수 있습니다.
하지만 이것은 단순한 글자 인식기가 아닙니다. 전통 OCR이 글자와 좌표에 집중한다면 olmOCR는 다단 읽기 순서를 판단하고 머리말·꼬리말을 제거하며 시각적 표를 텍스트 구조로 다시 씁니다. 언어 모델이 소비하기 좋은 결과를 얻는 대신 생성 위험도 생깁니다. 문장이 자연스러워도 숫자, 부정어, 수식 변수, 표의 행·열 관계가 원본과 같다는 보장은 없습니다. 원본 페이지와 검토 기록을 반드시 보존해야 합니다.
한 페이지가 실제로 거치는 과정
| 단계 | 현재 동작 | 확인할 실패 |
|---|---|---|
| 입력 | PDF, PNG, JPEG를 로컬 또는 workspace에서 처리 | 암호화·손상·초대형 파일과 권리 없는 자료는 별도 차단 |
| 렌더링 | PDF 페이지를 제한된 크기의 PNG로 만들고 필요하면 회전 재시도 | 작은 글자, 흐림, 압축, 오염, 극단적 비율은 증거를 줄임 |
| 재구성 | olmOCR-2가 페이지 이미지에서 자연 순서 본문과 구조 생성 | 누락, 치환, 정규화, 존재하지 않는 내용 보완 가능 |
| 검증/재시도 | 종료 이유, 문맥 길이, YAML 파싱, 회전 신호 검사 | 스키마 통과는 사실 정확성 보장이 아님 |
| 내보내기 | 페이지를 합치고 page span이 있는 Dolma와 선택적 Markdown 저장 | 페이지 간 표·각주·제목·누락 페이지는 문서 수준 검사 필요 |
현재 구현은 페이지별 추론이어서 병렬 처리, 재시도, 이어하기에 유리합니다. 그러나 표 머리글이 앞 페이지에 있고 본문이 다음 페이지로 이어지는 문제까지 자동 해결하지는 않습니다. 페이지 ID, 원본 해시, 실패 목록을 출력과 함께 남겨야 합니다.
검토 시점에도 프로젝트는 활발히 유지되고 있었고 GitHub에서 확인한 최신 안정 버전은 2026년 3월 12일의 v0.4.27입니다. 과거 릴리스에는 긴 큐, 회전, 빈 문서 환각 관련 수정이 포함됐습니다. 이는 긍정적 신호인 동시에 운영에서는 main을 무조건 따라가기보다 고정 버전마다 회귀 평가가 필요하다는 뜻입니다.
앵커 텍스트: 과거 방식과 현재 모델의 경계
저장소의 anchor.py는 pdftotext, PDFium, pypdf로 제한된 양의 PDF 네이티브 텍스트를 뽑을 수 있습니다. 초기 방식은 이 불완전한 텍스트를 페이지 이미지와 함께 VLM에 제공해 문자 복원을 도왔습니다. CLI에는 --target_anchor_text_len가 남아 있지만 도움말은 새 모델에서 쓰지 않는다고 명시합니다. 현재 main의 페이지 요청은 no-anchoring 프롬프트를 사용하고, 모델 처리 실패 시 fallback에 pdftotext를 사용합니다.
따라서 ‘olmOCR는 항상 PDF 앵커를 쓴다’는 설명은 정확하지 않습니다. 앵커링은 역사적·구현상 기법이지 olmOCR-2의 모든 추론 증거가 아닙니다. 그래도 born-digital PDF는 네이티브 추출을 별도로 실행해 VLM 결과와 비교할 가치가 있습니다. 불일치는 인코딩, 읽기 순서, 누락, 환각을 검토할 신호입니다. 이미지 전용 스캔에는 쓸 수 있는 앵커가 없을 수 있습니다.
모델·데이터·평가·라이선스
| 항목 | 공식 근거의 범위 | 해석 |
|---|---|---|
| 초기 학습 mix | 논문은 10만 개가 넘는 크롤링 PDF의 26만 페이지, 그림·손글씨·저품질 스캔 포함 | 다양성이 모든 언어와 서식의 동일한 품질을 증명하지 않음 |
| olmOCR-2 | Qwen2.5-VL-7B-Instruct 기반 7B급 모델, SFT와 검증 가능한 단위 테스트 보상 RL | 가장 큰 개선은 영어 benchmark의 수학·표·다단 영역 |
| olmOCR-Bench | 약 1,400개 단일 페이지 PDF와 7,000개 이상 기계 검증 사실 | 중요한 난제 평가지만 사용자 문서 분포는 아님 |
| 정밀도 | 모델 카드는 실용 추론에 FP8, 추가 미세조정에 BF16 권장 | 양자화 이름만으로 속도·품질·VRAM을 약속할 수 없음 |
| 라이선스 | 도구와 공개 olmOCR-2 가중치는 Apache-2.0, Responsible Use Guidelines도 참조 | 원문서 권리, 의존성, 기반 모델, 용도는 별도 확인 |
저장소 leaderboard를 보편 정확도로 바꾸면 안 됩니다. olmOCR-Bench는 영어·페이지 단위·사실 테스트이고 어려운 범주를 의도적으로 모았습니다. 편집 거리만 보는 것보다 수식 부호나 순서 오류를 잘 드러내지만 한국어 계약서, 세로쓰기, 양식, 의료 기록의 품질을 보장하지 않습니다. 이 글은 임의의 WER나 보편 점수를 만들지 않습니다.
초기 논문에는 2025년 특정 환경의 대규모 비용 실험이 있습니다. 현재 고정 가격이 아닙니다. GPU, 이미지 크기, 재시도, 모델 버전, 공급자 요금이 달라집니다. 날짜와 설정을 기록하고 실패, 저장, 전송, 사람 검토를 포함한 ‘승인 페이지당 비용’을 측정해야 합니다.
설치, 로컬 배치와 원격 추론
python -m venv .venv
source .venv/bin/activate
pip install "olmocr[gpu]"
olmocr ./workspace --markdown --pdfs ./samples/report.pdf
olmocr ./workspace --markdown --workers 2 \
--max_page_retries 3 --pdfs ./incoming/*.pdf
pip install olmocr
olmocr ./workspace --server https://inference.example/v1 \
--api_key "$OLMOCR_API_KEY" \
--model allenai/olmOCR-2-7B-1025-FP8 \
--max_concurrent_requests 8 --markdown --pdfs ./incoming/*.pdf
현재 패키지 메타데이터는 Python 3.11 이상을 요구하며 GPU extra는 Torch, Transformers, vLLM 버전을 고정합니다. README는 7B VLM에 GPU가 필요하다고 설명합니다. 일반 Transformers가 이론적으로 가중치를 메모리에 올릴 수 있다는 이유만으로 CPU-only 운영을 공식 지원 경로처럼 약속하면 안 됩니다. 실제 CUDA 드라이버, GPU, 컨테이너, lockfile로 검증합니다.
로컬 GPU는 승인된 환경 안에서 페이지를 처리할 수 있습니다. OpenAI-compatible 원격 서버는 렌더링된 페이지 자체를 다른 호스트로 보냅니다. 벡터만 보내는 것이 아닙니다. TLS, 인증, 지역, 로그, 보존, DPA, 모델 alias, 동시 요청을 검토하고 API key는 비밀 저장소에 둡니다.
| 배포 | 적합한 경우 | 통제 | 핵심 위험 |
|---|---|---|---|
| 로컬 1 GPU | 민감한 pilot과 중간 queue | 버전 고정, worker/VRAM 제한, 암호화 | CUDA/VRAM 호환, 단일 장애 |
| 내부 multi-GPU | 대규모 승인 batch | 재개 workspace, 병렬 설정, 페이지 manifest | 처리량과 함께 조용한 오류도 확대 |
| 자체 remote | 승인 네트워크의 공유 추론 | TLS, service ID, quota, 본문 log 금지 | 민감 문서 집중 |
| 외부 API | GPU 구매 전 빠른 평가 | DPA, 지역, 보존, 가격, 모델 버전 | 데이터 경계와 요금 변화 |
| AI2 demo | 공개/합성 페이지 체험 | 기밀 금지 | 운영 SLA·privacy 승인이 아님 |
실행 가능한 평가와 배치 승인 절차
- 실패 유형별로 표본을 만든다. 디지털 PDF, 사진, 기울기, 오래된 스캔, 작은 글자, 다단, 수식, 표, 손글씨, 혼합 언어, 빈 페이지, 긴 문서를 포함합니다.
- 페이지 사실을 작성한다. 이름, 날짜, 금액, 부정어, 표 셀 관계, 수식, 필수 문장, 제거할 머리말/꼬리말, 읽기 순서를 표시합니다.
- 두 개 이상의 독립 경로를 실행한다. PDF 네이티브 추출, Tesseract 또는 다른 parser와 비교하고 불일치를 사람 queue로 보냅니다.
- 누락과 환각을 따로 센다. 마이너스 기호 하나나 꾸며낸 문장 하나는 문자 비율은 작아도 의미를 바꿉니다.
- 운영 지표를 잰다. 페이지 latency, retry, 실패, 최대 VRAM, token, 승인 페이지당 비용을 기록합니다.
- manifest를 고정한다. 입력 hash, olmOCR 버전, checkpoint, 정밀도, runtime, render size, retry, 검토 결론을 저장합니다.
- 작은 batch 뒤 확장한다. 실패율, 비정상적으로 짧은 출력, retry 급증에 정지 조건을 둡니다.
- 고위험 필드는 사람이 확인한다. 법률, 의료, 재무, 신원, 수식, 연구 결론을 자동 발행하지 않습니다.
git clone https://github.com/allenai/olmocr.git
cd olmocr
pip install -e ".[bench]"
playwright install chromium
huggingface-cli download --repo-type dataset allenai/olmOCR-bench \
--local-dir ./olmOCR-bench
python -m olmocr.bench.convert olmocr_pipeline --dir ./olmOCR-bench/bench_data
python -m olmocr.bench.benchmark --dir ./olmOCR-bench/bench_data
공식 benchmark는 업그레이드 회귀에 유용합니다. 문자열 존재/부재, 읽기 순서, 표 관계, KaTeX 수식 렌더링을 pass/fail 사실로 검사합니다. bench extra와 Playwright Chromium이 필요합니다. 현재 README에서 지원 runner를 확인하고 변환 뒤 점수를 계산합니다.
별도 비공개 holdout을 만들고 튜닝에 사용한 페이지를 최종 독립 테스트로 재사용하지 마십시오. 오류를 사실, 구조, 순서, 언어, 스캔 품질, 운영 실패로 분류합니다. RAG에서는 chunk가 페이지로 돌아갈 수 있는지, 추출에서는 Markdown 외형이 아니라 JSON/셀 값이 맞는지도 봅니다.
표·수식·스캔·언어·개인정보·환각
표와 수식은 명시적으로 강화된 영역이지만 Markdown/LaTeX 생성과 의미 정확성은 다릅니다. 합계, 행·열, 병합 셀, 위·아래 첨자, 소수점, 천 단위, 음수 기호, 변수를 원본과 대조합니다. 더 깔끔한 표가 값을 조용히 정규화했을 수 있으므로 페이지 링크를 유지합니다.
저해상도와 손상에는 증거 한계가 있습니다. 확대는 사라진 잉크를 되살리지 못하고 VLM은 문맥으로 그럴듯한 단어를 추측할 수 있습니다. 확인 불가 부분은 불확실로 남기고 하위 LLM이 근거 없이 ‘수정’하지 못하게 합니다. 빈 페이지, 중복, 손상, 명령처럼 보이는 문구도 시험합니다.
공식 benchmark는 영어입니다. 다국어 처리가 가능하더라도 모든 문자 체계의 균일한 품질은 증명되지 않았습니다. 한글 옛글자, 세로쓰기, 한자 혼용, 중국어, 일본어, RTL, 희귀 문자, 코드 스위칭을 각자 평가하고 원어민이 검토합니다. 영어 leaderboard에서 한국어 정확도를 추론하지 않습니다.
‘로컬’은 model cache, S3 workspace, log, crash dump, backup, monitoring까지 포함한 구조 주장입니다. 보존 최소화, 암호화, RBAC, 로그 마스킹, 삭제 날짜를 적용합니다. remote endpoint는 전체 페이지 정보를 받으므로 원문서와 같은 민감도로 관리합니다.
YAML 파싱과 정상 finish_reason은 기술 상태일 뿐 사실 검증이 아닙니다. 출력 길이, 금지 구문, 페이지 coverage, 다른 engine과 차이, 핵심 field 규칙으로 문제를 선별하고 고위험 문서는 사람이 원본과 대조합니다.
Marker, Docling, Tesseract, 클라우드 문서 AI 비교
| 선택지 | 적합한 조건 | 출력 강점 | 대가 |
|---|---|---|---|
| olmOCR | LLM/RAG용 자연 순서 텍스트, 수식·표·복잡 layout | Markdown/text와 Dolma | GPU/VLM 운영, 생성 오류, 위치 구조 약함 |
| Marker | 여러 형식, 이미지, 구조 JSON, CPU/MPS/hybrid mode | Markdown, JSON, HTML, chunks | mode별 동작과 code/weight license 별도 확인 |
| Docling | 광범위 형식, 통합 Document, local/air-gap | lossless JSON, Markdown/HTML, 통합 | 선택 pipeline에 따라 품질이 달라지는 큰 stack |
| Tesseract | 결정적 문자 OCR, 좌표, TSV/hOCR, 많은 언어 pack | 문자와 위치 형식 | layout, 표, 수식, 읽기 순서는 추가 구성 |
| Cloud Document AI | managed SLA, form/KV, 분류·분할 | 구조 Document와 전문 processor | 요금, 데이터 경계, vendor schema |
편집 판단: olmOCR는 ‘언어 모델용 페이지 재구성기’로 볼 때 가장 정확합니다. 픽셀 좌표 기반 보존 전사 도구가 아닙니다. 좌표, 결정적 감사, 양식 field, 분류가 필수면 structured OCR/parser나 cloud processor를 우선하고 olmOCR를 두 번째 관점으로 사용합니다.
운영에서는 만능 모델 하나보다 router가 낫습니다. 깨끗한 digital page는 native extraction, 시각적으로 어려운 페이지는 VLM, 핵심 field 또는 두 경로의 충돌은 사람 검토로 보냅니다. 비용과 품질을 함께 통제할 수 있습니다.
자주 묻는 질문
olmOCR는 Tesseract에 LLM을 붙인 것인가요?
아닙니다. Tesseract는 글자 줄과 위치를 반환할 수 있습니다. olmOCR는 전체 페이지에서 자연 순서 텍스트, 표, 수식을 생성합니다. 레이아웃 이해는 넓지만 그럴듯한 오류가 생길 수 있습니다.
현재 olmOCR-2는 PDF anchor를 쓰나요?
main의 새 모델 path는 no-anchoring입니다. CLI도 anchor length를 새 모델에서 쓰지 않는다고 표시합니다. anchor 코드와 pdftotext fallback은 남아 독립 검증에 유용합니다.
클라우드 전송 없이 실행할 수 있나요?
가중치와 의존성을 미리 받고 호환 NVIDIA GPU/vLLM을 쓰면 가능합니다. cache, log, workspace, backup도 확인하십시오. remote server mode는 페이지를 전송합니다.
bounding box를 보존하나요?
주요 출력은 page span이 있는 선형 텍스트이지 word-level 좌표 graph가 아닙니다. 위치가 필수면 Tesseract, Marker JSON, Docling, cloud document AI가 적합합니다.
표와 수식을 바로 사용할 수 있나요?
안 됩니다. 합계, 셀 관계, 부호, 변수, 단위, 병합 셀을 원본과 대조하십시오. 학습상 강점은 개별 사례의 정답 보장이 아닙니다.
어떤 언어를 지원하나요?
다국어 페이지를 처리할 수 있지만 공식 benchmark는 영어입니다. 대상 언어, 문자, 방향, 서식마다 평가하고 공통 정확도를 주장하지 마십시오.
VRAM은 얼마나 필요한가요?
7B급 GPU 모델이며 FP8 실용 추론이 권장됩니다. runtime, image size, context, concurrency 전체에 적용되는 고정 VRAM 수치는 없습니다. 목표 GPU에서 측정하십시오.
AI2 demo에 기밀 문서를 넣어도 되나요?
현재 privacy, retention, terms를 승인하기 전에는 공개 또는 합성 페이지만 쓰십시오. 기밀은 승인된 local 또는 계약 환경에서 처리합니다.
검토한 1차 자료
- AI2 olmOCR repository and README
- Official release history
- olmOCR original paper
- olmOCR 2 paper: unit-test rewards
- olmOCR-2 model card and license
- olmOCR-Bench design and runner
- Official training guide
- Current page pipeline implementation
- Anchor-text implementation
- Python and GPU dependency metadata
- Apache-2.0 project license
- Marker official repository
- Docling official repository
- Tesseract official repository
- Google Cloud Document AI overview
독립 기술 검토: 2026-08-20. 검토 당시 최신 안정 버전은 v0.4.27입니다. 모델 이름, 의존성, API 가격, demo 정책은 바뀔 수 있으므로 운영 전 고정 source와 private test를 다시 확인하십시오.


