DeepSeek-OCR 上下文光学压缩详解与本地部署及vLLM推理

1、发布历程

  • 2025/10/23\]🚀🚀🚀 DeepSeek-OCR 现已正式在上游vLLM中得到支持。

🌐 相关链接

2、介绍

2.1 简介

2025年10月20日,DeepSeek-OCR 是由 deepseek-ai 团队开发的一个先进的图像到文本(Image-Text-to-Text)模型。该项目的核心理念是 "上下文光学压缩(Contexts Optical Compression) ",旨在探索视觉-文本压缩技术的前沿。

作为一个多语言(multilingual)模型,DeepSeek-OCR 能够处理包含图像和文本提示的输入,并生成相应的文本输出。根据其模型卡信息,该项目基于 MIT 许可证开源,模型参数量为 30亿(3B),其研究成果已发表在 arXiv 论文DeepSeek-OCR: Contexts Optical Compression (arXiv:2510.18234) 中。该项目在其致谢部分提到了多个有价值的模型和思想来源,包括 Vary、GOT-OCR2.0、MinerU、PaddleOCR 等,这表明它是在借鉴和融合社区现有优秀成果的基础上进行的创新。

2.2 技术范式转变:从字符识别到视觉理解

DeepSeek-OCR与传统OCR的根本区别在于,它放弃了传统的"逐字识别"范式 ,转而采用**"** 全局视觉理解-特征压缩-语义解码" 的全新路径。传统OCR基于字符级拆解,需要将每个字符单独分割处理,导致token消耗过高、显存占用大等问题。

2.3 核心压缩原理:光学上下文压缩技术

2.3.1 视觉token替代文本token

DeepSeek-OCR的核心创新是**"** 光学上下文压缩技术 "。其基本思路是:将文本信息转换为图像形式,利用"一图胜千言"的特性,用少量视觉token来表示大量文本信息(在长上下文领域有极高研究价值)。

🔬 实验证明

  • 当压缩比小于10倍时(即文本token数是视觉token数的10倍以内),模型解码准确率高达97%

  • 即使在20倍压缩率下,准确率仍保持在 60%左右。

2.3.2 双核架构设计

DeepSeek-OCR由两个核心组件构成:

  • DeepEncoder视觉编码模块
    • 采用串联设计:SAM-base(局部特征提取)→ 16倍卷积压缩器 → CLIP-large(全局理解)
    • 能够将1024×1024像素的文档图像从4096个特征区块压缩至256个视觉token
    • 根据文档复杂度自适应调整压缩策略,实现效率与精度的动态平衡
  • DeepSeek-3B-MoE语义解码模块
    • 采用混合专家模型架构,总参数量30亿,每次推理仅激活5.7亿参数
    • 负责从压缩后的视觉token中重建原始文本

2.3.3 技术优势与局限性

  • 实际效能:在具体应用中,单张A100显卡每日可处理超过20万页文档,显存占用量比传统方法降低93.3%,处理速度提升3.2倍。
  • 客观局限性
    • 在超高压缩比(超过30倍)时,关键信息保留率会显著下降
    • 对潦草手写体、低分辨率图像(≤50dpi)等极端场景的适应性仍有待提升
    • 复杂格式的精确还原能力有限

|--------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ​ | ​ |
| ​ | ​ |

3、特点

DeepSeek-OCR 的主要特点可以归纳如下:

  • 先进的模型架构:

    它采用 Image-Text-to-Text 架构,使其不仅仅是一个简单的 OCR 工具,而是一个能够理解上下文提示并执行复杂任务(如根据指令将文档转换为 Markdown)的视觉语言模型。核心在于其 "上下文光学压缩" 技术,旨在高效地处理和压缩视觉文本信息。

  • 多样的配置模式

    :模型提供了多种预设的推理配置,以适应不同的硬件和性能需求,用户可以通过调整 base_size, image_size, crop_mode 等参数来选择:

    • Tiny:

      base_size = 512, image_size = 512, crop_mode = False

    • Small:

      base_size = 640, image_size = 640, crop_mode = False

    • Base:

      base_size = 1024, image_size = 1024, crop_mode = False

    • Large:

      base_size = 1280, image_size = 1280, crop_mode = False

    • Gundam:

      base_size = 1024, image_size = 640, crop_mode = True(此模式启用了图像裁剪,可能适用于特定场景)

  • 高性能推理支持

    支持使用 flash_attention_2 进行注意力计算加速。已获得 vLLM 的官方上游支持,可以利用 vLLM 框架进行高效的模型推理加速和批量处理。

  • 高级推理控制
  • 在 vLLM 中使用时,支持 NGramPerReqLogitsProcessor 逻辑处理器。这允许用户通过设置 n-gram 参数(如 ngram_size, window_size)和白名单 token(whitelist_token_ids)来更精细地控制生成文本的格式和内容,例如在生成表格时强制输出 <td> 标签。

4、安装部署与推理

4.1 安装

我们的环境是 cuda11.8+torch2.6.0。

  1. 克隆此存储库并导航至 DeepSeek-OCR 文件夹

git clone https://github.com/deepseek-ai/DeepSeek-OCR.git

  1. conda

    conda create -n deepseek-ocr python=3.12.9 -yconda activate deepseek-ocr

  2. Packages

  • 下载 vllm-0.8.5whl

    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-isolation

注意: 如果您希望 vLLMtransformers 代码在同一环境下运行,则无需担心类似这样的安装错误:vllm 0.8.5+cu118 需要 transformers>=4.51.1

4.2 vLLM推理

注意:请修改 DeepSeek-OCR-master/DeepSeek-OCR-vllm/config.py 文件中的INPUT_PATH/OUTPUT_PATH 和其他设置。

复制代码
cd DeepSeek-OCR-master/DeepSeek-OCR-vllm# 图像:流输出python run_dpsk_ocr_image.py# pdf:并发量约为 2500tokens/s(A100-40G)python run_dpsk_ocr_pdf.py# 基准测试的批量评估python run_dpsk_ocr_eval_batch.py

[2025/10/23] 上游vLLM 的版本

复制代码
uv venvsource .venv/bin/activate# Until v0.11.1 release, you need to install vLLM from nightly builduv pip install -U vllm --pre --extra-index-url https://wheels.vllm.ai/nightly

from vllm import LLM, SamplingParamsfrom vllm.model_executor.models.deepseek_ocr import NGramPerReqLogitsProcessorfrom PIL import Image# Create model instancellm = LLM(    model="deepseek-ai/DeepSeek-OCR",    enable_prefix_caching=False,    mm_processor_cache_gb=0,    logits_processors=[NGramPerReqLogitsProcessor])# Prepare batched input with your image fileimage_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,)# Generate outputmodel_outputs = llm.generate(model_input, sampling_param)# Print outputfor output in model_outputs:    print(output.outputs[0].text)

4.3 Transformers-推理

  • Transformers

    from transformers import AutoModel, AutoTokenizerimport torchimport osos.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)

或者你可以

复制代码
cd DeepSeek-OCR-master/DeepSeek-OCR-hfpython run_dpsk_ocr.py

4.4 支持模式

当前开源模型支持以下几种模式:

  • 原始分辨率:
    • Tiny: 512×512 (64 vision tokens)✅
    • Small: 640×640 (100 vision tokens)✅
    • Base: 1024×1024 (256 vision tokens)✅
    • Large: 1280×1280 (400 vision tokens)✅
  • 动态分辨率
    • Gundam: n×640×640 + 1×1024×1024 ✅

4.5 提示示例

复制代码
# 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.# '先天下之忧而忧'

更多推荐

相关推荐
东方隐侠安全团队-千里2 小时前
第3节 RSA算法开启公钥加密时代
网络·人工智能·算法
骄傲的心别枯萎2 小时前
RV1126 NO.46:RV1126+OPENCV对视频流进行视频膨胀操作
人工智能·opencv·计算机视觉·音视频·rv1126
视觉AI2 小时前
如何查看 Linux 下正在运行的 Python 程序是哪一个
linux·人工智能·python
算家计算2 小时前
AI也能像人一样拥有长时记忆了!谷歌最新研究攻克AI核心难题
人工智能·机器学习·资讯
笨鸟笃行3 小时前
人工智能备考2.2.1-2.2.5总结
人工智能
shayudiandian3 小时前
代码生成与开发辅助
人工智能
微盛AI企微管家3 小时前
企业微信AI聊天agent:优化企业微信客户运营的推荐工具
大数据·人工智能·微信·企业微信
auutuumn3 小时前
PyTorch深度学习实战01:全流程体验深度学习
人工智能·pytorch·深度学习
量子位3 小时前
机器人“会用手”了!银河通用首破手掌任意朝向旋转难题,拧螺丝、砸钉子样样精通
人工智能·aigc