资讯动态

Unlimited-OCR 实战指南:One-shot Long-horizon 单次长文档解析与 Transformers / vLLM / SGLang 三条推理路径

发布时间:2026/9/30 10:52:58 来源:尧图企业网站定制
人工智能大模型计算机视觉模型推理服务【免费下载链接】Unlimited-OCRUnlimited OCR Works: Welcome the Era of One-shot Long-horizon Parsing.项目地址https://gitcode.com/gh_mirrors/un/Unlimited-OCR点击查看免费下载本文以百度开源的 Unlimited-OCR仓库 README.md为主线围绕其一次推理完成长篇幅文档解析One-shot Long-horizon Parsing的核心能力系统讲解环境搭建、Transformers 直接推理、vLLM Docker 部署与 SGLang 服务化推理的完整实操并结合仓库 infer.py 源码解读批量并发推理的实现细节。读完本文你将掌握单图、多页、PDF 三类输入的解析方法理解 gundam / base 两种图像配置的选型依据并能把模型快速接入自有服务或批处理流水线。一、项目定位把 OCR 从单页识别推进到一次吃下整份文档Unlimited-OCR 的核心主张在 README 的标语中写得很明确Welcome the Era of One-shot Long-horizon Parsing——欢迎进入一次性长时程long-horizon解析时代。它定位为把 DeepSeek-OCR 再向前推进一步的方案不再局限于单张图片的版面识别而是面向整份文档多页扫描件、长 PDF在单次推理内完成端到端解析。从架构示意图可以看到模型在骨干网络与 KV 缓存机制上做了面向长文档的专门设计。从 README 的 Release 小节可以还原项目的时间线2026/06/22 项目正式发布目标是把 DeepSeek-OCR 往前推进一步2026/06/23 论文《Unlimited OCR Works》在 arXiv 公开编号 2606.23050模型同期上线 ModelScope2026/06/24 社区在 Hugging Face Spaces 提供了在线 Demo2026/06/28 在 vLLM 社区支持下模型可支持 vLLM 推理2026/07/03 模型上线百度智能云 OCR 服务。二、环境准备与依赖清单2.1 硬件与基础软件README 明确说明 Transformers 推理运行于 NVIDIA GPU官方测试环境为 python 3.12.3 CUDA12.9依赖清单如下建议按此版本对齐torch2.10.0 torchvision0.25.0 transformers4.57.1 Pillow12.1.1 matplotlib3.10.8 einops0.8.2 addict2.4.0 easydict1.13 pymupdf1.27.2.2 psutil7.2.2其中pymupdffitz用于 PDF 转图是 PDF 解析链路的前置依赖。2.2 SGLang 路径的独立环境如果走 SGLang 服务化路线README 建议用 uv 管理独立虚拟环境先安装仓库自带的本地 wheelwheel/sglang-0.0.0.dev11416g92e8bb79e-py3-none-any.whl再固定 kernels 版本并安装 PyMuPDFuv venv --python 3.12 source .venv/bin/activate uv pip install wheel/sglang-0.0.0.dev11416g92e8bb79e-py3-none-any.whl uv pip install kernels0.11.7 uv pip install pymupdf1.27.2.2一点提示README 正文提到固定kernels0.9.0而实际给出的安装命令是kernels0.11.7以命令行为准即可。三、路径一基于 Transformers 的即插即用推理Transformers 路径适合单机快速验证与脚本化调用模型通过trust_remote_codeTrue加载远程代码。3.1 加载模型import torch from transformers import AutoModel, AutoTokenizer model_name baidu/Unlimited-OCR tokenizer AutoTokenizer.from_pretrained(model_name, trust_remote_codeTrue) model AutoModel.from_pretrained( model_name, trust_remote_codeTrue, use_safetensorsTrue, torch_dtypetorch.bfloat16, ) model model.eval().cuda()3.2 单图推理gundam 与 base 两种配置README 明确给出单张图片支持两种配置。配置base_sizeimage_sizecrop_mode适用场景gundam1024640True单图聚焦裁剪base10241024False单图 / 多页 / PDFmodel.infer( tokenizer, promptimagedocument parsing., image_fileyour_image.jpg, output_pathyour/output/dir, base_size1024, image_size640, crop_modeTrue, max_length32768, no_repeat_ngram_size35, ngram_window128, save_resultsTrue, )从参数名与取值可以推断base_size控制基础分辨率image_size为送入模型的输入尺寸gundam 配置下 640 配合crop_modeTrue即先裁剪出文档主体区域再解析在较低分辨率下获得更聚焦的版面细节max_length32768是单次推理的最大生成长度也是 long-horizon 覆盖长文档的容量保证no_repeat_ngram_size35与ngram_window128用于抑制长文本生成中的重复详见第五节 SGLang 的 logit 处理器save_resultsTrue表示把解析结果写入output_path目录。3.3 多页图片 / PDFinfer_multi多页输入只使用 base 配置image_size1024并换用infer_multi接口model.infer_multi( tokenizer, promptimageMulti page parsing., image_files[page1.png, page2.png, page3.png], output_pathyour/output/dir, image_size1024, max_length32768, no_repeat_ngram_size35, ngram_window1024, save_resultsTrue, )PDF 需要先转成页面图片再走多页解析。README 给出了基于 PyMuPDF 的转换函数dpi300import tempfile, fitz # PyMuPDF def pdf_to_images(pdf_path, dpi300): doc fitz.open(pdf_path) tmp_dir tempfile.mkdtemp(prefixpdf_ocr_) mat fitz.Matrix(dpi / 72, dpi / 72) paths [] for i, page in enumerate(doc): out os.path.join(tmp_dir, fpage_{i1:04d}.png) page.get_pixmap(matrixmat).save(out) paths.append(out) doc.close() return paths model.infer_multi( tokenizer, promptimageMulti page parsing., image_filespdf_to_images(your_doc.pdf, dpi300), output_pathyour/output/dir, image_size1024, max_length32768, no_repeat_ngram_size35, ngram_window1024, save_resultsTrue, )注意多页/PDF 场景下ngram_window从单图的 128 提高到 1024no_repeat_ngram_size保持 35。四、路径二vLLM 推理部署vLLM 路径面向服务化部署。README 说明官方提供了对应的部署配方Recipe可在 vLLM 官方 Recipe 站点检索baidu/Unlimited-OCR获取完整部署步骤。仓库内同时给出了 Docker 镜像按 GPU 平台二选一默认镜像CUDA 13.0docker pull vllm/vllm-openai:unlimited-ocrHopper GPUCUDA 12.9docker pull vllm/vllm-openai:unlimited-ocr-cu129即常规平台使用默认镜像HopperH 系列GPU 使用带-cu129后缀的镜像。五、路径三SGLang 推理OpenAI 兼容 APISGLang 路径适合需要并发与流式输出的生产场景且与仓库提供的 infer.py 批处理脚本深度绑定。5.1 启动服务端按 2.2 节完成环境搭建后用以下命令启动服务README 原命令python -m sglang.launch_server \ --model baidu/Unlimited-OCR \ --served-model-name Unlimited-OCR \ --attention-backend fa3 \ --page-size 1 \ --mem-fraction-static 0.8 \ --context-length 32768 \ --enable-custom-logit-processor \ --disable-overlap-schedule \ --skip-server-warmup \ --host 0.0.0.0 \ --port 10000关键参数含义与 infer.py 中的同参常量可相互印证参数取值说明--modelbaidu/Unlimited-OCRHF 模型 ID 或本地模型目录--served-model-nameUnlimited-OCR对外服务名客户端请求体中的 model 字段需一致--attention-backendfa3FlashAttention 3 后端infer.py 中ATTENTION_BACKEND同为 fa3--page-size1分页大小infer.py 中PAGE_SIZE1--mem-fraction-static0.8显存静态占用比例infer.py 中MEM_FRACTION_STATIC0.8--context-length32768上下文长度与 Transformers 路径的max_length32768对齐--enable-custom-logit-processor-启用自定义 logit 处理器支撑 no-repeat n-gram 去重--host/--port0.0.0.0 / 10000监听地址与端口infer.py 中HOST/PORT一致5.2 OpenAI 兼容流式客户端README 提供了完整的流式客户端示例把图片以 base64 的data:image/...;base64,形式组装进多模态消息通过POST /v1/chat/completions发起请求并启用自定义 logit 处理器抑制重复 n-gramimport base64 import json import os import tempfile import fitz import requests from sglang.srt.sampling.custom_logit_processor import DeepseekOCRNoRepeatNGramLogitProcessor server_url http://127.0.0.1:10000 session requests.Session() session.trust_env False def pdf_to_images(pdf_path, dpi300): doc fitz.open(pdf_path) tmp_dir tempfile.mkdtemp(prefixpdf_ocr_) mat fitz.Matrix(dpi / 72, dpi / 72) image_paths [] for i, page in enumerate(doc): image_path os.path.join(tmp_dir, fpage_{i 1:04d}.png) page.get_pixmap(matrixmat).save(image_path) image_paths.append(image_path) doc.close() return image_paths def encode_image(image_path): ext os.path.splitext(image_path)[1].lower() mime image/jpeg if ext in (.jpg, .jpeg) else fimage/{ext.lstrip(.)} with open(image_path, rb) as f: data base64.b64encode(f.read()).decode(utf-8) return {type: image_url, image_url: {url: fdata:{mime};base64,{data}}} def build_content(prompt, image_paths): return [{type: text, text: prompt}] [encode_image(path) for path in image_paths] def generate(prompt, image_paths, image_mode, ngram_window): payload { model: Unlimited-OCR, messages: [{role: user, content: build_content(prompt, image_paths)}], temperature: 0, skip_special_tokens: False, images_config: {image_mode: image_mode}, custom_logit_processor: DeepseekOCRNoRepeatNGramLogitProcessor.to_str(), custom_params: { ngram_size: 35, window_size: ngram_window, }, stream: True, } response session.post( f{server_url}/v1/chat/completions, headers{Content-Type: application/json}, datajson.dumps(payload), timeout1200, streamTrue, ) response.raise_for_status() chunks [] for line in response.iter_lines(chunk_size1, decode_unicodeTrue): if not line or not line.startswith(data: ): continue data line[len(data: ):] if data [DONE]: break event json.loads(data) delta event[choices][0].get(delta, {}).get(content, ) if delta: print(delta, end, flushTrue) chunks.append(delta) print() return .join(chunks) # 单图gundam 或 base 均可示例使用 gundam generate(document parsing., [your_image.jpg], image_modegundam, ngram_window128) # 多图仅 base generate(Multi page parsing., [page1.png, page2.png], image_modebase, ngram_window1024) # PDF仅 base generate(Multi page parsing., pdf_to_images(your_doc.pdf, dpi300), image_modebase, ngram_window1024)请求体中的images_config.image_mode对应 gundam / base 两种图像配置语义与 Transformers 路径完全一致单图可用 gundam640 crop或 base1024多图/PDF 仅支持 base。custom_logit_processor使用 SGLang 提供的DeepseekOCRNoRepeatNGramLogitProcessor其custom_params中的ngram_size35、window_size单图 128 / 多页 1024与 Transformers 路径的no_repeat_ngram_size/ngram_window一一对应用于长文本生成中抑制 n-gram 重复保证长文档解析输出的可读性。六、批处理推理infer.py 源码级解读infer.py 是仓库自带的 SGLang 并发批处理入口会自动拉起或复用SGLang 服务端再对图片目录或 PDF 逐页并发推理。以下结合源码逐层展开。6.1 两种输入模式与输出命名--image_dir递归遍历目录支持.png / .jpg / .jpeg / .webp / .bmp见collect_dataset_imagesinfer.py并按文件大小降序排列大图优先利于负载均衡。--pdf每页按 dpi300 转成 PNG见pdf_to_imagesinfer.py再逐页作为独立请求。输出命名规则见build_jobsinfer.pyPDF 模式{pdf文件名}_page_{序号:04d}.md如document_page_0001.md图片目录模式保留相对路径目录层级以__连接如chapter1__fig2.md。# 图片目录 python infer.py \ --image_dir ./examples/images \ --output_dir ./outputs \ --concurrency 8 \ --image_mode gundam # PDF 页 python infer.py \ --pdf ./examples/document.pdf \ --output_dir ./outputs \ --concurrency 8 \ --image_mode gundam6.2 服务端自动拉起与复用start_serverinfer.py的调度逻辑很实用先探测http://127.0.0.1:10000/health若已有可用服务则直接复用并打印 Reuse existing SGLang server否则以subprocess.Popen拉起python -m sglang.launch_server并把--gpu参数写入环境变量CUDA_VISIBLE_DEVICES启动后每 3 秒轮询健康接口最长等待 300 秒SERVER_TIMEOUT超时或进程提前退出都会在--server_log指向的日志中留下排查线索。服务端参数在源码中以常量固定--attention-backend fa3、--page-size 1、--mem-fraction-static 0.8、--context-length 32768与 README 手动启动命令保持一致。6.3 并发调度与失败重试runinfer.py用ThreadPoolExecutor(max_workersargs.concurrency)并发提交任务默认并发 8。单请求固定temperature0、streamTrue提示词固定为document parsing.PROMPT常量。请求失败时最多重试 5 次MAX_RETRIES5其中 502 等瞬时错误按3×(attempt1)秒退避重试见infer_oneinfer.py单请求超时上限 1200 秒REQUEST_TIMEOUT。6.4 结果汇总与性能统计每完成一个请求会打印该图的 token 数与解码耗时全部完成后输出汇总Concurrent Results: Requests: 8/8 Total tokens: 12345 Wall time: 12.34s System TPS: 1000.41 tokens/s Avg tokens/request: 1543 Avg decode_time/request: 1.23s从源码看System TPS定义为总 token 数 / 墙钟耗时是评估并发吞吐的直观指标。6.5 完整 CLI 参数对应parse_argsinfer.py参数默认值说明--image_dir图片目录数据集并发模式--pdfPDF 文件逐页转图后并发--output_dir./outputs结果输出目录每图/每页一个 .md--concurrency8并发请求数--gpu0CUDA_VISIBLE_DEVICES取值--model_dirbaidu/Unlimited-OCR本地路径或 Hugging Face 模型 ID--image_modegundamgundam / base 二选一--server_log./log/sglang_server.logSGLang 服务端日志文件七、可视化演示README 的 Visualization 小节展示了模型的交互式解析演示输入文档 → 解析输出 → 版面可视化。你可以跑通上述任意一条推理路径后把输出目录中的 .md 结果与演示效果对照验证。八、实战要点速查图像配置选型单图选 gundam640 crop_mode可获得更聚焦的版面细节多页/PDF 必须用 base1024README 明确 Multi page / PDF only uses base。长文档容量三条路径的上下文/最大生成长度均为 32768SGLang 需--context-length 32768与 Transformers 的max_length32768保持一致。去重参数no_repeat_ngram_size35固定ngram_window单图 128、多页/PDF 1024注意 infer.py 当前把NGRAM_WINDOW固定为 128手动客户端则按场景分别传 128/1024。推理确定性SGLang 客户端与 infer.py 均使用temperature0便于复现与质检。PDF 前置转换统一走 PyMuPDFdpi300转 PNG 后再多页解析pymupdf是必需的依赖。引用与致谢仓库 README 提供了论文《Unlimited OCR Works》的 BibTeX 引用信息arXiv 编号 2606.23050cs.CV 方向。项目在致谢中说明其构建于 DeepSeek-OCR、DeepSeek-OCR-2 与 PaddleOCR 的模型与思路之上Unlimited-OCR 正是在这些工作的基础上向一次性长时程解析推进的开源实现。赞分享人工智能大模型计算机视觉模型推理服务【免费下载链接】Unlimited-OCRUnlimited OCR Works: Welcome the Era of One-shot Long-horizon Parsing.项目地址https://gitcode.com/gh_mirrors/un/Unlimited-OCR点击查看免费下载相关推荐Xinference 推理后端Backends完全指南llama.cpp、Transformers、vLLM、SGLang、MLX 与投机解码实战Xinference 推理后端Backends完全指南llama.cpp、Transformers、vLLM、SGLang、MLX 与投机解码实战 Xin模型推理服务人工智能大模型本地部署多模态语音MLX-VLM 实战指南在 Mac 上用 Unlimited-OCR 实现文档解析与多页 PDF OCRMLX VLM 实战指南在 Mac 上用 Unlimited OCR 实现文档解析与多页 PDF OCR 本篇技术指南聚焦 MLX VLM 仓库 GitHu人工智能大模型多模态模型推理服务本地部署微调模型量化useful-scripts 速查手册Java 线上排障三件套与命令行提效工具箱useful scripts 速查手册Java 线上排障三件套与命令行提效工具箱 useful scripts 是一个把常用手动操作脚本化的合集3 个开发工具CLI上一篇DeepSeek Coder 1.3B Base 企业级部署方案安全、高效的团队协作配置下一篇tokio-modbus 项目推荐创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑