-
Notifications
You must be signed in to change notification settings - Fork 91
Description
PPOCRLabel Docker VNC解决方案
硬件
Nvidia显卡
系统及软件
Ubuntu20.04 (其他版本应该也可以)
NVIDIA显卡驱动:宿主机执行 nvidia-smi,右上角支持的最高CUDA版本要大于11.8
Docker内需能正常使用NVIDIA显卡,即执行 nvidia-smi命令,可以正常输出
基础镜像
gezp/ubuntu-desktop:22.04-cu11.8.0
参考:https://github.com/gezp/docker-ubuntu-desktop
容器启动命令
参考链接:gezp/docker-ubuntu-desktop#32 (comment)
docker run -d --restart=on-failure --name LabelWorkspace --gpus all --shm-size=1024m -e USER=ubuntu -e PASSWORD=ubuntu --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -e GID=$(id -g) -e UID=$(id -u) -e REMOTE_DESKTOP=kasmvnc -p 10022:22 -p 14000:4000 -p 15000:5000 -v /label_workspace:/mnt gezp/ubuntu-desktop:22.04-cu11.8.0
注:--cap-add=SYS_PTRACE --security-opt seccomp=unconfined 如果宿主机ubuntu版本低于容器ubuntu版本需添加此参数,不加此参数进入VNC会黑屏;且使用 -v参数挂载时,需使用容器已存在的目录,如 /mnt,不能是 /home/ubuntu/my_data路径
进入容器VNC桌面
内网内的电脑,使用浏览器登录 IP加端口号,如 10.0.32.88:14000,本机直接浏览器登录 127.0.0.1:14000即可,输入用户名(ubuntu)、密码(ubuntu)
**注:**推荐谷歌浏览器,主要是谷歌浏览器可以允许VNC内外剪切板共通
后续步骤皆为容器VNC桌面内操作
关于显卡的前置操作
此步骤视情况选择是否进行,如果打开命令行,执行 nvidia-smi,提示错误,则执行以下操作
参考链接:https://cloud.tencent.com/developer/ask/sof/107471663
查看宿主机显卡设备所在的组
ls -l /dev/nvidia*
输出:
crw-rw---- 1 root vglusers 195, 0 12月 25 08:06 /dev/nvidia0
crw-rw---- 1 root vglusers 195, 255 12月 25 08:06 /dev/nvidiactl
crw-rw---- 1 root vglusers 195, 254 12月 25 08:06 /dev/nvidia-modeset
crw-rw-rw- 1 root root 508, 0 12月 25 08:06 /dev/nvidia-uvm
crw-rw-rw- 1 root root 508, 1 12月 25 08:06 /dev/nvidia-uvm-tools
可以看到是属于root组和vglusers组,然后查看容器内显卡所在的组
ls -l /dev/nvidia*
输出:
crw-rw---- 1 root 1002 195, 0 Dec 25 00:06 /dev/nvidia0
crw-rw---- 1 root 1002 195, 255 Dec 25 00:06 /dev/nvidiactl
crw-rw---- 1 root 1002 195, 254 Dec 25 00:06 /dev/nvidia-modeset
crw-rw-rw- 1 root root 508, 0 Dec 25 00:06 /dev/nvidia-uvm
与宿主机的输出一一对应,可以发现,vglusers就是容器内id为1002的组,但是执行
getent group | grep 1002 or getent group | grep vglusers
可以发现,容器内并没有vglusers这个组
那我们就自己手动创建vglusers组:
sudo groupadd -g 1002 vglusers
然后将当前用户加入到该组内:
sudo usermod -aG vglusers $USER
再更新:
newgrp vglusers
现在以非普通非root用户执行 nvidia-smi就可以正常输出了
同时查看
cat /etc/group | grep vglusers
也可以发现当前用户在vglusers组内,容器内执行 ls -l /dev/nvidia*也与宿主机的输出一致
安装PPOCRLabel
安装Miniconda
mkdir ~/miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
rm ~/miniconda3/miniconda.sh
source ~/miniconda3/bin/activate
conda init --all
conda换源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
conda config --show channels
创建ppocrlabel环境
conda create -n ppocrlabel python=3.9
激活ppocrlabel环境
conda activate ppocrlabel
安装paddlepaddle-gpu
python -m pip install paddlepaddle-gpu==3.2.0 -i https://www.paddlepaddle.org.cn/packages/stable/cu118/
安装paddleocr
pip install paddleocr==3.2.0 -i https://pypi.doubanio.com/simple/
安装PyQt5
pip install PyQt5 -i https://pypi.doubanio.com/simple/
源码安装ppocr
git clone https://github.com/PFCCLab/PPOCRLabel.git
后续操作需要在PPOCRLabel文件夹内执行
cd PPOCRLabel
打开 pyproject.toml,在 [project] 下删除以下两行后保存并关闭:
参考链接:#188 (comment)
"pyqt5"
"paddleocr>=3.0.2"
安装 PPOCRLabel 依赖
pip install -e . -i https://pypi.doubanio.com/simple/
安装paddle[ocr]模块
pip install einops -i https://pypi.doubanio.com/simple/
pip install paddlex[ocr]==3.2.1 -i https://pypi.doubanio.com/simple/
重新安装OpenCV
pip uninstall opencv-contrib-python-headless opencv-python-headless opencv-contrib-python opencv-python
pip install opencv-python-headless==4.10.0.84 opencv-contrib-python-headless==4.10.0.84 -i https://pypi.doubanio.com/simple/
修改PaddleX中对OpenCV包的检查:
参考链接:#188 (comment)
PaddleX依赖的是 opencv-python,非 opencv-python-headless
编辑 /home/ubuntu/miniconda3/envs/ppocrlabel/lib/python3.9/site-packages/paddlex/utils/deps.py
在 is_dep_available的头部增加:
def is_dep_available(dep, /, check_version=None):
# Currently for several special deps we check if the import packages exist.
if "opencv" in dep: # <------------增加该判断
return True #
...
指定Qt路径
export QT_QPA_PLATFORM_PLUGIN_PATH=/home/ubuntu/miniconda3/envs/ppocrlabel/lib/python3.9/site-packages/PyQt5/Qt5/plugins/platforms
安装Qt相关依赖
sudo apt-get update
sudo apt-get install libxcb1 libxcb1-dev libx11-xcb1 libx11-xcb-dev libxcb-keysyms1 libxcb-keysyms0-dev libxcb-image0 libxcb-image0-dev libxcb-shm0 libxcb-shm0-dev libxcb-icccm4 libxcb-icccm4-dev libxcb-sync1 libxcb-sync-dev libxcb-render-util0 libxcb-render-util0-dev libxcb-xfixes0-dev libxrender-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-glx0-dev
sudo apt-get install libgl1-mesa-glx libgtk2.0-0
sudo apt install --reinstall qtbase5-dev qtdeclarative5-dev qtmultimedia5-dev
启动PPOCRLabel
python PPOCRLabel.py
最终的Python包版本列表
Package Version Editable project location
------------------------------ ------------------------------- -------------------------
aistudio-sdk 0.3.8
annotated-types 0.7.0
anyio 4.10.0
bce-python-sdk 0.9.46
cachetools 6.2.1
certifi 2025.8.3
chardet 5.2.0
charset-normalizer 3.4.4
click 8.1.8
colorlog 6.10.1
cssselect 1.3.0
cssutils 2.11.1
einops 0.8.1
et_xmlfile 2.0.0
exceptiongroup 1.3.0
filelock 3.19.1
fsspec 2025.9.0
ftfy 6.3.1
future 1.0.0
h11 0.16.0
hf-xet 1.1.10
httpcore 1.0.9
httpx 0.28.1
huggingface-hub 0.35.3
idna 3.10
imagesize 1.4.1
Jinja2 3.1.6
joblib 1.5.2
lxml 6.0.2
MarkupSafe 3.0.3
modelscope 1.31.0
more-itertools 10.8.0
networkx 3.2.1
numpy 2.0.2
nvidia-cublas-cu11 11.11.3.6
nvidia-cuda-cupti-cu11 11.8.87
nvidia-cuda-nvrtc-cu11 11.8.89
nvidia-cuda-runtime-cu11 11.8.89
nvidia-cudnn-cu11 8.9.6.50
nvidia-cufft-cu11 10.9.0.58
nvidia-curand-cu11 10.3.0.86
nvidia-cusolver-cu11 11.4.1.48
nvidia-cusparse-cu11 11.7.5.86
nvidia-nccl-cu11 2.19.3
nvidia-nvtx-cu11 11.8.86
opencv-contrib-python-headless 4.10.0.84
opencv-python-headless 4.10.0.84
openpyxl 3.1.5
opt-einsum 3.3.0
packaging 25.0
paddleocr 3.2.0
paddlepaddle-gpu 3.2.0
paddlex 3.2.1
pandas 2.3.3
pillow 11.3.0
pip 25.2
PPOCRLabel 3.1.5.dev1+g04928bf01.d20251023 /home/ubuntu/PPOCRLabel
premailer 3.10.0
prettytable 3.16.0
protobuf 6.32.0
psutil 7.1.1
py-cpuinfo 9.0.0
pyclipper 1.3.0.post6
pycryptodome 3.23.0
pydantic 2.12.3
pydantic_core 2.41.4
pypdfium2 4.30.0
PyQt5 5.15.11
PyQt5-Qt5 5.15.17
PyQt5_sip 12.17.1
python-dateutil 2.9.0.post0
pytz 2025.2
PyYAML 6.0.2
regex 2025.10.23
requests 2.32.5
ruamel.yaml 0.18.16
ruamel.yaml.clib 0.2.14
safetensors 0.6.2
scikit-learn 1.6.1
scipy 1.13.1
setuptools 80.9.0
shapely 2.0.7
six 1.17.0
sniffio 1.3.1
threadpoolctl 3.6.0
tiktoken 0.12.0
tokenizers 0.22.1
tqdm 4.67.1
typing_extensions 4.15.0
typing-inspection 0.4.2
tzdata 2025.2
ujson 5.11.0
urllib3 2.5.0
wcwidth 0.2.14
wheel 0.45.1