---
title: "바이두, 긴 문서 한 번에 파싱하는 ‘Unlimited-OCR’ 공개"
published: 2026-06-23T11:35:05.000Z
canonical: https://jeff.news/article/4269
---
# 바이두, 긴 문서 한 번에 파싱하는 ‘Unlimited-OCR’ 공개

바이두가 Deepseek-OCR 계열 아이디어를 확장한 문서 파싱 모델 Unlimited-OCR을 공개했어. 단일 이미지뿐 아니라 여러 페이지 이미지와 PDF를 32768 토큰 컨텍스트로 처리하고, Hugging Face Transformers와 SGLang 기반 OpenAI 호환 API 예제까지 제공하는 실전형 레포에 가까움.

- 바이두가 `Unlimited-OCR`을 공개함 — 목표는 이름 그대로 긴 문서를 한 번에 파싱하는 OCR임
  - 2026년 6월 22일 공개됐고, 6월 23일에는 논문이 arXiv에 올라왔다는 업데이트가 붙음
  - Deepseek-OCR을 한 단계 더 밀어붙이는 프로젝트라고 설명함
  - 모델은 Hugging Face의 `baidu/Unlimited-OCR`로 불러오는 예제가 제공됨

- 이 레포는 단순 데모가 아니라, 로컬 추론부터 API 서버, 배치 처리까지 꽤 실무형으로 정리돼 있음
  - 테스트 환경은 Python 3.12.3, CUDA 12.9 기준
  - 주요 패키지는 `torch==2.10.0`, `torchvision==0.25.0`, `transformers==4.57.1`, `Pillow==12.1.1`, `PyMuPDF==1.27.2.2`
  - 모델은 `bfloat16`으로 로드하고 CUDA에서 실행하는 예제를 제공함

- 단일 이미지는 두 가지 모드로 처리함
  - `gundam` 설정은 `base_size=1024`, `image_size=640`, `crop_mode=True`
  - `base` 설정은 `base_size=1024`, `image_size=1024`, `crop_mode=False`
  - 최대 출력 길이는 `max_length=32768`로 잡혀 있음

- 여러 페이지나 PDF는 `infer_multi` 흐름을 씀
  - 멀티 페이지 입력은 `image_files=['page1.png', 'page2.png', 'page3.png']`처럼 이미지 배열로 넘김
  - PDF는 PyMuPDF로 각 페이지를 300dpi PNG로 변환한 뒤 OCR에 넣는 방식임
  - 멀티 페이지 파싱에서는 `image_size=1024`, `ngram_window=1024` 설정을 사용함

> [!TIP]
> 사내 PDF 자동화에 붙일 생각이면, PDF 원본을 바로 넣는 게 아니라 페이지 이미지를 만든 뒤 멀티 이미지 추론으로 넘기는 구조를 먼저 봐야 함.

- SGLang 서버로 띄우는 경로도 제공됨
  - `python -m sglang.launch_server`로 `baidu/Unlimited-OCR` 모델을 서빙함
  - `--context-length 32768`, `--attention-backend fa3`, `--page-size 1`, `--mem-fraction-static 0.8` 같은 옵션이 예시에 들어감
  - 서버는 `0.0.0.0:10000`에서 OpenAI 호환 API를 받는 형태임

- API 호출 예제는 이미지 파일을 base64 data URL로 감싸서 보냄
  - 요청은 `/v1/chat/completions`로 나가고 `stream=True`를 켬
  - 메시지 content에는 텍스트 프롬프트와 이미지 URL 객체들이 같이 들어감
  - `temperature`는 0으로 고정해서 OCR 결과의 변동성을 줄임

- 반복 출력 방지를 꽤 노골적으로 다룸
  - `DeepseekOCRNoRepeatNGramLogitProcessor`를 커스텀 로짓 프로세서로 사용함
  - `ngram_size`는 35, 단일 이미지는 `window_size=128`, 멀티 페이지는 `window_size=1024` 예제를 둠
  - 긴 문서 OCR에서 같은 문장이나 패턴이 루프처럼 반복되는 문제를 의식한 설계로 보임

- 배치 추론용 `infer.py`도 있음
  - 이미지 디렉터리는 `--image_dir ./examples/images --output_dir ./outputs --concurrency 8 --image_mode gundam` 형태로 실행함
  - PDF도 `--pdf ./examples/document.pdf`로 넘길 수 있음
  - `--model_dir`, `--gpu`, `--server_log` 같은 운영 옵션도 제공됨

---
## 기술 맥락

- 이 프로젝트의 선택은 “OCR을 단발성 이미지 인식이 아니라 긴 문서 파싱 파이프라인으로 다루자”예요. 그래서 단일 이미지, 여러 페이지 이미지, PDF 변환, 서버 서빙, 배치 추론이 한 흐름 안에 들어가 있어요.

- PDF를 바로 모델에 던지지 않고 PyMuPDF로 300dpi 이미지로 바꾸는 이유는 모델 입력이 결국 이미지 기반이기 때문이에요. 문서 파싱 모델 입장에서는 페이지 렌더링 품질이 곧 인식 품질이라, DPI와 페이지 분할이 꽤 중요한 전처리예요.

- SGLang을 붙인 건 운영 형태를 염두에 둔 선택이에요. 연구 코드처럼 함수 호출만 제공하면 앱에 붙이기 어렵지만, OpenAI 호환 API로 띄우면 기존 LLM 호출 코드나 백엔드 워커에서 비교적 쉽게 연결할 수 있거든요.

- 32768 토큰 컨텍스트와 no-repeat n-gram 설정도 긴 문서 때문에 나온 선택이에요. 출력이 길어질수록 모델이 같은 구절을 반복할 위험이 커지니까, 토큰 생성 단계에서 반복을 억제하는 장치를 둔 거예요.

## 핵심 포인트

- Unlimited-OCR은 긴 문서와 다중 페이지 파싱을 겨냥한 OCR 모델임
- 단일 이미지는 gundam/base 두 가지 설정을 지원하고, 멀티 페이지와 PDF는 base 설정을 사용함
- 추론 예제는 Python 3.12.3, CUDA 12.9, torch 2.10.0, transformers 4.57.1 기준으로 안내됨
- SGLang 서버를 띄워 OpenAI 호환 API 형태로 스트리밍 요청을 보낼 수 있음
- 반복 출력을 막기 위해 35-gram 기반 커스텀 로짓 프로세서를 사용함

## 인사이트

OCR은 아직도 사내 문서 자동화, 계약서 파싱, 레거시 PDF 처리에서 꽤 현실적인 병목임. 모델 성능 얘기보다도 PDF를 이미지로 바꾸고, 서버로 띄우고, 배치 추론까지 연결한 예제가 있다는 점이 개발자한테 바로 쓸 만한 포인트임.
