MinerU2.0-Pipeline(TorchAir)-推理指导


概述

MinerU是由上海人工智能实验室OpenDataLab团队开发的开源文档解析工具,致力于解决大模型(LLM)训练和RAG(检索增强生成)应用中高质量结构化数据的提取难题。其核心价值在于将复杂文档(如PDF、网页、电子书)转换为机器可读的Markdown、JSON格式,同时保留原始文档的语义逻辑与多模态元素。

本文档介绍了MinerU 2.0模型的Pipeline部署流程,包括推理环境准备、模型部署、功能验证,旨在帮助用户快速完成模型部署和验证。

  • 版本说明:

    url=https://github.com/opendatalab/MinerU.git
    commit_id=de41fa58590263e43b783fe224b6d07cae290a33
    model_name=MinerU
    

推理环境准备

  • 该模型需要以下插件与驱动
    表 1 版本配套表

    配套 版本 环境准备指导
    固件与驱动 25.2.RC1 Pytorch框架推理环境准备
    CANN 8.3.0 -
    Python 3.11 -
    PyTorch 2.6.0 -
    Ascend Extension PyTorch 2.6.0 -
    说明:Atlas 800I A2/Atlas 300I Pro 推理卡请以CANN版本选择实际固件与驱动版本。 \ \

快速上手

获取源码

  1. 获取Pytorch源码

    git clone https://gitcode.com/ascend/ModelZoo-PyTorch.git
    cd ModelZoo-PyTorch/ACL_PyTorch/built-in/ocr/MinerU
    git clone https://github.com/opendatalab/MinerU.git
    cd MinerU
    git reset --hard de41fa58590263e43b783fe224b6d07cae290a33
    pip3 install -e .
    cd ..
    
  2. 安装依赖

    pip3 install -r requirements.txt
    ### 此外,还需安装 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
    source /usr/local/Ascend/ascend-toolkit/set_env.sh # Default path, change it if needed.
    python setup.py bdist_wheel
    cd dist
    pip install torchvision_npu-0.21.0+git22ca6b2-cp311-cp311-linux_aarch64.whl
    cd ../../
    
  3. 修改第三方库 进入第三方库安装路径,默认为source_path = /usr/local/lib/python3.11/site-packages,通过工作目录workdir(自定义)中的ultralytics.patchdoclayout_yolo.patch进行修改

    workdir=$(pwd)
    source_path=$(pip show ultralytics | grep Location | awk '{print $2}')
    cd ${source_path}/ultralytics
    patch -p1 < ${workdir}/ultralytics.patch
    cd ${source_path}/doclayout_yolo
    patch -p1 < ${workdir}/doclayout_yolo.patch
    cd ${workdir}/MinerU
    git apply ../mineru.patch
    cd ..
    

获取权重

运行以下指令,下载权重文件Model weights,默认存放为/root/.cache/modelscope/hub/models/OpenDataLab/PDF-Extract-Kit-1___0

mineru-models-download --source modelscope --model_type pipeline

下载完成后,默认在根目录生成mineru.json文件,移动数据集时,需修改/root/mineru.json文件中"models-dir": "pipeline"为修改后权重存放路径

权重目录大致结构为:

📁 models
├── 📁 Layout
│   └── 📁 YOLO
│       └── doclayout_yolo_docstructbench_imgsz1280_2501.pt
├── 📁 MFD
│   └── 📁 YOLO
│       └── yolo_v8_ft.pt
├── 📁 MFR
│   └── 📁 unimernet_hf_small_2503
│       ├── model.safetensors
│       ├── ……
│       └── tokenizer_config.json
├── 📁 OCR
│   └── 📁 paddleocr_torch
│       ├── Multilingual_PP-OCRv3_det_infer.pth
│       ├── arabic_PP-OCRv3_rec_infer.pth
│       ├── ……
│       ├── ……
│       └── th_PP-OCRv5_rec_infer.pth
├── 📁 ReadingOrder
│   └── 📁 layout_reader
│       ├── config.json
│       └── model.safetensors
└── 📁 TabRec
    └── 📁 SlanetPlus
        └── slanet-plus.onnx

获取数据集

创建数据集目录OmniDocBench_dataset,下载多样性文档解析评测集OmniDocBench数据集的pdfs和标注,解压并放置在OmniDocBench_dataset目录下 文件目录格式大致如下:

📁 workdir
 ├── infer.py
 ├── ……
 ├── 📁 MinerU
 └── 📁 OmniDocBench_dataset
     ├── OmniDocBench.json
     └── 📁 pdfs
         └── ***.pdf

执行推理

运行推理脚本infer.py

python3 infer.py --data_path=OmniDocBench_dataset --model_source=local
  • 参数说明
    • data_path: 数据集路径
    • model_source: 模型源类型,local表示使用本地文件,modelscope/huggingface表示在线拉取权重

推理执行完成后,解析结果存放于OmniDocBench_dataset/output/目录,结果除了输出主要的 markdown 文件外,还会生成多个辅助文件用于调试、质检和进一步处理。

运行服务化推理-pipeline后端

默认端口为6544,可以参照官方fast_api服务的启动方案,或者用如下代码启动:

nohup python3 MinerU/mineru/cli/fast_api.py > fast_api.log 2>&1 &

请求命令可以参考:

curl -X POST -F "files=@Your_PDF_FILE_PATH.pdf" {IP}:{PORT}/file_parse

例如

curl -X POST -F "files=@MinerU/demo/pdfs/demo3.pdf" 127.0.0.1:6544/file_parse

精度测试

使用OmniDocBench数据集配套评测代码测试精度。

  1. 推理结果整理

    将解析结果文件夹中的markdown文件整理放置于同一目录,本例将所有markdown文件存放于OmniDocBench_dataset目录下的end2end文件夹

    cp OmniDocBench_dataset/output/*/auto/*.md OmniDocBench_dataset/end2end/
    
  2. 获取测评源码并构建环境

    • 安装OmniDocBench基础环境
    git clone https://github.com/opendatalab/OmniDocBench.git
    cd OmniDocBench
    git reset --hard 523fd1d529c3e9d0088c662e983aa70fb9585c9a
    conda create -n omnidocbench python=3.10
    conda activate omnidocbench
    pip install -r requirements.txt
    
    • 公式精度指标CDM需要额外安装环境

    step.1 install nodejs

    wget https://nodejs.org/dist/v16.13.1/node-v16.13.1-linux-arm64.tar.xz
    tar -xf node-v16.13.1-linux-arm64.tar.xz
    mv node-v16.13.1-linux-arm64/* /usr/local/nodejs/
    ln -s /usr/local/nodejs/bin/node /usr/local/bin
    ln -s /usr/local/nodejs/bin/npm /usr/local/bin
    node -v
    

    step.2 install imagemagic

    git clone https://github.com/ImageMagick/ImageMagick.git ImageMagick-7.1.2
    cd ImageMagick-7.1.2
    apt-get update && apt-get install -y libpng-dev zlib1g-dev
    apt-get install -y ghostscript
    ./configure
    make
    sudo make install
    sudo ldconfig /usr/local/lib
    convert --version
    

    step.3 install latexpdf

    sudo apt-get install texlive-full
    

    step.4 install python requriements

    pip install -r metrics/cdm/requirements.txt
    
  3. 测评配置修改

    修改OmniDocBench测评代码中的config文件,具体来说,我们使用端到端测评配置,修改configs/end2end.yaml文件中的ground_truth的data_path为下载的OmniDocBench.json路径,修改prediction的data_path中提供整理的推理结果的文件夹路径,如下:

    # -----以下是需要修改的部分 -----
     display_formula:
       metric:
         - Edit_dist
         - CDM       ### 安装好CDM环境后,可以在config文件中设置并直接计算
         - CDM_plain
    ...
    dataset:
       dataset_name: end2end_dataset
       ground_truth:
       data_path: ../OmniDocBench_dataset/OmniDocBench.json
       prediction:
       data_path: ../OmniDocBench_dataset/end2end
    
  4. 精度测量结果

    配置好config文件后,只需要将config文件作为参数传入,运行以下代码即可进行评测:

    python pdf_validation.py --config ./configs/end2end.yaml
    

    评测结果将会存储在result目录下,Overall指标的计算方式为:

    Overall=(1−Text Edit Distance)×100+Table TEDS+Formula CDM3\text{Overall} = \frac{(1-\textit{Text Edit Distance}) \times 100 + \textit{Table TEDS} +\textit{Formula CDM}}{3}

    运行overall_metric.py可以得到精度结果:

    cd ..
    python overall_metric.py
    

    OmniDocBench数据集上的精度和性能数据分别为:

    模型 芯片 overall 性能(s)
    MinerU 300I DUO(单芯) 81.68 3.37
    MinerU 800I A2 64G 81.51 1.85