DeepSeek-OCR实战(03):本地部署+简单UI测试

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时如果出现问题,可以到githubflash-attention 官方(https://github.com/Dao-AILab/flash-attention/releases)下载对应版本的.whl官方包。

简单来说,FlashAttention(flash-attn)是一个专门用于优化Transformer模型中注意力机制(Attention)计算的库,它能显著提升计算速度并大幅减少GPU显存消耗 。对于像DeepSeek-OCR这样庞大的模型来说,安装它是比较重要的。
如何选择 flash-attn的版本:

  1. 版本文件名中的第一部分(例如 cu118cu122)为 CUDA 版本,本地CUDA版本使用 nvcc --version命令查看(本地为:11.8版本)
  2. 版本文件名中的第二部分(例如 torch2.1torch2.2torch2.3)为 pytorch 版本。本地 pytorch 版本可以通过 pip show torch 命令查看(本地为:2.6.0+cu118)
  3. 版本文件名的第三部分(例如 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

访问页面,上传一个发票图片,此时已经可以正常工作了:

相关推荐
楚识科技21 小时前
OCR 选型实战:字段级准确率怎么算、验收怎么做
ocr
Wang's Blog2 天前
Java框架快速入门: Spring Security+OAuth2之多因子认证与TOTP实战
java·spring·ui
Huanzhi_Lin2 天前
UI业务模块化随笔
ui·mvc·mvp·ecs·ui框架·模块化开发
张彦峰ZYF2 天前
从“全量 OCR”到按页智能路由:pdf-inspector 与企业 PDF 解析架构的工程化重构
人工智能·pdf·ocr·ai agent·pdf-inspector
Quor2 天前
Zorv AI GenUI 技术架构深度解析:从双面设计到安全边界
人工智能·ui·架构
HwJack202 天前
HarmonyOS批量数据与性能优化实战:万条数据入库与不卡 UI 的查询
ui·性能优化·harmonyos
楚识科技2 天前
手写OCR工程接入实录:图像预处理、后处理校验与置信度分层的完整链路
人工智能·计算机视觉·ocr
威斯软科的老司机2 天前
通俗讲解 CNN 图像识别、向量 Embedding、Softmax 概率计算这三块的简化原理
前端·人工智能·ui·数字孪生
web守墓人3 天前
【goed/ui】go开发windows原生应用之Helloworld篇
windows·ui·golang