DeepSeek-OCR实战是一个系列文章,包含了从基础运行环境搭建到应用接入全过程。本章介绍DeepSeek-OCR如何本地部署

1.创建、激活虚拟环境
前面在《DeepSeek-OCR实战(01):基础运行环境搭建》中已经安装好了 conda :
shell
#创建名为DeepSeek-OCR的虚拟环境,python版本:3.12
(base) conda create -n DeepSeek-OCR python=3.12
#激活虚拟环境
(base) conda activate DeepSeek-OCR
# 接下来会使用pip安装依赖,所以天添加国内加速
(DeepSeek-OCR) pip config set global.index-url https://mirrors.huaweicloud.com/repository/pypi/simple/
2.克隆官方的推理代码安装依赖
shell
# 切换到用户目录
cd ~
# 克隆项目源码
git clone https://github.com/deepseek-ai/DeepSeek-OCR.git
cd ~/DeepSeek-OCR
# 安装依赖
pip install torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0 --index-url https://download.pytorch.org/whl/cu118
pip install vllm==0.8.5
pip install -r requirements.txt
# 安装加速组件(可选但推荐)
pip install flash-attn==2.7.3 --no-build-isolation
注意 :在安装flash-attn==2.7.3时如果出现问题,可以到github 的flash-attention 官方(https://github.com/Dao-AILab/flash-attention/releases)下载对应版本的.whl官方包。
简单来说,FlashAttention(flash-attn)是一个专门用于优化Transformer模型中注意力机制(Attention)计算的库,它能显著提升计算速度并大幅减少GPU显存消耗 。对于像DeepSeek-OCR这样庞大的模型来说,安装它是比较重要的。
如何选择 flash-attn的版本:
- 版本文件名中的第一部分(例如
cu118、cu122)为 CUDA 版本,本地CUDA版本使用nvcc --version命令查看(本地为:11.8版本)- 版本文件名中的第二部分(例如
torch2.1、torch2.2、torch2.3)为 pytorch 版本。本地 pytorch 版本可以通过pip show torch命令查看(本地为:2.6.0+cu118)- 版本文件名的第三部分(例如
cp311-cp311)为 Python 版本,选择本地 Python 版本即可。本地 Python 版本可以通过pip debug命令查看(本地为:3.12)所以这里就应该下载:
flash_attn-2.7.3+cu11torch2.6cxx11abiFALSE-cp312-cp312-linux_x86_64.whl这个版本

下载后,上传到 /home/qy/soft,然后离线安装:
shell
cd ~/soft
pip install flash_attn-2.7.3+cu11torch2.6cxx11abiFALSE-cp312-cp312-linux_x86_64.whl
经过测试, 我得 2080 Ti 显卡不支持 flash_attn,如果你的显卡支持,可以安装它
3.模型下载
可以到魔搭社区下载模型文件
shell
# 安装魔搭社区工具
pip install modelscope
# 创建模型文件存放目录
mkdir -p ~/models/modelscope/deepseek-ai/DeepSeek-OCR
# 下载模型
modelscope download --model 'deepseek-ai/DeepSeek-OCR' --local_dir '/home/qy/models/modelscope/deepseek-ai/DeepSeek-OCR'

我们大概等待几分钟后就看到下载好的模型文件了:

4.模型可视化页面
可以使用huggingface上官方给出的gradio页面模板,它可以快速上手
shell
cd ~
# GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/spaces/merterbak/DeepSeek-OCR-Demo
# 使用镜像站下载
GIT_LFS_SKIP_SMUDGE=1 git clone https://hf-mirror.com/spaces/merterbak/DeepSeek-OCR-Demo
pip install gradio
cd ~/DeepSeek-OCR-Demo
# 在安装依赖之前,需要编辑一下 requirements.txt ,因为它指定了flash_attn 的版本,而这个版本在当前环境不适用,而且它已经安装了,所以需要把版本号去掉
vim requirements.txt
#flash-attn @ https://github.com/Dao-AILab/flash-attention/releases/download/v2.7.3/flash_attn-2.7.3+cu12torch2.6cxx11abiFALSE-cp310-cp310-linux_x86_64.whl
flash-attn
pip install gradio
# 安装依赖
pip install -r requirements.txt
进入 ~/DeepSeek-OCR-Demo 目录,修改其中的web启动代码app.py:
shell
vim ~/DeepSeek-OCR-Demo/app.py
将模型的加载路径改为本地路径 /home/qy/models/modelscope/deepseek-ai/DeepSeek-OCR ,以及lunch加载函数中设置 share=True,server_name='0.0.0.0',server_port=8080
python
#MODEL_NAME = 'deepseek-ai/DeepSeek-OCR'
# 替换成本地模型所在的路径
MODEL_NAME = '/home/qy/models/modelscope/deepseek-ai/DeepSeek-OCR'
...
# 原代码 model = AutoModel.from_pretrained(MODEL_NAME, _attn_implementation='flash_attention_2', torch_dtype=torch.bfloat16, trust_remote_code=True, use_safetensors=True)
# 修改后,由于我的显卡不支持 flash_attention_2 ,所以要去掉
model = AutoModel.from_pretrained(MODEL_NAME, _attn_implementation='eager', torch_dtype=torch.bfloat16, trust_remote_code=True, use_safetensors=True)
...
if __name__ == "__main__":
demo.queue(max_size=20).launch(server_name='0.0.0.0',server_port=8080)
启动脚本:
shell
cd ~/DeepSeek-OCR-Demo
# 启动app.py 的时候报告缺少的包,按照提示安装
pip install gradio spaces
# 启动后,会有一些警告,不过可以忽略
python app.py
访问页面,上传一个发票图片,此时已经可以正常工作了:

