Ascend-SACT/MinerU2.7.4
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

引言

MinerU是一款将PDF转化为机器可读格式的工具(如markdown、json),可以很方便地抽取为任意格式。 MinerU诞生于书生-浦语的预训练过程中,主要解决科技文献中的符号转化问题,该模型已适配昇腾NPU,但部分算子并未在NPU上执行,导致推理性能下降,本文档提供MinerU完整在NPU上运行的适配方案并提供模型在多张NPU卡上并行推理的方法,如果遇到NPU上运行模型的问题或者结果不及预期请提交问题,同时附上相关PDF。

一、运行环境准备

1、版本配套表

配套版本环境准备指导
PythonPython 3.11.13-
torch2.7.1-
torch_npu2.7.1-
vLLM- Ascend0.11.0
CANN8.3.RC2

2、环境准备

整机:Atlas 800T A2

NPU:910B昇腾

部署方式:单卡部署(多卡时可并行推理提速)

操作系统:openEuler 22.03 (LTS-SP2), ARM

3、镜像及组合制作及安装

下载Dockerfile文件

wget https://gcore.jsdelivr.net/gh/opendatalab/MinerU@master/docker/china/npu.Dockerfile

构建Docker镜像

docker build --network=host -t mineru:npu-lmdeploy-latest -f npu.Dockerfile .

二、运行指导

以下操作使用的账号是在操作系统上自建的账号,也可以用root账号执行。

1、启动 Docker 容器

docker run -u root --name mineru_docker --privileged=true \
--ipc=host \
--network=host \
--device=/dev/davinci0 \
--device=/dev/davinci1 \
--device=/dev/davinci2 \
--device=/dev/davinci3 \
--device=/dev/davinci4 \
--device=/dev/davinci5 \
--device=/dev/davinci6 \
--device=/dev/davinci7 \
--device=/dev/davinci_manager \
--device=/dev/devmm_svm \
--device=/dev/hisi_hdc \
-v /var/log/npu/:/usr/slog \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-e VLLM_WORKER_MULTIPROC_METHOD=spawn \
-e MINERU_MODEL_SOURCE=local \
-e MINERU_LMDEPLOY_DEVICE=ascend \
-itd mineru:npu-vllm-latest \
/bin/bash

2、上传测试PDF文档

将宿主机上提前准备的测试文件test.pdf上传到容器workspace目录下以便后续测试使用。

docker cp <yourpath>/test.pdf mineru_docker:/workspace

3、指定ModelScope做模型下载源

后续操作如无特殊说明均在容器中执行,进入容器命令

docker exec -it mineru_docker bash

指定模型从ModelScope下载

export USE_MODELSCOPE_HUB=1

4、自动绑定多卡

自动扫描服务器上的NPU卡

if command -v npu-smi info &> /dev/null; then
  num_npus=$(npu-smi info -l | grep "Total Count" | awk -F ":" '{print $NF}')
  npu_list=$(seq -s, 0 $((num_npus-1)))
else
  num_npus=-1
  npu_list="-1"
fi
echo using npu : $npu_list
num_gpus=$(echo $npu_list | awk -F "," '{print NF}')

绑定NPU卡

export  ASCEND_RT_VISIBLE_DEVICES=$npu_list

5、在容器中运行模型

mineru -p test.pdf -o /tmp/out

命令能成功执行,功能正常。但回显“ Warning: CAUTION: The operator 'torchvision::nms' is not currently supported on the NPU backend and will fall back to run on the CPU. This may have performance implications. (function npu_cpu_fallback)”表示算子“torchvision::nms”并未在NPU上执行。

三、torchvision::nms算子适配

torchvision.ops.nms 是 PyTorch TorchVision 库中的一个非极大值抑制(Non-Maximum Suppression)算子,用于目标检测任务中过滤重叠的预测边界框,昇腾torch_npu中默认未适配此算子,需要通过Torchvision Adapter插件适配。

1、编译安装torchvision_npu

根据最新的配套表Torchvision Adapter v0.21.0-7.1.0版本和Torchvision版本0.21.0兼容。因此需要Torchvision一同安装。

源码编译安装Torchvision

git clone https://github.com/pytorch/vision.git
cd vision
git checkout v0.21.0
# 编包
python setup.py bdist_wheel
# 安装
cd dist
pip3 install torchvision-0.21.*.whl

回到容器/workspcace目录,编译安装Torchvision Adapter插件

git clone https://gitcode.com/ascend/vision.git vision_npu
cd vision_npu
git checkout v0.21.0-7.1.0
# 安装依赖库
pip3 install -r requirement.txt
# 编包
python setup.py bdist_wheel
# 安装
cd dist
pip install torchvision_npu-0.21.*.whl

2、MinerU模型源码中引用torchvision_npu

找到下载的模型源码文件model_utils.py,按本文档环境在/usr/local/python3.11.13/lib/python3.11/site-packages/mineru/utils/model_utils.py,在导入torch_npu后导入torchvision_npu库

try:
    import torch
    import torch_npu
    import torchvision_npu #新增此行代码
except ImportError:
    pass

3、再次运行模型

mineru -p test.pdf -o /tmp/out

torchvision::nms算子已在NPU上执行,不再回显“ Warning: CAUTION: The operator 'torchvision::nms' is not currently supported on the NPU backend and will fall back to run on the CPU. This may have performance implications. (function npu_cpu_fallback)”。

四、模型多卡运行

MinerU默认在单卡运行,参考PDF并行处理可实现模型在多张GPU卡上运行。让模型在多张NPU卡上运行需要适配,下载源码文件process_pdf.py并上传到容器中。 将

os.environ['CUDA_VISIBLE_DEVICES'] = str(gpu_id)

修改为

os.environ['ASCEND_RT_VISIBLE_DEVICES'] = str(gpu_id)

将

os.environ['MINERU_DEVICE_MODE'] = "cuda:0"

修改为:

os.environ['MINERU_DEVICE_MODE'] = "npu:0"

运行命令,在单机8卡上运行模型

python process_pdf.py --input-dir /tmp/ --output-dir /tmp  --gpus 0,1,2,3,4,5,6,7 --num-workers 8