DeepSeek-OCR-2

DeepSeek-OCR-2

이 문서는 DeepSeek의 차세대 OCR(광학 문자 인식) 모델인 DeepSeek-OCR-2를 SGLang으로 배포하고 호출하는 방법을 설명해요. DeepSeek-OCR의 후속 모델로 정확도와 폭넓은 문서 이해 능력이 개선되었어요. 원문 페이지에는 하드웨어 플랫폼, 양자화 방법, 배포 전략을 골라 명령을 자동 생성해 주는 대화형 선택기(Interactive Command Generator)가 포함되어 있어요.

출처: 문서

본문

1. 모델 소개

DeepSeek-OCR-2는 DeepSeek의 차세대 OCR 모델로, DeepSeek-OCR을 기반으로 정확도와 더 폭넓은 문서 이해 능력을 개선했어요. 다양한 문서 유형과 형식에 걸쳐 이미지에서 높은 정확도로 텍스트를 추출하도록 최적화되어 있어요.

주요 특징:

  • 의미 인지 시각 인코딩 (Semantic-Aware Visual Encoding, DeepEncoder V2): DeepSeek-OCR-2는 DeepEncoder V2를 도입해 고정된 래스터 스캔 방식 대신 더 인간답고 의미 중심적인 방식으로 문서 읽기 순서를 모델링해요. 이는 복잡한 레이아웃(예: 다중 컬럼 문서)에서 논리적 읽기 흐름을 크게 개선해요.
  • 더 강력한 레이아웃·구조 이해 (Stronger Layout and Structural Understanding): 표, 양식, 밀집된 다중 컬럼 페이지 같은 구조화 문서에서 개선된 성능을 보여줘요. 읽기 순서 오류를 줄이고 전반적인 문서 파싱 견고성을 이전 버전보다 향상시켜요.
  • 토큰 효율을 유지하며 정확도 향상 (Improved Accuracy While Maintaining Token Efficiency): 기존 DeepSeek-OCR은 공격적인 시각 토큰 압축을 강조했어요. OCR-2는 높은 토큰 효율을 유지하면서도 특히 문서 수준 이해 작업에서 더 높은 벤치마크 성능을 제공해요.
  • 복잡한 문서 작업 전반의 더 나은 일반화 (Better Generalization Across Complex Document Tasks): DeepSeek-OCR-2는 다국어 문서, 구조화 데이터 추출, 시각적으로 복잡한 콘텐츠에서 더 일관된 성능을 보여줘, 단순 텍스트 OCR을 넘어선 실제 문서 인텔리전스 시나리오에 더 적합해요.

사용 가능한 모델:

라이선스: DeepSeek-OCR-2를 사용하려면 DeepSeek 커뮤니티 라이선스에 동의해야 해요. 자세한 내용은 LICENSE를 참고하세요.

자세한 내용은 공식 DeepSeek-OCR-2 저장소를 참고하세요.

2. SGLang 설치

설치 지침은 공식 SGLang 설치 가이드를 참고하세요.

3. 모델 배포

이 섹션은 서로 다른 하드웨어 플랫폼과 사용 사례에 최적화된 배포 설정을 제공해요.

3.1 기본 설정

DeepSeek-OCR-2 시리즈는 다양한 크기와 아키텍처의 모델을 제공하며, NVIDIA GPU, AMD GPU, Intel Arc Pro B-Series GPU(코드명: BMG (Battlemage)), Intel Xeon CPU 등 다양한 하드웨어 플랫폼에 최적화되어 있어요. 권장 실행 설정은 하드웨어와 모델 크기에 따라 달라져요.

대화형 명령 생성기 (Interactive Command Generator): 아래 설정 선택기를 사용해 하드웨어 플랫폼, 양자화 방법, 배포 전략에 맞는 배포 명령을 자동으로 생성할 수 있어요. SGLang은 NVIDIA H200과 B200, AMD MI300X, MI355X, MI325X GPU, Intel Arc Pro B-Series GPU, 그리고 Intel Xeon CPU에서 DeepSeek-OCR-2 서빙을 지원해요. (대화형 위젯은 원문 페이지에서 동작하므로, 기본 설정 기준 명령은 다음과 같아요.)

sglang serve \
  --model-path deepseek-ai/DeepSeek-OCR-2 \
  --enable-multimodal \
  --host 0.0.0.0 \
  --port 30000

참고: DeepSeek-OCR-2는 약 30억(3B) 개의 파라미터를 가져 최신 단일 GPU에 쉽게 들어가요. 저지연 서빙에는 모델 병렬화가 필요 없어요. 높은 처리량이 필요하면 SGLang Model Gateway와 함께 데이터 병렬화를 고려하세요 — 자세한 내용은 DP, DPA and SGLang DP Router를 참고하세요.

3.2 설정 팁

  • 단일 GPU 배포 (Single GPU Deployment): DeepSeek-OCR-2 (약 30억 파라미터)는 최신 단일 GPU에 들어가요 — 저지연 서빙에는 텐서 병렬화가 필요 없어요.
  • 높은 처리량 (High Throughput): 높은 처리량 시나리오에서는 SGLang Model Gateway와 함께 데이터 병렬화를 사용하세요. DP, DPA and SGLang DP Router를 참고하세요.
  • NCCL 타임아웃: 모델 로딩이 느리면 --dist-timeout 3600을 늘리세요.
  • Xeon CPU 서비스 설정: SGLang CPU 서버 문서의 서빙 엔진 실행 부분에 있는 Notes 항목을 참고해 인자, 특히 NUMA 바인딩 설정을 이해하세요.

4. 모델 호출

4.1 기본 사용법

OpenAI 호환 요청 예시

import requests

url = "http://localhost:30000/v1/chat/completions"

data = {
    "model": "deepseek-ai/DeepSeek-OCR-2",
    "messages": [
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "<image>\n<|grounding|>Convert the document to markdown."},
                {"type": "image_url", "image_url": {"url": "https://example.com/your_image.jpg"}},
            ],
        }
    ],
    "max_tokens": 512,
}

response = requests.post(url, json=data)
print(response.text)

참고 자료

4.2 권장 프롬프트

다음 프롬프트는 공식 모델 카드에서 권장하는 것이에요.

구조화 문서 변환 — 레이아웃을 보존하며 텍스트 추출:

<image>
<|grounding|>Convert the document to markdown.

자유 형식 OCR (Free-form OCR) — 레이아웃 없이 추출:

<image>
Free OCR.

5. 벤치마크

5.1 속도 벤치마크

테스트 환경:

  • 하드웨어: NVIDIA H200 GPU (1x)
  • 모델: DeepSeek-OCR-2
  • 텐서 병렬화(Tensor Parallelism): 1
  • sglang 버전: 0.0.0.dev1+g93fca0bbc

ShareGPT_Vicuna_unfiltered 데이터셋에 대해 성능 평가를 수행했어요. 이 데이터셋은 실제 대화 데이터를 포함해 실제 사용 시나리오의 성능을 더 잘 반영해요. 실제 사용 패턴을 시뮬레이션하기 위해 각 요청을 1024개의 입력 토큰과 1024개의 출력 토큰으로 구성했어요. 평가 수행 방법에 대한 자세한 내용은 Evaluating New Models with SGLang을 참고하세요.

5.1.1 지연 시간 민감 벤치마크

  • 모델 배포 명령:
sglang serve \
  --model-path deepseek-ai/DeepSeek-OCR-2 \
  --enable-multimodal \
  --host 0.0.0.0 \
  --port 30000
  • 벤치마크 명령:
python3 -m sglang.bench_serving \
  --backend sglang \
  --host 0.0.0.0 \
  --port 30000 \
  --model deepseek-ai/DeepSeek-OCR-2 \
  --random-input-len 1024 \
  --random-output-len 1024 \
  --num-prompts 10 \
  --max-concurrency 1
  • 테스트 결과:
============ Serving Benchmark Result ============
Backend:                                 sglang
Traffic request rate:                    inf
Max request concurrency:                 1
Successful requests:                     10
Benchmark duration (s):                  3.54
Total input tokens:                      1972
Total input text tokens:                 1972
Total generated tokens:                  2784
Total generated tokens (retokenized):    2710
Request throughput (req/s):              2.83
Input token throughput (tok/s):          557.53
Output token throughput (tok/s):         787.10
Peak output token throughput (tok/s):    818.00
Peak concurrent requests:                5
Total token throughput (tok/s):          1344.63
Concurrency:                             1.00
----------------End-to-End Latency----------------
Mean E2E Latency (ms):                   352.69
Median E2E Latency (ms):                 392.34
P90 E2E Latency (ms):                    540.64
P99 E2E Latency (ms):                    639.01
---------------Time to First Token----------------
Mean TTFT (ms):                          18.08
Median TTFT (ms):                        16.57
P99 TTFT (ms):                           25.67
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          1.18
Median TPOT (ms):                        1.21
P99 TPOT (ms):                           1.22
---------------Inter-Token Latency----------------
Mean ITL (ms):                           1.21
Median ITL (ms):                         1.21
P95 ITL (ms):                            1.28
P99 ITL (ms):                            1.44
Max ITL (ms):                            4.32
==================================================

5.1.2 처리량 민감 벤치마크

  • 모델 배포 명령:
sglang serve \
  --model-path deepseek-ai/DeepSeek-OCR-2 \
  --enable-multimodal \
  --tp 1 \
  --ep 1 \
  --dp 1 \
  --enable-dp-attention \
  --host 0.0.0.0 \
  --port 30000
  • 벤치마크 명령:
python3 -m sglang.bench_serving \
  --backend sglang \
  --host 0.0.0.0 \
  --port 30000 \
  --model deepseek-ai/DeepSeek-OCR-2 \
  --random-input-len 1024 \
  --random-output-len 1024 \
  --num-prompts 1000 \
  --max-concurrency 100
  • 테스트 결과:
============ Serving Benchmark Result ============
Backend:                                 sglang
Traffic request rate:                    inf
Max request concurrency:                 100
Successful requests:                     1000
Benchmark duration (s):                  14.79
Total input tokens:                      301698
Total input text tokens:                 301698
Total generated tokens:                  188375
Total generated tokens (retokenized):    185236
Request throughput (req/s):              67.63
Input token throughput (tok/s):          20402.54
Output token throughput (tok/s):         12738.99
Peak output token throughput (tok/s):    17508.00
Peak concurrent requests:                187
Total token throughput (tok/s):          33141.53
Concurrency:                             86.87
----------------End-to-End Latency----------------
Mean E2E Latency (ms):                   1284.50
Median E2E Latency (ms):                 866.07
P90 E2E Latency (ms):                    3027.32
P99 E2E Latency (ms):                    5490.63
---------------Time to First Token----------------
Mean TTFT (ms):                          86.08
Median TTFT (ms):                        50.09
P99 TTFT (ms):                           613.92
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          7.79
Median TPOT (ms):                        6.54
P99 TPOT (ms):                           50.10
---------------Inter-Token Latency----------------
Mean ITL (ms):                           6.42
Median ITL (ms):                         4.64
P95 ITL (ms):                            23.65
P99 ITL (ms):                            39.62
Max ITL (ms):                            452.65
==================================================