基于麒麟V11、昇腾300i Duo和VLLM本地部署Mineru2.5
mineru官方文档Ascend - MinerU1. 基于docker镜像启动1.1 使用 Dockerfile 构建镜像 vllm1.1.1 在项目目录下运行终端输入以下命令下载配置文件wget https://gcore.jsdelivr.net/gh/opendatalab/MinerUmaster/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 --networkhost -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 --privilegedtrue \ --ipchost \ --networkhost \ --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_METHODspawn \ -e MINERU_MODEL_SOURCElocal \ -e MINERU_LMDEPLOY_DEVICEascend \ -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_urlhttp://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, filesfiles, datadata) 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_okTrue) 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-servermineru-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文件。