MinerU是一款将PDF转化为机器可读格式的工具(如markdown、json),可以很方便地抽取为任意格式。 MinerU诞生于书生-浦语的预训练过程中,主要解决科技文献中的符号转化问题,该模型已适配昇腾NPU,但部分算子并未在NPU上执行,导致推理性能下降,本文档提供MinerU完整在NPU上运行的适配方案并提供模型在多张NPU卡上并行推理的方法,如果遇到NPU上运行模型的问题或者结果不及预期请提交问题,同时附上相关PDF。
| 配套 | 版本 | 环境准备指导 |
|---|---|---|
| Python | Python 3.11.13 | - |
| torch | 2.7.1 | - |
| torch_npu | 2.7.1 | - |
| vLLM- Ascend | 0.11.0 | |
| CANN | 8.3.RC2 |
整机:Atlas 800T A2
NPU:910B昇腾
部署方式:单卡部署(多卡时可并行推理提速)
操作系统:openEuler 22.03 (LTS-SP2), ARM
下载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账号执行。
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
将宿主机上提前准备的测试文件test.pdf上传到容器workspace目录下以便后续测试使用。
docker cp <yourpath>/test.pdf mineru_docker:/workspace后续操作如无特殊说明均在容器中执行,进入容器命令
docker exec -it mineru_docker bash指定模型从ModelScope下载
export USE_MODELSCOPE_HUB=1自动扫描服务器上的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
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.ops.nms 是 PyTorch TorchVision 库中的一个非极大值抑制(Non-Maximum Suppression)算子,用于目标检测任务中过滤重叠的预测边界框,昇腾torch_npu中默认未适配此算子,需要通过Torchvision Adapter插件适配。
根据最新的配套表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
找到下载的模型源码文件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
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