MinerU 2.0部署

简介

MinerU 2.0使用sglang加速,与之前差别较大,建议按照官方的Docker镜像的方式启动。

Docker镜像

Dockerfile

这是官方的Dockerfile

# Use the official sglang image
FROM lmsysorg/sglang:v0.4.7-cu124# install mineru latest
RUN python3 -m pip install -U 'mineru[core]' -i https://mirrors.aliyun.com/pypi/simple --break-system-packages# Download models and update the configuration file
RUN /bin/bash -c "mineru-models-download -s modelscope -m all"# Set the entry point to activate the virtual environment and run the command line tool
ENTRYPOINT ["/bin/bash", "-c", "export MINERU_MODEL_SOURCE=local && exec \"$@\"", "--"]

建议使用下面这个Dockerfile,相较于官方的,它增加了缓存(提升下次构建的速度),值下载vlm的模型(官方还会下载pipeline的)。

# Use the official sglang image
FROM lmsysorg/sglang:v0.4.7-cu124# install mineru latest
RUN --mount=type=cache,id=mineru_cache,target=/root/.cache,sharing=locked \python3 -m pip install -U 'mineru[core]' -i https://mirrors.aliyun.com/pypi/simple --break-system-packages# Download models and update the configuration file
RUN --mount=type=cache,id=mineru_cache,target=/root/.cache,sharing=locked \mineru-models-download -s modelscope -m vlm && \cp -r /root/.cache/modelscope /tmp/modelscope
RUN mkdir -p /root/.cache && \mv /tmp/modelscope /root/.cache/modelscope# Set the entry point to activate the virtual environment and run the command line tool
ENTRYPOINT ["/bin/bash", "-c", "export MINERU_MODEL_SOURCE=local && exec \"$@\"", "--"]

构建Docker镜像

docker build -t mineru-sglang:latest -f Dockerfile .

启动

Docker

# --gpus all
docker run -e MINERU_MODEL_SOURCE=local --gpus '"device=0,1"' \--shm-size 100g \-p 80:80 \--ipc=host \mineru-sglang:latest \mineru-sglang-server --host 0.0.0.0 --port 80 --enable-torch-compile --tp 2

Docker compose

services:mineru-sglang:image: mineru-sglang:latestcontainer_name: mineru-sglangrestart: alwaysports:- 30000:30000environment:MINERU_MODEL_SOURCE: localentrypoint: mineru-sglang-servercommand:--host 0.0.0.0--port 80# --enable-torch-compile  # You can also enable torch.compile to accelerate inference speed by approximately 15%# --dp 2  # If you have more than two GPUs with 24GB VRAM or above, you can use sglang's multi-GPU parallel mode to increase throughput  # --tp 2  # If you have two GPUs with 12GB or 16GB VRAM, you can use the Tensor Parallel (TP) mode# --mem-fraction-static 0.7  # If you have two GPUs with 11GB VRAM, in addition to Tensor Parallel mode, you need to reduce the KV cache sizeulimits:memlock: -1stack: 67108864ipc: hosthealthcheck:test: ["CMD-SHELL", "curl -f http://localhost:30000/health || exit 1"]deploy:resources:reservations:devices:- driver: nvidiadevice_ids: ["0"]capabilities: [gpu]

测试

"""
pip install -U mineru -i https://mirrors.aliyun.com/pypi/simple
"""
import json
import os
import timefrom mineru.backend.vlm.vlm_analyze import doc_analyze as vlm_doc_analyze
from mineru.backend.vlm.vlm_middle_json_mkcontent import union_make as vlm_union_make
from mineru.cli.common import convert_pdf_bytes_to_bytes_by_pypdfium2, prepare_env
from mineru.data.data_reader_writer import FileBasedDataWriter
from mineru.utils.enum_class import MakeModedef process_pdf(file_path:str,
):output_dir = 'output'server_url = 'http://<mineru_sglang_ip>:<port>'f_make_md_mode = MakeMode.MM_MDf_dump_md = Truef_dump_content_list = Truef_dump_middle_json = Truef_dump_model_output = Truestart = time.time()parts = os.path.splitext(os.path.basename(file_path))pdf_file_name = parts[0]with open(file_path, 'rb') as f:pdf_bytes = f.read()pdf_bytes = convert_pdf_bytes_to_bytes_by_pypdfium2(pdf_bytes, 0, None)local_image_dir, local_md_dir = prepare_env(output_dir, pdf_file_name, 'auto')image_writer, md_writer = FileBasedDataWriter(local_image_dir), FileBasedDataWriter(local_md_dir)end1 = time.time()print(f'start to call sglang, cost, {end1 - start}')middle_json, infer_result = vlm_doc_analyze(pdf_bytes, image_writer=image_writer, backend='sglang-client',server_url=server_url)end2 = time.time()print(f'end to call sglang, cost, {end2 - end1}')pdf_info = middle_json["pdf_info"]# draw_layout_bbox(pdf_info, pdf_bytes, local_md_dir, f"{pdf_file_name}_layout.pdf")# draw_span_bbox(pdf_info, pdf_bytes, local_md_dir, f"{pdf_file_name}_span.pdf")if f_dump_md:image_dir = str(os.path.basename(local_image_dir))md_content_str = vlm_union_make(pdf_info, f_make_md_mode, image_dir)md_writer.write_string(f"{pdf_file_name}.md",md_content_str,)end3 = time.time()print(f'end to gen md, cost, {end3 - end2}')if f_dump_content_list:image_dir = str(os.path.basename(local_image_dir))content_list = vlm_union_make(pdf_info, MakeMode.CONTENT_LIST, image_dir)md_writer.write_string(f"{pdf_file_name}_content_list.json",json.dumps(content_list, ensure_ascii=False, indent=4),)if f_dump_middle_json:md_writer.write_string(f"{pdf_file_name}_middle.json",json.dumps(middle_json, ensure_ascii=False, indent=4),)if f_dump_model_output:model_output = ("\n" + "-" * 50 + "\n").join(infer_result)md_writer.write_string(f"{pdf_file_name}_model_output.txt",model_output,)print(f"local output dir is {local_md_dir}")if __name__ == '__main__':file = 'demo.pdf'process_pdf(file)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/86714.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/86714.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

黑马python(十七)

目录&#xff1a; 1.数据可视化-地图-基础案例 2.全国疫情地图 3.河南省疫情地图绘制 4.基础柱状图构建 5.基础时间线柱状图绘制 6.动态GDP柱状图绘制 1.数据可视化-地图-基础案例 图示有点对的不准&#xff0c;可以通过后面的参数 2.全国疫情地图 3.河南省疫情地图绘制…

Segment Anything in High Quality之SAM-HQ论文阅读

摘要 最近的 Segment Anything Model(SAM)在扩展分割模型规模方面取得了重大突破,具备强大的零样本能力和灵活的提示机制。尽管 SAM 在训练时使用了 11 亿个掩码,其掩码预测质量在许多情况下仍不理想,尤其是对于结构复杂的目标。我们提出了 HQ-SAM,使 SAM 能够精确地分割…

深入理解_FreeRTOS的内部实现(2)

1.事件组 事件组结构体&#xff1a; 事件组 “不关中断” 的核心逻辑 事件组操作时&#xff0c;优先选择 “关调度器” 而非 “关中断” &#xff0c;原因和实现如下&#xff1a; 关调度器&#xff08;而非关中断&#xff09; FreeRTOS 提供 taskENTER_CRITICAL()&#xff08;…

【图论题典】Swift 解 LeetCode 最小高度树:中心剥离法详解

文章目录 摘要描述题解答案题解代码分析思路来源&#xff1a;树的“中心剥离法”构造邻接表和度数组循环剥叶子终止条件 示例测试及结果时间复杂度空间复杂度总结 摘要 树是一种重要的数据结构&#xff0c;在许多应用里&#xff0c;我们希望选一个根&#xff0c;让这棵树的高度…

Docker的介绍与安装

​ Docker 对初学者的简单解释和应用场景 1.什么是 Docker&#xff1f; 简单来说&#xff0c;Docker 就像一个“装箱子”的工具&#xff0c;这个箱子叫做“容器”。 你写的程序和它运行需要的环境&#xff08;比如操作系统、软件、工具&#xff09;都装进一个箱子里。这个箱…

引导相机:工业自动化的智能之眼,赋能制造业高效升级

在工业自动化浪潮中&#xff0c;精准的视觉引导技术正成为生产效率跃升的关键。作为迁移科技——一家成立于2017年、专注于3D工业相机和3D视觉系统的领先供应商&#xff0c;我们深知"引导相机"的核心价值&#xff1a;它不仅是一个硬件设备&#xff0c;更是连接物理世…

智能相机如何重塑工业自动化?迁移科技3D视觉系统的场景革命

从硬件参数到产业价值&#xff0c;解码高精度视觉系统的落地逻辑 一、工业视觉的“智慧之眼” 迁移科技深耕3D工业相机领域&#xff0c;以“稳定、易用、高回报”为核心理念&#xff0c;打造覆盖硬件、算法、软件的全栈式视觉系统。成立6年累计融资数亿元的背后&#xff0c;是…

【数据挖掘】聚类算法学习—K-Means

K-Means K-Means是一种经典的无监督学习算法&#xff0c;用于将数据集划分为K个簇&#xff08;clusters&#xff09;&#xff0c;使得同一簇内的数据点相似度高&#xff0c;不同簇间的相似度低。它在数据挖掘、模式识别和机器学习中广泛应用&#xff0c;如客户细分、图像压缩和…

linux环境内存满php-fpm

检查 PHP-FPM 配置 pm.max_children&#xff1a;该参数控制 PHP-FPM 进程池中最大允许的子进程数。过高的子进程数会导致内存占用过大。你可以根据服务器的内存大小来调整 pm.start_servers&#xff1a;控制 PHP-FPM 启动时创建的进程数。根据实际情况调整此值。 pm.min_spare_…

基于CNN卷积神经网络图像识别小程序9部合集

基于CNN卷积神经网络图像识别小程序合集-视频介绍下自取 ​ 内容包括&#xff1a; 基于python深度学习的水果或其他物体识别小程序 003基于python深度学习的水果或其他物体识别小程序_哔哩哔哩_bilibili 代码使用的是python环境pytorch深度学习框架&#xff0c;代码的环境安…

WebRTC(九):JitterBuffer

JitterBuffer Jitter “Jitter”指的是连续到达的媒体包之间时间间隔的变化。在网络传输中&#xff0c;由于&#xff1a; 网络拥塞路由路径变化队列排队不同链路带宽差异 导致包之间的接收时间不一致&#xff0c;这就是网络“抖动”。 作用 **JitterBuffer&#xff08;抖…

【推荐100个unity插件】在 Unity 中绘制 3D 常春藤,模拟生长——hedera插件的使用

注意&#xff1a;考虑到后续接触的插件会越来越多&#xff0c;我将插件相关的内容单独分开&#xff0c;并全部整合放在【推荐100个unity插件】专栏里&#xff0c;感兴趣的小伙伴可以前往逐一查看学习。 效果演示 文章目录 效果演示前言一、常春藤生成器工具下载二、工具使用1、…

【三维重建】【3DGS系列】【深度学习】3DGS的理论基础知识之高斯椭球的几何变换

【三维重建】【3DGS系列】【深度学习】3DGS的理论基础知识之高斯椭球的几何变换 文章目录 【三维重建】【3DGS系列】【深度学习】3DGS的理论基础知识之高斯椭球的几何变换前言模型变换(Model Transformation)观测变换(Viewing Transformation)视图变换(View Transformation)投影…

EXISTS 和 NOT EXISTS 、IN (和 NOT IN)

在 SQL 中&#xff0c;EXISTS、NOT EXISTS 和 IN 都是用于子查询的条件运算符&#xff0c;用于根据子查询的结果过滤主查询的行。它们之间的区别主要体现在工作方式、效率、对 NULL 值的处理以及适用场景上。 1. EXISTS 和 NOT EXISTS 作用&#xff1a; EXISTS: 检查子查询是…

GitHub 趋势日报 (2025年06月25日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 880 awesome 788 build-your-own-x 691 free-for-dev 427 best-of-ml-python 404 …

互联网大厂Java求职面试:Java虚拟线程实战

互联网大厂Java求职面试&#xff1a;Java虚拟线程实战 文章内容 开篇&#xff1a;技术总监与程序员郑薪苦的三轮对话 在一场紧张而严肃的Java工程师面试中&#xff0c;技术总监张工正对候选人郑薪苦进行深入提问。郑薪苦虽然性格幽默&#xff0c;但对技术有着扎实的理解。今天…

网络安全的两大威胁:XSS与CSRF攻击实例解析

在网络攻击中,XSS跨站脚本攻击(Cross Site Scripting)与CSRF跨站请求伪造攻击(Cross-Site Request Forgery)是两种常见的攻击方式,它们之间存在显著的区别。以下是对这两种攻击方式的详细比较: 一、攻击原理 XSS跨站脚本攻击 攻击者通过在Web页面中注入恶意脚本来实现攻…

如何一次性将 iPhone 中的联系人转移到 PC

许多重要的联系人都存储在您的 iPhone 上。为了保护关键信息&#xff0c;您可能需要将联系人从 iPhone 转移到 PC&#xff0c;这是一种有效的联系人备份方法。如果您在将 iPhone 联系人转移到电脑上遇到困难&#xff0c;现在可以从本文中学习 5 个有效的解决方案&#xff0c;然…

Spring Boot开启定时任务的三种方式 【@EnableScheduling注解,SchedulingConfigurer接口,Quartz 框架】

Spring Boot 开启定时任务的三种方式​ ​ ​ 在 Spring Boot 应用开发过程中&#xff0c;定时任务是十分常见的需求&#xff0c;比如定时清理日志文件、定期备份数据库数据、定时发送邮件提醒等。Spring Boot 提供了多种开启定时任务的方式&#xff0c;本文将详细介绍三种常见…

LLM 编码器 怎么实现语义相关的 Token 向量更贴近? mask训练:上下文存在 ;; 自回归训练:只有上文,生成模型

LLM 编码器 怎么实现语义相关的 Token 向量更贴近? 目录 LLM 编码器 怎么实现语义相关的 Token 向量更贴近?mask训练:上下文存在自回归训练:只有上文,生成模型一、核心机制:损失函数与反向传播的“语义校准”1. 损失函数的“语义约束”2. 嵌入层参数的“动态调整”二、关…