部署PaddleOCR-VL-1.6的CPU版本!通过Dockerfile在飞牛OS上
1、稀奇古怪的玩法
在部署PaddleOCR-VL-1.5的文章中,有小伙伴提到可以出一期在飞牛NAS上部署的文章吗?答案当然是可以!
这真是非常猎奇的玩法,我从来没有这么干过。有没有打开新世界的门?我不知道。
但是折腾是一刻不停啊,从虚拟机安装飞牛OS,飞牛上的Docker,到Dockerfile创建镜像,再到部署容器,最后到调用接口,整个过程都是乐此不疲。
同时,我也感慨技术更新的速度飞快。刚刚写完PaddleOCR-VL-1.5的文章,就发现PaddleOCR-VL-1.6已经发布。这样的节奏,往好了说是让你在有限的时间里,看到更多的事物,经历更多的事情。就像今天看到的一个视频说,张学良将军出生在清朝末代皇帝时期,经历过时代巨变,听过周杰伦的歌,于《范特西》发布后离世。那往坏了说呢?我就先不说了。
反正在AI程序员的加持下,软件开放的速度是越来越快。我感受到了时空的错乱。
2、NAS和飞牛OS
NAS全拼是Network Attached Storage,即网络附加存储,可以看作是一个私人的云盘。它主要的功能是文件的存储和备份。就事论事来说,我到现在也没有使用过。我还是老模式,个人的数字文件,直接放到移动硬盘中。确实没有非常重要到多备份的情况。有人问了,那电影呢?我还真有两块硬盘存电影,偶尔看看,剩下的直接在线看了。不过啊,要是NAS真的非常方便,我也会考虑考虑。
飞牛 OS(fnOS) 是一个国产的、免费的 NAS 操作系统,除了基本的文件存储和备份功能,它的娱乐软件也很好,像智能影视啊等等。它默认提供了Docker,让你可以做一些更有意思,更脑洞打开的事情,就比如部署PaddleOCR-VL-1.6。
3、PaddleOCR-VL-1.6
通过欠优化区域精炼与渐进式后训练拓展文档解析的边界,这是PaddleOCR-VL-1.6的出场介绍。紧接着,是它的官方介绍:我们推出 PaddleOCR-VL-1.6,这是在 PaddleOCR-VL-1.5 基础上升级的轻量级文档解析模型。PaddleOCR-VL-1.6 引入了一种区域感知的数据优化框架,能够识别前代模型中的薄弱区域,并对这些区域进行有针对性的增强,从而提升监督信号的可靠性。此外,该模型还采用了一种基于精选数据筛选和强化学习的渐进式后训练方案,通过分阶段优化将模型性能推向更高水平。PaddleOCR-VL-1.6 在 OmniDocBench v1.6 上取得了 96.33% 的全新 SOTA 成绩,同时也在 OmniDocBench v1.5 和 Real5-OmniDocBench 上刷新了记录,并在与顶级视觉语言模型(VLM)的对比中展现出强劲竞争力。该模型架构与 PaddleOCR-VL-1.5 完全兼容,支持零成本即插即用迁移。
总结就是,它是从1.5基础上升级来的,比1.5更强,而且无缝升级。
顺便提一下SOTA:State-of-the-Art,直译是艺术的巅峰,在AI领域经常使用,翻译为“最先进的”或者是“当前最高水平”。
4、虚拟机中安装飞牛OS
只是试验性质,所以选择成本最小的方式,虚拟机安装。官网(https://www.fnnas.com/)下载飞牛OS,使用virtualbox安装,给多些资源就好,剩下的就下一步下一步,直到重启后安装完成。出现下面的画面。
此时我面对终端,迅速输入我在虚拟机中设置的账户和密码,确定后得到的都是负反馈-登录不进去。我以为是自己记错了账户和密码,其实不然。因为到现在为止,我们并没有账户和密码。怎么才能有呢?需要在webUI上注册。
这就给虚拟机安装的我添加了麻烦。我关掉虚拟机,在网络设置中,配置端口5666的转发。
简单描述就是虚拟机网络连接方式是“网络地址转换(NAT)”,在“高级”里点击 “端口转发”,增加一条规则,将里面的端口写成5666.
重启虚拟机,依然是刚刚的界面。这时在主机的浏览器中打开:127.0.0.1:5666
飞牛webUI就出现在你的眼前,接下来就配置你的账户和密码。
进入webUI的桌面后,你会发现它跟普通操作系统的桌面非常类似。该有的都有,并且Docker图标也非常显眼的出现在桌面上。
同时,虚拟机终端上,你也可以用刚刚注册的账户和密码登录。比如,我想看看这个Docker是什么版本:
5、Dockerfile构建cpu版本镜像
上一次直接采用了官方的gpu版本的镜像验证了VL-1.5的能力。这一次不同,虚拟机上的飞牛OS没有gpu能力,那就改用cpu方案吧。官方并没有cpu版本的镜像,思考再三,还是自己构建最为妥当。
我的想法是,先用本地的Docker快速验证,导出镜像tar包,飞牛OS中直接导入。岂不美哉?
5.1 Dockerfile设计
在创建镜像前,需要确定好各个依赖软件的版本:
python版本要求在3.9~3.13之间,
PaddlePaddle要求3.2.1及以上,
PaddleOCR-VL基础包paddleocr[doc-parser]>=3.6.0。
基于此,我选择在python:3.10-slim镜像基础上构建。
5.1.1 基础配置和基础软件
FROM m.daocloud.io/docker.io/library/python:3.10-slim# 设置工作目录WORKDIR /app# 设置apt镜像源为清华源RUNsed-i's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/g'/etc/apt/sources.list.d/debian.sources# 设置 pip 镜像源为清华源RUN pip configsetglobal.index-url https://pypi.tuna.tsinghua.edu.cn/simple&&\pip configsetglobal.trusted-host pypi.tuna.tsinghua.edu.cn# 安装运行时必需的系统库RUNapt-getupdate&&apt-getinstall-y--no-install-recommends\libgl1\libglib2.0-0\libgomp1\wget\&&rm-rf/var/lib/apt/lists/*# 1. 升级 pipRUN pipinstall--upgradepip# 2. 安装 PaddlePaddle 3.2.1(CPU版本)# gpu版本只需要:pip install paddlepaddle-gpu==3.2.1 -i https://www.paddlepaddle.org.cn/packages/stable/cu126/RUN pipinstallpaddlepaddle==3.2.1# 3. 安装 PaddleOCR 和 modelscope(魔塔,用来下载模型)RUN pipinstall"paddleocr[doc-parser]>=3.6.0"modelscope5.1.2 下载模型、映射及配置环境变量
# 4. 下载模型# ============================================# 下载 PP-DocLayoutV3 模型# ============================================RUNmkdir-p/paddle_models&&\modelscope download--modelPaddlePaddle/PP-DocLayoutV3\--local_dir/paddle_models/PP-DocLayoutV3# ============================================# 下载 PaddleOCR-VL-1.6 模型# ============================================RUNmkdir-p/paddle_models&&\modelscope download--modelPaddlePaddle/PaddleOCR-VL-1.6\--local_dir/paddle_models/PaddleOCR-VL-1.6# ============================================# 创建软链接到 PaddleX 默认缓存路径# ============================================RUNmkdir-p/root/.paddlex/official_models&&\ln-s/paddle_models/PaddleOCR-VL-1.6 /root/.paddlex/official_models/PaddleOCR-VL-1.6&&\ln-s/paddle_models/PP-DocLayoutV3 /root/.paddlex/official_models/PP-DocLayoutV3# 设置环境变量ENVPADDLEX_HOME=/root/.paddlex CMD["/bin/bash"]Dockerfile写完后,可以直接用docker的build命令来构建,下面作为一个参考:
PS D:\docker\paddleocr-vl-1.6>dockerbuild-tpaddleocr-vl-1.6-cpu:latest-fDockerfile.[+]Building140.3s(12/12)FINISHED当然,用compose是更加方便的一种管理方式。
5.2 docker-compose文件
services: paddleocr-vl-cpu: build:.image: paddleocr-vl-1.6-cpu:latest# 容器的名称container_name: paddleocr-vl-cpu restart: unless-stopped ports: -"8080:8080"stdin_open:truetty:truecommand:["/bin/bash"]启动:镜像的构建,容器的启动一条龙服务
PS D:\docker\paddleocr-vl-1.6>docker-composeup-d--buildPS D:\docker\paddleocr-vl-1.6>dockerps-aCONTAINER IMAGE COMMAND PORTS NAMES paddleocr-vl-1.6-cpu:latest"/bin/bash"0.0.0.0:8080->8080/tcp paddleocr-vl6、测试VL-1.6模型
先来看看构建的镜像大小:
dockder images paddleocr-vl-1.6-cpu:latest7.03GB2.58GB非常大,看起来需要的模型是已经下载了。
我们到内部去看看:
PS D:\docker\paddleocr-vl-1.6>dockerexec-itpaddleocr-vl-cpu /bin/bash root@4b3815e771ff:/app# cdroot@4b3815e771ff:~# cd .paddlex/root@4b3815e771ff:~/.paddlex# cd official_models/root@4b3815e771ff:~/.paddlex/official_models# lsPP-DocLayoutV3 PaddleOCR-VL-1.6可以看到,需要的两个模型都可以找到,那么接下来激动人心的时刻到了,测试那张新闻图片吧。
root@4b3815e771ff:~/.paddlex/official_models# paddleocr doc_parser -i https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/paddleocr_vl_demo.png --pipeline_version v1.6Creating model:('PP-DocLayoutV3', None, None)Model files already exist. Using cached files. To redownload, please delete the directory manually:`/root/.paddlex/official_models/PP-DocLayoutV3`.Creating model:('PaddleOCR-VL-1.6-0.9B', None, None)Model files already exist. Using cached files. To redownload, please delete the directory manually:`/root/.paddlex/official_models/PaddleOCR-VL-1.6`.Bucketed engine_config has no entryforresolved engine'paddle_dynamic';using an empty configforthat engine. Loading configurationfile/root/.paddlex/official_models/PaddleOCR-VL-1.6/config.json Loading weightsfile/root/.paddlex/official_models/PaddleOCR-VL-1.6/model.safetensors[2026/06/13 03:01:40]paddleocr INFO: Processed item0in350333.27198028564ms还是那台PC机:
CPU: i7-13700KF 3.40 GHz
内存:32GB
整个推理过程350秒,5分多钟,这就是CPU版本的PaddleOCR-VL-1.6的推理时间。可以劝退了吧。
7、导出镜像
# 直接导出 tar 文件dockersave-opaddleocr-vl-1.6-cpu.tar paddleocr-vl-1.6-cpu:latest由于没有做压缩,这个tar文件在2.4GB大小。
8、飞牛OS导入镜像
在飞牛webUI的文件管理应用中,将上面的tar包上传到飞牛OS的文件系统中。
接下来准备导入。
但是在飞牛webUI的Docker页面,我并没有找到导入镜像的功能。怎么办?我准备试试用终端。
# 从 tar 导入dockerload-ipaddleocr-vl-1.6-cpu.tar9、创建容器
这次回到飞牛webUI的Docker页面,点击创建容器。
10、进入容器终端执行文档识别
在容器列表中找到 paddleocr-vl-cpu
点击右侧的终端图标(或“详情”→“控制台”)
在容器中执行文档识别命令:
paddleocr doc_parser-ihttps://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/paddleocr_vl_demo.png--pipeline_versionv1.6--output_dir./output这个虚拟机是在笔记本电脑上,分配了16GB内存,CPU给了6核,推理时间就更加惨不忍睹。简直就是不可用。
操作视频见同名视频号或公众号。
11、写在后面
折腾了一圈,得出一个结论:CPU部署PaddleOCR-VL-1.6模型,推理时间太长了,不能接受。
有什么收获呢?
最主要的,我们用Dockerfile构建了一个镜像,只需要稍加改动paddlepaddle版本,就可以既支持cpu又支持gpu。这个镜像我上传到云盘了,在公众号菜单可以找到。使用上面的Dockerfile和docker-compose文件,你可以构建自己的镜像。
其次,认识了飞牛OS。后面可以做网络穿透后,真正用作自己的NAS。
就这样,折腾不易,给个赞点个关注再走!
另外,要是有其他好玩的,评论区告诉我,大家一起折腾!
参考
- https://help.fnnas.com/articles/v1/start/install-os
- https://github.com/ophub/fnnas
- https://www.paddleocr.ai/main/version3.x/algorithm/PaddleOCR-VL/PaddleOCR-VL-1.6.html
- https://www.modelscope.cn/models/PaddlePaddle/PaddleOCR-VL-1.6
- https://www.modelscope.cn/models/PaddlePaddle/PP-DocLayoutV3