DeepSeek-OCR

DeepSeek-OCR

이 문서는 DeepSeek의 고급 OCR(광학 문자 인식) 모델인 DeepSeek-OCR을 SGLang으로 배포하고 호출하는 방법을 설명해요. 이미지에서 높은 정확도로 텍스트를 추출하며, 다양한 문서 처리 및 이미지-텍스트 변환 작업에 최적화되어 있어요. 원문 페이지에는 하드웨어 플랫폼, 양자화 방법, 배포 전략을 골라 명령을 자동 생성해 주는 대화형 선택기(Interactive Command Generator)가 포함되어 있어요.

출처: 문서

본문

1. 모델 소개

DeepSeek-OCR은 이미지에서 높은 정확도로 텍스트를 추출하도록 설계된 DeepSeek의 고급 OCR(광학 문자 인식) 모델이에요. 다양한 문서 처리와 이미지-텍스트 변환 작업에 최적화되어 있어요.

주요 특징:

  • 고급 OCR (Advanced OCR): 이미지와 문서에서 높은 정확도의 텍스트 인식
  • 멀티 모달 (Multi-Modality): 다양한 이미지 형식과 문서 유형 지원

사용 가능한 모델:

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

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

2. SGLang 설치

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

SGLang CPU 설치는 CPU 버전 설치 가이드를 참고하세요.

3. 모델 배포

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

3.1 기본 설정

대화형 명령 생성기 (Interactive Command Generator): 아래 설정 선택기를 사용해 하드웨어 플랫폼, 양자화 방법, 배포 전략에 맞는 적절한 배포 명령을 자동으로 생성할 수 있어요. (대화형 위젯은 원문 페이지에서 동작하므로, 기본 설정 기준 명령은 다음과 같아요.)

python3 -m sglang.launch_server \
  --model-path deepseek-ai/DeepSeek-OCR \
  --dtype float16 \
  --tp 1

4. 모델 호출

4.1 기본 사용법

기본 API 사용법과 요청 예시는 다음을 참고하세요:

4.2 OCR 전용 프롬프트

DeepSeek-OCR은 모델 카드에서 권장하는 프롬프트를 받아들여요:

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

OpenAI 호환 이미지 요청 예시:

import requests

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

data = {
    "model": "deepseek-ai/DeepSeek-OCR",
    "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)

5. 벤치마크

5.1 속도 벤치마크

테스트 환경:

  • 하드웨어: AMD MI300X GPU (1x)
  • 모델: DeepSeek-OCR
  • 텐서 병렬화(Tensor Parallelism): 1
  • sglang 버전: 0.5.7

ShareGPT_Vicuna_unfiltered 데이터셋에 대해 성능 평가를 수행했어요. 이 데이터셋은 실제 대화 데이터를 포함해 실제 사용 시나리오의 성능을 더 잘 반영해요. 실제 사용 패턴을 시뮬레이션하기 위해 각 요청을 1024개의 입력 토큰과 1024개의 출력 토큰으로 구성했어요. 이는 상세한 응답을 가진 전형적인 중간 길이 대화를 나타내요.

5.1.1 지연 시간 민감 벤치마크

  • 모델 배포 명령:
python3 -m sglang.launch_server \
  --model-path deepseek-ai/DeepSeek-OCR \
  --tp 1 \
  --dtype float16 \
  --trust-remote-code \
  --host 0.0.0.0 \
  --port 8000
  • 벤치마크 명령:
python3 -m sglang.bench_serving \
  --backend sglang \
  --host 127.0.0.1 \
  --port 8000 \
  --model deepseek-ai/DeepSeek-OCR \
  --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):                  4.45
Total input tokens:                      1972
Total input text tokens:                 1972
Total input vision tokens:               0
Total generated tokens:                  2784
Total generated tokens (retokenized):    2770
Request throughput (req/s):              2.25
Input token throughput (tok/s):          442.89
Output token throughput (tok/s):         625.26
Peak output token throughput (tok/s):    635.00
Peak concurrent requests:                4
Total token throughput (tok/s):          1068.16
Concurrency:                             1.00
----------------End-to-End Latency----------------
Mean E2E Latency (ms):                   443.32
Median E2E Latency (ms):                 493.29
---------------Time to First Token----------------
Mean TTFT (ms):                          21.59
Median TTFT (ms):                        20.89
P99 TTFT (ms):                           24.81
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          1.47
Median TPOT (ms):                        1.52
P99 TPOT (ms):                           1.53
---------------Inter-Token Latency----------------
Mean ITL (ms):                           1.52
Median ITL (ms):                         1.51
P95 ITL (ms):                            1.76
P99 ITL (ms):                            1.93
Max ITL (ms):                            8.28
==================================================

5.1.2 처리량 민감 벤치마크

  • 모델 배포 명령:
python3 -m sglang.launch_server \
  --model-path deepseek-ai/DeepSeek-OCR \
  --tp 1 \
  --ep 1 \
  --dp 1 \
  --enable-dp-attention \
  --dtype float16 \
  --host 0.0.0.0 \
  --port 8000
  • 벤치마크 명령:
python3 -m sglang.bench_serving \
  --backend sglang \
  --host 127.0.0.1 \
  --port 8000 \
  --model deepseek-ai/DeepSeek-OCR \
  --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):                  16.24
Total input tokens:                      301698
Total input text tokens:                 301698
Total input vision tokens:               0
Total generated tokens:                  188375
Total generated tokens (retokenized):    186927
Request throughput (req/s):              61.59
Input token throughput (tok/s):          18582.90
Output token throughput (tok/s):         11602.84
Peak output token throughput (tok/s):    15479.00
Peak concurrent requests:                179
Total token throughput (tok/s):          30185.75
Concurrency:                             85.53
----------------End-to-End Latency----------------
Mean E2E Latency (ms):                   1388.60
Median E2E Latency (ms):                 901.43
---------------Time to First Token----------------
Mean TTFT (ms):                          73.36
Median TTFT (ms):                        50.21
P99 TTFT (ms):                           349.53
-----Time per Output Token (excl. 1st token)------
Mean TPOT (ms):                          7.42
Median TPOT (ms):                        7.31
P99 TPOT (ms):                           27.99
---------------Inter-Token Latency----------------
Mean ITL (ms):                           7.04
Median ITL (ms):                         4.62
P95 ITL (ms):                            21.11
P99 ITL (ms):                            36.92
Max ITL (ms):                            172.15
==================================================