deepseek-ai/DeepSeek-OCR

Successful Practice of Using Docker+VLLM on 4090

Open

#270 opened on Nov 16, 2025

View on GitHub
 (0 comments) (2 reactions) (0 assignees)Python (2,147 forks)auto 404
good first issue

Repository metrics

Stars
 (23,235 stars)
PR merge metrics
 (No merged PRs in 30d)

Description

Dockerfile content:

FROM nvidia/cuda:12.6.3-cudnn-devel-ubuntu22.04
ENV TZ=Asia/Shanghai
ENV DEBIAN_FRONTEND=noninteractive

RUN sed -i 's|http://archive.ubuntu.com/ubuntu/|https://mirrors.tuna.tsinghua.edu.cn/ubuntu/|g' /etc/apt/sources.list && \
    sed -i 's|http://security.ubuntu.com/ubuntu/|https://mirrors.tuna.tsinghua.edu.cn/ubuntu/|g' /etc/apt/sources.list


RUN mkdir -p /tmp/apt-key-gpghome && chmod 1777 /tmp

RUN apt update && apt install -y python3.10 python3.10-dev python3-pip vim curl wget git git-lfs
RUN python3.10 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple rawpy pillow requests
RUN python3.10 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -U vllm --pre --extra-index-url https://wheels.vllm.ai/nightly

vllm_test.py content

from vllm import LLM, SamplingParams
from vllm.model_executor.models.deepseek_ocr import NGramPerReqLogitsProcessor
from PIL import Image

llm = LLM(
    model="DeepSeek-OCR",
    enable_prefix_caching=False,
    mm_processor_cache_gb=0,
    logits_processors=[NGramPerReqLogitsProcessor]
)

image_1 = Image.open("path/to/your/image_1.png").convert("RGB")
image_2 = Image.open("path/to/your/image_2.png").convert("RGB")
prompt = "<image>\nFree OCR."

model_input = [
    {
        "prompt": prompt,
        "multi_modal_data": {"image": image_1}
    },
    {
        "prompt": prompt,
        "multi_modal_data": {"image": image_2}
    }
]

sampling_param = SamplingParams(
            temperature=0.0,
            max_tokens=8192,
            # ngram logit processor args
            extra_args=dict(
                ngram_size=30,
                window_size=90,
                whitelist_token_ids={128821, 128822},  # whitelist: <td>, </td>
            ),
            skip_special_tokens=False,
        )
model_outputs = llm.generate(model_input, sampling_param)
for output in model_outputs:
    print(output.outputs[0].text)

success image

Contributor guide