GLM-OCR

GLM-OCR

GLM-OCR은 복잡한 문서 이해를 위한 멀티모달 OCR 모델로, GLM-V 인코더-디코더 아키텍처를 기반으로 해요. Multi-Token Prediction (MTP) 손실과 안정적인 전체 작업 강화 학습(RL)을 도입해 훈련 효율, 인식 정확도, 일반화 능력을 개선했어요.

대규모 이미지-텍스트 데이터로 사전 훈련된 CogViT 비전 인코더, 효율적인 토큰 다운샘플링을 갖춘 경량 크로스모달 커넥터, GLM-0.5B 언어 디코더를 결합했어요. PP-DocLayout-V3 기반의 레이아웃 분석과 병렬 인식이라는 2단계 파이프라인과 함께, 다양한 문서 레이아웃에서 견고하고 고품질의 OCR 성능을 제공해요. OmniDocBench V1.5에서 94.62점으로 전체 1위를 달성했어요.

이 문서는 SGLang으로 GLM-OCR을 배포하고, OCR 이미지 처리와 복잡한 문서 처리, 벤치마크 실행 방법을 설명해요.

원문 페이지에는 하드웨어 플랫폼·배포 옵션(MTP 포함)을 골라 배포 명령을 자동 생성하는 대화형 선택기가 포함되어 있어요. 위키에서는 렌더링되지 않으니 아래 지침을 직접 참고하면 돼요.

출처: 문서

본문

1. 모델 소개

GLM-OCR은 복잡한 문서 이해를 위한 멀티모달 OCR 모델로, GLM-V 인코더-디코더 아키텍처를 기반으로 해요. Multi-Token Prediction (MTP) 손실과 안정적인 전체 작업 강화 학습을 도입해 훈련 효율, 인식 정확도, 일반화 능력을 개선했어요.

이 모델은 대규모 이미지-텍스트 데이터로 사전 훈련된 CogViT 비전 인코더, 효율적인 토큰 다운샘플링을 갖춘 경량 크로스모달 커넥터, GLM-0.5B 언어 디코더를 통합해요. PP-DocLayout-V3 기반의 레이아웃 분석과 병렬 인식이라는 2단계 파이프라인과 함께, GLM-OCR은 다양한 문서 레이아웃에서 견고하고 고품질의 OCR 성능을 제공해요.

하드웨어 지원: NVIDIA B200/H100/H200

주요 특징:

  • 최고 수준의 성능: OmniDocBench V1.5에서 94.62점을 달성해 1위를 기록하고, 수식 인식·표 인식·정보 추출을 포함한 주요 문서 이해 벤치마크에서 SOTA 결과를 제공해요.
  • 실제 시나리오에 최적화: 실용적인 비즈니스 사례에 특별히 최적화되어, 복잡한 표·코드 문서·도장 등 까다로운 레이아웃에서도 안정적이고 정확한 성능을 유지해요.
  • 효율적인 추론: 0.9B 파라미터만으로 vLLM과 SGLang을 통한 배포를 지원해 추론 지연과 계산 비용을 크게 줄여요. 높은 동시성과 엣지 배포에 적합해요.
  • 사용하기 쉬움: 완전한 SDK와 추론 도구체인과 함께 완전히 오픈소스라 한 줄 호출과 기존 시스템으로의 원활한 통합이 가능해요.

자세한 내용은 공식 GLM-OCR 모델 카드를 참고하세요.

2. SGLang 설치

SGLang은 여러 설치 방법을 제공해요. 하드웨어 플랫폼과 요구사항에 맞는 설치 방법을 선택하면 돼요.

설치 안내는 공식 SGLang 설치 가이드를 참고하세요.

3. 모델 배포

이 섹션에서는 하드웨어 플랫폼과 사용 사례에 맞게 최적화된 배포 구성을 제공해요.

3.1 기본 구성

대화형 명령 생성기: 아래 구성 선택기를 사용하면 하드웨어 플랫폼과 배포 옵션에 맞는 배포 명령을 자동으로 생성할 수 있어요. EAGLE 추측 디코딩을 통한 더 빠른 추론을 원하면 선택적으로 MTP(Multi-Token Prediction)를 활성화할 수 있어요.

3.2 구성 팁

  • CUDA IPC 전송: SGLANG_USE_CUDA_IPC_TRANSPORT=1 환경 변수는 멀티모달 특징을 전송하기 위해 CUDA IPC를 활성화하며, TTFT를 크게 개선해요.
  • MTP (Multi-Token Prediction): MTP를 활성화하면 EAGLE 추측 디코딩을 사용해 더 빠르게 추론할 수 있어요. 이 기능은 한 번에 여러 토큰을 예측해 지연 시간을 줄여요.
  • 메모리 관리: 메모리가 제약된 환경에서는 --mem-fraction-static 및/또는 --max-running-requests을 조정해야 할 수 있어요.

4. 모델 호출

4.1 기본 사용법

기본 API 사용법과 요청 예시는 아래를 참고하세요:

4.2 고급 사용법

4.2.1 OCR 이미지 처리

GLM-OCR은 다양한 문서 유형에서 OCR 작업을 지원해요. 기본 예시는 다음과 같아요:

import time
from openai import OpenAI

client = OpenAI(
    api_key="EMPTY",
    base_url="http://localhost:30000/v1",
    timeout=3600
)

messages = [
    {
        "role": "user",
        "content": [
            {
                "type": "image_url",
                "image_url": {
                    "url": "https://ofasys-multimodal-wlcb-3-toshanghai.oss-accelerate.aliyuncs.com/wpf272043/keepme/image/receipt.png"
                }
            },
            {
                "type": "text",
                "text": "Please extract all text from this image."
            }
        ]
    }
]

start = time.time()
response = client.chat.completions.create(
    model="zai-org/GLM-OCR",
    messages=messages,
    max_tokens=2048
)
print(f"Response costs: {time.time() - start:.2f}s")
print(f"Generated text: {response.choices[0].message.content}")

출력 예시:

Response costs: 2.29s
Generated text: CINNAMON SUGAR
1 x 17,000 17,000

SUB TOTAL 17,000

GRAND TOTAL 17,000

CASH IDR 20,000

CHANGE DUE 3,000

4.2.2 복잡한 문서 처리

GLM-OCR은 다음을 포함한 복잡한 문서를 처리하는 데 뛰어나요:

  • 표(Tables): 구조를 보존한 정확한 표 데이터 추출
  • 수식(Formulas): 수학 수식 인식
  • 코드 문서(Code Documents): 스크린샷에서 소스 코드 추출
  • 도장·스탬프(Seals and Stamps): 문서 속 도장·스탬프 인식
  • 다중 레이아웃 문서: 텍스트·이미지·표가 섞인 혼합 콘텐츠
import time
from openai import OpenAI

client = OpenAI(
    api_key="EMPTY",
    base_url="http://localhost:30000/v1",
    timeout=3600
)

# Example: Processing a document with tables
messages = [
    {
        "role": "user",
        "content": [
            {
                "type": "image_url",
                "image_url": {
                    "url": "YOUR_DOCUMENT_IMAGE_URL"
                }
            },
            {
                "type": "text",
                "text": "Please extract the table content from this document and format it as markdown."
            }
        ]
    }
]

response = client.chat.completions.create(
    model="zai-org/GLM-OCR",
    messages=messages,
    max_tokens=4096
)
print(response.choices[0].message.content)

5. 벤치마크

5.1 정확도 벤치마크

표준 벤치마크에서 모델 정확도를 기록해요:

5.1.1 OCRBench 벤치마크

  • 벤치마크 명령
python3 -m lmms_eval \
  --model openai_compatible \
  --model_args "model_version=zai-org/GLM-OCR" \
  --tasks ocrbench \
  --batch_size 128 \
  --log_samples \
  --log_samples_suffix "openai_compatible" \
  --output_path ./logs
  • 테스트 결과
Tasks Version Filter n-shot Metric Value Stderr
ocrbench Yaml none 0 ocrbench_accuracy 0.806 N/A

5.1.2 OmniDocBench V1.5

GLM-OCR은 OmniDocBench V1.5에서 94.62점을 달성해 모든 모델 중 1위를 기록하며, 주요 문서 이해 벤치마크 전반에서 최고 수준의 성능을 입증해요.

더 알아보기 (Learn more)