目标:在本地 GPU 服务器上运行 DeepSeek-OCR,支持图像/PDF 输入,输出结构化 Markdown 或纯文本。
一、环境要求
表格
| 组件 | 要求 |
|---|---|
| OS | Linux(推荐 Ubuntu 22.04+) |
| GPU | NVIDIA A100/A10/L4 等(≥24GB 显存,A100-40G 可跑 PDF 模式) |
| CUDA | ≥11.8 |
| Python | 3.12.9(官方指定) |
| PyTorch | 2.6.0 + cu118 |
| vLLM | 0.8.5(官方提供 wheel) |
| Disk | ≥20GB(模型约 15GB) |
⚠️ 注意:不支持 CPU 推理,必须使用 GPU。
二、环境配置(Conda + 官方依赖)
bash
编辑
<em>1</em><em># 1. 克隆仓库</em><em>2</em>git clone https://github.com/deepseek-ai/DeepSeek-OCR.git<em>3</em>cd DeepSeek-OCR<em>4</em><em>5</em><em># 2. 创建 Conda 环境(Python 3.12.9)</em><em>6</em>conda create -n deepseek-ocr python=3.12.9 -y<em>7</em>conda activate deepseek-ocr<em>8</em><em>9</em><em># 3. 安装 PyTorch(CUDA 11.8)</em><em>10</em>pip install torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0 \<em>11</em> --index-url https://download.pytorch.org/whl/cu118<em>12</em><em>13</em><em># 4. 下载并安装 vLLM 0.8.5(官方提供 wheel)</em><em>14</em><em># 从 https://github.com/vllm-project/vllm/releases/tag/v0.8.5 下载对应 wheel</em><em>15</em>wget https://github.com/vllm-project/vllm/releases/download/v0.8.5/vllm-0.8.5+cu118-cp312-abi3-manylinux1_x86_64.whl<em>16</em>pip install vllm-0.8.5+cu118-cp312-abi3-manylinux1_x86_64.whl<em>17</em><em>18</em><em># 5. 安装其他依赖</em><em>19</em>pip install -r requirements.txt<em>20</em>pip install flash-attn==2.7.3 --no-build-isolation
✅
requirements.txt包含 transformers、Pillow、pdf2image 等。
三、模型下载
模型托管于 Hugging Face:
🔗 模型地址:https://huggingface.co/deepseek-ai/DeepSeek-OCR
自动下载(通过代码)
首次运行推理脚本时会自动从 HF 下载(需登录):
bash
编辑
<em>1</em>huggingface-cli login <em># 输入你的 HF Token(需同意协议)</em>
手动下载(可选)
bash
编辑
<em>1</em>git lfs install<em>2</em>git clone https://huggingface.co/deepseek-ai/DeepSeek-OCR ./models/DeepSeek-OCR
然后在代码中指定 model_name="./models/DeepSeek-OCR"。
四、推理方式选择
DeepSeek-OCR 提供两种后端:
表格
| 方式 | 优点 | 适用场景 |
|---|---|---|
| vLLM | 高吞吐(PDF 达 2500 tokens/s) | 批量处理、生产部署 |
| Transformers | 调试友好、支持 infer() 接口 |
单图测试、结果可视化 |
五、调用示例
方式 1:使用 Transformers(单图测试)
python
编辑
<em>1</em>from transformers import AutoModel, AutoTokenizer<em>2</em>import torch<em>3</em><em>4</em>model_name = "deepseek-ai/DeepSeek-OCR"<em>5</em>tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)<em>6</em>model = AutoModel.from_pretrained(<em>7</em> model_name,<em>8</em> _attn_implementation="flash_attention_2",<em>9</em> trust_remote_code=True,<em>10</em> use_safetensors=True,<em>11</em> torch_dtype=torch.bfloat16<em>12</em>).eval().cuda()<em>13</em><em>14</em><em># 推理</em><em>15</em>result = model.infer(<em>16</em> tokenizer=tokenizer,<em>17</em> prompt="<image>\n<|grounding|>Convert the document to markdown.",<em>18</em> image_file="your_doc.jpg",<em>19</em> output_path="./output",<em>20</em> base_size=1024,<em>21</em> image_size=640,<em>22</em> crop_mode=True,<em>23</em> save_results=True,<em>24</em> test_compress=True<em>25</em>)<em>26</em><em>27</em>print("OCR Result:\n", result["text"])
方式 2:使用 vLLM(高并发)
编辑 DeepSeek-OCR-vllm/config.py 设置路径,然后运行:
bash
编辑
<em>1</em>cd DeepSeek-OCR-vllm<em>2</em>python run_dpsk_ocr_image.py <em># 处理单图</em><em>3</em>python run_dpsk_ocr_pdf.py <em># 处理 PDF(A100-40G 支持)</em>
或直接 API 调用(参考官方 vLLM 示例):
python
编辑
<em>1</em>from vllm import LLM, SamplingParams<em>2</em>from vllm.model_executor.models.deepseek_ocr import NGramPerReqLogitsProcessor<em>3</em>from PIL import Image<em>4</em><em>5</em>llm = LLM(<em>6</em> model="deepseek-ai/DeepSeek-OCR",<em>7</em> enable_prefix_caching=False,<em>8</em> mm_processor_cache_gb=0,<em>9</em> logits_processors=[NGramPerReqLogitsProcessor]<em>10</em>)<em>11</em><em>12</em>image = Image.open("invoice.png").convert("RGB")<em>13</em>prompt = "<image>\n<|grounding|>Convert the document to markdown."<em>14</em><em>15</em>sampling_params = SamplingParams(<em>16</em> temperature=0.0,<em>17</em> max_tokens=8192,<em>18</em> extra_args=dict(<em>19</em> ngram_size=30,<em>20</em> window_size=90,<em>21</em> whitelist_token_ids={128821, 128822} <em># <td>, </td></em><em>22</em> ),<em>23</em> skip_special_tokens=False<em>24</em>)<em>25</em><em>26</em>outputs = llm.generate(<em>27</em> {"prompt": prompt, "multi_modal_data": {"image": image}},<em>28</em> sampling_params<em>29</em>)<em>30</em><em>31</em>print(outputs[0].outputs[0].text)
六、提示词(Prompt)模板
DeepSeek-OCR 使用特殊 token 控制行为:
表格
| 任务 | Prompt |
|---|---|
| 通用 OCR(无布局) | <image>\nFree OCR. |
| 文档转 Markdown | `\n< |
| 表格解析 | <image>\nParse the table in markdown format. |
| 图表理解 | <image>\nParse the figure. |
| 全文描述 | <image>\nDescribe this image in detail. |
| 关键词定位 | `\nLocate < |
✅
<|grounding|>是关键 token,启用 layout-aware 模式。
七、输出示例
输入一张发票图片,输出 Markdown:
markdown
编辑
<em>1</em># 增值税专用发票<em>2</em><em>3</em>| 项目 | 内容 |<em>4</em>|--------------|--------------------------|<em>5</em>| 发票代码 | 144032400110 |<em>6</em>| 发票号码 | 89237465 |<em>7</em>| 开票日期 | 2024年05月01日 |<em>8</em>| 销售方名称 | 深圳市科技有限公司 |<em>9</em>| 金额(不含税)| ¥1,280.00 |<em>10</em><em>11</em>> 备注:此发票仅用于内部报销。
八、Docker 化部署(可选)
虽然官方未提供 Dockerfile,但可自行构建:
dockerfile
编辑
<em>1</em><em># Dockerfile</em><em>2</em>FROM nvidia/cuda:11.8-devel-ubuntu22.04<em>3</em><em>4</em>ENV DEBIAN_FRONTEND=noninteractive<em>5</em>RUN apt update && apt install -y python3.12 python3-pip git wget<em>6</em><em>7</em>WORKDIR /app<em>8</em>COPY . /app<em>9</em><em>10</em>RUN pip install torch==2.6.0+cu118 torchvision==0.21.0+cu118 torchaudio==2.6.0 --extra-index-url https://download.pytorch.org/whl/cu118<em>11</em>RUN pip install vllm-0.8.5+cu118-cp312-abi3-manylinux1_x86_64.whl<em>12</em>RUN pip install -r requirements.txt<em>13</em>RUN pip install flash-attn==2.7.3 --no-build-isolation<em>14</em><em>15</em>EXPOSE 8000<em>16</em>CMD ["python", "DeepSeek-OCR-vllm/run_dpsk_ocr_image.py"]
构建 & 运行:
bash
编辑
<em>1</em>docker build -t deepseek-ocr .<em>2</em>docker run --gpus all -v $(pwd)/input:/input -v $(pwd)/output:/output deepseek-ocr
九、性能与限制
表格
| 模式 | 分辨率 | Vision Tokens | 显存占用 | 速度(A100-40G) |
|---|---|---|---|---|
| Tiny | 512×512 | 64 | ~12GB | 极快 |
| Base | 1024×1024 | 256 | ~20GB | 快 |
| Large | 1280×1280 | 400 | ~28GB | 中 |
| PDF(动态) | Gundam | n×640 + 1×1024 | ~35GB | ~2500 tok/s |
💡 建议:普通文档用
Base模式,表格/复杂布局用Large。
十、参考链接
- GitHub: https://github.com/deepseek-ai/DeepSeek-OCR
- Paper: DeepSeek-OCR: Contexts Optical Compression
- Model: https://huggingface.co/deepseek-ai/DeepSeek-OCR
- vLLM 集成: https://docs.vllm.ai/projects/recipes/en/latest/DeepSeek/DeepSeek-OCR.html
✅ 至此,你已掌握 DeepSeek-OCR 的完整部署链路。该模型在中文票据、学术 PDF、表格重建等场景表现优异,是当前开源 OCR 领域的 SOTA 方案之一。