基于麒麟V11、昇腾300i Duo和VLLM本地部署Mineru2.5
📅 2026/7/9 16:26:32
👁️ 阅读次数
📝 编程学习
mineru官方文档:Ascend - MinerU
1. 基于docker镜像启动
1.1 使用 Dockerfile 构建镜像 (vllm)
1.1.1 在项目目录下运行终端,输入以下命令下载配置文件
wget https://gcore.jsdelivr.net/gh/opendatalab/MinerU@master/docker/china/npu.Dockerfile1.1.2 打开下载的npu.Dockerfile文件,对第三行内容进行修改。
针对使用的昇腾300i Duo卡,310p核心
FROM quay.m.daocloud.io/ascend/vllm-ascend:v0.10.0rc1-310p1.1.3 构建镜像
输入以下命令构建镜像,构建完成后通过docker image list查看是否生成mineru:npu-vllm-latest镜像文件。
docker build --network=host -t mineru:npu-vllm-latest -f npu.Dockerfile .1.2 启动 Docker 容器
注意:自行修改device设备,docker容器名称,下载的mineru模型权重已经在容器内路径下:/root/.cache/modelscope/hub/models/OpenDataLab/MinerU2___5-Pro-2605-1___2B, 启动时不要再对该路径进行映射。
docker run -u root --name mineru_docker --privileged=true \ --ipc=host \ --network=host \ --device=/dev/davinci2 \ --device=/dev/davinci3 \ --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 \ -it mineru:npu-vllm-latest \ /bin/bash2. mineru启动
2.1 启动fastapi服务
使用fastapi服务时,可将容器完全作为后端服务器,其他主机不必安装环境和依赖
2.1.1 启动服务
由于310p加速卡不支持图模式与bf16精度,因此在使用该加速卡时,执行任意与vllm相关命令需追加--enforce-eager --dtype float16, 设置显存占用比例和预加热。
mineru-api --host 0.0.0.0 --port 8009 --enforce-eager --dtype float16 --gpu-memory-utilization 0.9 --enable-vlm-preload true2.1.2 应用服务
使用curl可提交和查询任务
也可使用下面我的python脚本进行任务提交和自动下载解压:
import requests import time import sys import zipfile import os def process_pdf(file_path, base_url="http://127.0.0.1:8009"): """ 提交 PDF 到 MinerU 服务,下载完整结果 ZIP 并自动解压 """ # 1. 提交任务 print(f"正在上传文件: {file_path} ...") upload_url = f"{base_url}/tasks" try: with open(file_path, "rb") as f: files = {"files": (file_path.split("/")[-1], f, "application/pdf")} # 请求返回 Markdown、图片,并打包为 ZIP 格式 data = { "return_md": "true", "return_images": "true", "response_format_zip": "true", "backend": "vlm-engine" } response = requests.post(upload_url, files=files, data=data) response.raise_for_status() except Exception as e: print(f"上传文件失败: {e}") sys.exit(1) task_info = response.json() task_id = task_info.get("task_id") status_url = task_info.get("status_url") result_url = task_info.get("result_url") print(f"任务提交成功!Task ID: {task_id}") # 2. 轮询任务状态 print("正在等待任务处理完成...") while True: try: status_resp = requests.get(status_url) status_resp.raise_for_status() status_data = status_resp.json() current_status = status_data.get("status") if current_status == "completed": print("任务处理完成!") break elif current_status == "failed": print(f"任务处理失败!错误信息: {status_data.get('error')}") sys.exit(1) else: print(f"当前状态: {current_status},等待中...") time.sleep(2) except Exception as e: print(f"查询状态时发生错误: {e}") sys.exit(1) # 3. 下载 ZIP 压缩包并自动解压 zip_filename = "output_full_results.zip" extract_dir = "output_full_results" try: # 3.1 下载 ZIP 文件 print("正在下载完整结果压缩包...") result_resp = requests.get(result_url) result_resp.raise_for_status() with open(zip_filename, "wb") as f: f.write(result_resp.content) # 3.2 自动解压 ZIP 文件 print(f"正在解压文件到 [{extract_dir}] 目录...") # 如果解压目录已存在,会自动覆盖或合并 os.makedirs(extract_dir, exist_ok=True) with zipfile.ZipFile(zip_filename, 'r') as zip_ref: zip_ref.extractall(extract_dir) print(f"所有文件(Markdown、图片等)已解压至: {os.path.abspath(extract_dir)}") # 3.3 清理下载的临时 ZIP 文件(可选) os.remove(zip_filename) print("临时 ZIP 文件已清理。") except zipfile.BadZipFile: print("下载的文件不是有效的 ZIP 压缩包!") sys.exit(1) except Exception as e: print(f"下载或解压过程中发生错误: {e}") sys.exit(1) if __name__ == "__main__": # 修改需要解析的文件路径,解析后的文件也会下载至该路径下 PDF_PATH = "/root/下载/111.pdf" process_pdf(PDF_PATH)2.2 启动mineru-openai-server
mineru-openai-server作为视觉大模型服务,容器外调用的主机需要安装mineru库环境
2.2.1 容器内启动服务
mineru-openai-server --port 8009 --enforce-eager --dtype float162.2.2 容器外配置mineru环境
使用pip或者uv安装mineru,推荐使用conda进行环境隔离
pip install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple pip install uv -i https://mirrors.aliyun.com/pypi/simple uv pip install -U "mineru[all]" -i https://mirrors.aliyun.com/pypi/simple2.2.3 执行mineru解析
终端中激活配置好的mineru环境,执行下面命令即可:
mineru -p <input_path> -o <output_path> -b hybrid-http-client -u http://127.0.0.1:80092.3 结果展示
使用fastapi服务配合python代码,打压缩包进行下载,解压压缩包文件,内含图片与md文件。
编程学习
技术分享
实战经验