GitHub - deepseek-ai/DeepSeek-OCR: Contexts Optical Compression
📥 Model Download | 📄 Paper Link | 📄 Arxiv Paper Link | DeepSeek-OCR: Contexts Optical Compression Explore the boundaries of visual-text compression. Release - [2026/01/27]🚀🚀🚀🚀🚀🚀 We present DeepSeek-OCR2 - [2025/10/23]🚀🚀🚀 DeepSeek-OCR is now
社区作者 · zZz
它解决什么问题
📥 Model Download | 📄 Paper Link | 📄 Arxiv Paper Link |
DeepSeek-OCR: Contexts Optical Compression
Explore the boundaries of visual-text compression.
Release
- [2026/01/27]🚀🚀🚀🚀🚀🚀 We present DeepSeek-OCR2
- [2025/10/23]🚀🚀🚀 DeepSeek-OCR is now officially supported in upstream vLLM . Thanks to the vLLM team for their help.
- [2025/10/20]🚀🚀🚀 We release DeepSeek-OCR, a model to investigate the role of vision encoders from an LLM-centric viewpoint.
Contents
- Install
- vLLM Inference
- Transformers Inference
Install
Our environment is cuda11.8+torch2.6.0.
- Clone this repository and navigate to the DeepSeek-OCR folder
git clone https://github.com/deepseek-ai/DeepSeek-OCR.gitCondaconda create -n deepseek-ocr python=3.12.9 -yconda activate deepseek-ocr- Packages
- download the vllm-0.8.5 whl
pip install torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0 --index-url https://download.pytorch.org/whl/cu118pip install vllm-0.8.5+cu118-cp38-abi3-manylinux1_x86_64.whlpip install -r requirements.txtpip install flash-attn==2.7.3 --no-build-isolationNote: if you want vLLM and transformers codes to run in the same environment, you don't need to worry about this installation error like: vllm 0.8.5+cu118 requires transformers>=4.51.1
vLLM-Inference
- VLLM:
Note: change the INPUT_PATH/OUTPUT_PATH and other settings in the DeepSeek-OCR-master/DeepSeek-OCR-vllm/config.py
cd DeepSeek-OCR-master/DeepSeek-OCR-vllm- image: streaming output
python run_dpsk_ocr_image.py- pdf: concurrency ~2500tokens/s(an A100-40G)
python run_dpsk_ocr_pdf.py- batch eval for benchmarks
python run_dpsk_ocr_eval_batch.py[2025/10/23] The version of upstream vLLM :
uv venvsource .venv/bin/activate
Until v0.11.1 release, you need to install vLLM from nightly build
uv pip install -U vllm --pre --extra-index-url https://wheels.vllm.ai/nightlyfrom vllm import LLM , SamplingParams from vllm . model_executor . models . deepseek_ocr import NGramPerReqLogitsProcessor from PIL import Image
Create model instance
llm = LLM ( model = "deepseek-ai/DeepSeek-OCR" , enable_prefix_caching = False , mm_processor_cache_gb = 0 , logits_processors = [ NGramPerReqLogitsProcessor ] )
Prepare batched input with your image file
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> \n Free 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 , )
Generate output
model_outputs = llm . generate ( model_input , sampling_param )
Print output
for output in model_outputs : print ( output . outputs [ 0 ]. text )
Transformers-Inference
- Transformers
from transformers import AutoModel , AutoTokenizer import torch import os os . environ [ "CUDA_VISIBLE_DEVICES" ] = '0' model_name = 'deepseek-ai/DeepSeek-OCR'
tokenizer = AutoTokenizer . from_pretrained ( model_name , trust_remote_code = True ) model = AutoModel . from_pretrained ( model_name , _attn_implementation = 'flash_attention_2' , trust_remote_code = True , use_safetensors = True ) model = model . eval ().
cuda (). to ( torch . bfloat16 )
prompt = "<image>\nFree OCR. "
prompt = "<image> \n <|grounding|>Convert the document to markdown. " image_file = 'your_image.jpg' output_path = 'your/output/dir'
res = model . infer ( tokenizer , prompt = prompt , image_file = image_file , output_path = output_path , base_size = 1024 , image_size = 640 , crop_mode = True , save_results = True , test_compress = True )
or you can
cd DeepSeek-OCR-master/DeepSeek-OCR-hfpython run_dpsk_ocr.pySupport-Modes
The current open-source model supports the following modes:
- Native resolution:
- Tiny: 512×512 (64 vision tokens)✅
- Small: 640×640 (100 vision tokens)✅
- Base: 1024×1024 (256 vision tokens)✅
- Large: 1280×1280 (400 vision tokens)✅
- Dynamic resolution
- Gundam: n×640×640 + 1×1024×1024 ✅
Prompts examples
document: <image>\n<|grounding|>Convert the document to markdown.
other image: <image>\n<|grounding|>OCR this image.
without layouts: <image>\nFree OCR.
figures in document: <image>\nParse the figure.
general: <image>\nDescribe this image in detail.
rec: <image>\nLocate <|ref|>xxxx<|/ref|> in the image.
'先天下之忧而忧'
Visualizations
Acknowledgement
We would like to thank Vary , GOT-OCR2.0 , MinerU , PaddleOCR , OneChart , Slow Perception for their valuable models and ideas.
We also appreciate the benchmarks: Fox , OminiDocBench .
Citation
@article { wei2025deepseek , title = { DeepSeek-OCR: Contexts Optical Compression } , author = { Wei, Haoran and Sun, Yaofeng and Li, Yukun } , journal = { arXiv preprint arXiv:2510.18234 } , year = { 2025 } }
— 本文由 AI 根据公开来源辅助整理,命令、版本与许可证请在使用前到原始页面复核。
安装 / 开始使用
Install Our environment is cuda11.8+torch2.6.0.
- Install
- vLLM Inference
- Transformers Inference
- Clone this repository and navigate to the DeepSeek-OCR folder
git clone https://github.com/deepseek-ai/DeepSeek-OCR.gitCondaconda create -n deepseek-ocr python=3.12.9 -yconda activate deepseek-ocr- Packages
- download the vllm-0.8.5 whl
pip install torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0 --index-url https://download.pytorch.org/whl/cu118pip install vllm-0.8.5+cu118-cp38-abi3-manylinux1_x86_64.whlpip install -r requirements.txtpip install flash-attn==2.7.3 --no-build-isolationNote: if you want vLLM and transformers codes to run in the same environment, you don't need to worry about this installation error like: vllm 0.8.5+cu118 requires transformers>=4.51.1 vLLM-Inference
Note: change the INPUT_PATH/OUTPUT_PATH and other settings in the DeepSeek-OCR-master/DeepSeek-OCR-vllm/config.py
- VLLM:
cd DeepSeek-OCR-master/DeepSeek-OCR-vllm- image: streaming output
python run_dpsk_ocr_image.py- pdf: concurrency ~2500tokens/s(an A100-40G)
python run_dpsk_ocr_pdf.py- batch eval for benchmarks
python run_dpsk_ocr_eval_batch.py[2025/10/23] The version of upstream vLLM :
uv venvsource .venv/bin/activate
Until v0.11.1 release, you need to install vLLM from nightly build
uv pip install -U vllm --pre --extra-index-url https://wheels.vllm.ai/nightlyfrom vllm import LLM , SamplingParams from vllm . model_executor . models . deepseek_ocr import NGramPerReqLogitsProcessor from PIL import Image
Create model instance
llm = LLM ( model = "deepseek-ai/DeepSeek-OCR" , enable_prefix_caching = False , mm_processor_cache_gb = 0 , logits_processors = [ NGramPerReqLogitsProcessor ] )
Prepare batched input with your image file
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> \n Free 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 , )
Generate output
model_outputs = llm . generate ( model_input , sampling_param )
Print output
for output in model_outputs : print ( output . outputs [ 0 ]. text ) Transformers-Inference
from transformers import AutoModel , AutoTokenizer import torch import os os . environ [ "CUDA_VISIBLE_DEVICES" ] = '0' model_name = 'deepseek-ai/DeepSeek-OCR' tokenizer = AutoTokenizer .
from_pretrained ( model_name , trust_remote_code = True ) model = AutoModel . from_pretrained ( model_name , _attn_implementation = 'flash_attention_2' , trust_remote_code = True , use_safetensors = True ) model = model . eval (). cuda (). to ( torch .
bfloat16 )
- Transformers
prompt = "<image>\nFree OCR. "
prompt = "<image> \n <|grounding|>Convert the document to markdown. " image_file = 'your_image.jpg' output_path = 'your/output/dir' res = model .
infer ( tokenizer , prompt = prompt , image_file = image_file , output_path = output_path , base_size = 1024 , image_size = 640 , crop_mode = True , save_results = True , test_compress = True ) or you can
cd DeepSeek-OCR-master/DeepSeek-OCR-hfpython run_dpsk_ocr.py