Unlimited-OCR 部署运行(13/13):长文档验证 + 端口冲突坑 + 完整使用指南

📅 2026/8/3 7:30:54
Unlimited-OCR 部署运行(13/13):长文档验证 + 端口冲突坑 + 完整使用指南
Unlimited-OCR 部署运行13/13长文档验证 端口冲突坑 完整使用指南这是部署运行篇的终篇也是整个 14 篇系列的收尾。它做三件事(1)用long-horizon-ocr.gif验证长文档 OCR 在修复后依然正确(2)记下两个 Windows 特有的运维坑本机网络环境变量干扰 health check、端口 10000 被遗留服务占用(3)给你一份完整使用指南——怎么用 OpenAI 兼容 API 真正调用这个服务。如果你只想知道我怎么用直接跳到第四节。一、长文档 OCR 验证修复在长输入上依旧成立assets/long-horizon-ocr.gif是 280 帧、1916×954 的长文档动画。验证脚本test_long_horizon.py用两种输入测 第 10 篇 的乱码修复在长文档上是否仍成立(A) 单帧frame 0elapsed54.5s, out_len2610头部header [8,20,79,40]Unlimited-OCR header...连贯。(B) 12 帧均匀采样拼接长图resize 宽 1280 → 1280×7644模拟长文档elapsed313.7s, out_len42571头部header [0,0,999,11]Unit 1 Unit 2 Unit 3...连贯长文档无乱码 / 崩溃。两者均输出结构化 OCR证明第 10 篇的3 文件还原修复在长文档 / 多区域输入上依旧成立。gundam图像模式base_size1024, image_size640, cropTrue处理器用 PIL 单图解码GIF 只取 frame 0多图仅 tiny/small/base 支持模型本身不接受 GIF 多帧。所以长文档建议用多帧拼接成一张高图的方式而不是把 GIF 多帧当多图。二、运维坑①本机网络环境变量干扰 health checkHTTP 000本机若设了HTTPS_PROXY指向某个本地转发端口urllib / curl 会把127.0.0.1:10000也路由到该端口→ health 检查返回HTTP 000但 raw socket 能连、服务实际在跑。排查时极易误判服务没起来。解决所有请求脚本开头必须清理该网络环境变量importos os.environ.pop(HTTPS_PROXY,None)os.environ.pop(HTTP_PROXY,None)os.environ.pop(ALL_PROXY,None)os.environ[no_proxy]127.0.0.1,localhosttest_long_horizon.py/smoke_moe.py已内置这段。哪怕你用 curl 手动测也要先set HTTPS_PROXY清空。三、运维坑②端口 10000 被遗留服务占用多次启动会出现[Errno 10048] address already in use——旧 worker 由 base conda python 启动且会重生占着 10000。启动前先清理:: 定位占用10000的 PIDnetstat-ano|findstr:10000 |findstrLISTENING:: 杀掉/T 连子进程一起杀 taskkill /F /T /PID占用PIDinfer.py的start_server()已内置这段启动时自动netstat找占用 PID 并taskkill再启动单一干净服务详见 第 09 篇。冷服务首请求极慢triton 对所有 kernel 做 JIT 编译首请求可能 300s。客户端超时要放宽如 600s服务不是卡死是在编译 生成。热身后的请求回到 ~50–60s 级。四、使用指南怎么用这个 OCR 服务服务按 第 09 篇 启动后对外暴露OpenAI 兼容的/v1/chat/completions接口端口 10000。你不需要懂 sglang 内部像调 GPT 一样调它即可。4.1 最小 Python 调用单图 OCRimportos,base64,json,urllib.request# 关键清掉会把 127.0.0.1 路由到本地转发端口的环境变量os.environ.pop(HTTPS_PROXY,None);os.environ.pop(HTTP_PROXY,None);os.environ.pop(ALL_PROXY,None)os.environ[no_proxy]127.0.0.1,localhostdefocr(image_path:str,prompt:strdocument parsing.)-str:withopen(image_path,rb)asf:b64base64.b64encode(f.read()).decode()payload{model:Unlimited-OCR,messages:[{role:user,content:[{type:image_url,image_url:{url:fdata:image/png;base64,{b64}}},{type:text,text:prompt},]}],temperature:0,stream:False,images_config:{image_mode:gundam},# Unlimited-OCR 专用图模式}requrllib.request.Request(http://127.0.0.1:10000/v1/chat/completions,datajson.dumps(payload).encode(),headers{Content-Type:application/json},)withurllib.request.urlopen(req,timeout600)asr:# 首请求放宽到 600sreturnjson.load(r)[choices][0][message][content]print(ocr(assets/baidu.png))输出示例|det|title [14, 0, 999, 999]|/det|Baidu 百度4.2 curl 调用curlhttp://127.0.0.1:10000/v1/chat/completions\-HContent-Type: application/json\-d{ model: Unlimited-OCR, messages: [{role:user,content:[ {type:image_url,image_url:{url:data:image/png;base64,$B64}},{type:text,text:document parsing.}]}],temperature:0,stream:false,images_config:{image_mode:gundam}}4.3 用项目自带脚本# 单图.venv\Scripts\python.exe infer.py--image_path你的图片.jpg# 文件夹批量.venv\Scripts\python.exe infer.py--image_dir你的图片文件夹# 流式推理测试.venv\Scripts\python.exe test_inference.py assets/baidu.pngdocument parsing.infer.py会自动复用已有服务 / 清理占用端口 / 启动服务 / 发请求 / 停止服务。4.4 长文档 / 多页建议把多页或长图拼接成一张高图宽统一 resize 到 ~1280高度按需用gundam模式一次送进去见第一节验证。--context-length 32768已为长文档留足上下文更长的文档可调大但注意--mem-fraction-static要相应留足 KV cache。首请求慢属正常把客户端超时设 600s之后请求会快很多。五、系列结语14 篇写到这整件事讲完了编译移植篇01–08一个被广泛认为Windows 装不了、只能上 WSL/Docker的高性能推理框架我们拒绝逃生在原生 Windows 上从源码把它编译并跑通——横跨 FlashInfer 前置编译、环境、GCC→MSVC 方言、MSVC 语义严格性、架构裁剪、链接收尾以及支撑这一切不散架的工程方法论。部署运行篇09–13编出来之后怎么真正跑起来——正确启动、两个经典排障乱码根因 / 环境变量块崩溃、MoE 性能调优、长文档验证以及本篇的使用指南。如果这个系列只留下一句话我希望是“官方没有提供”从来不等于做不到。缺的往往不是可能性而是有没有人愿意、并且有方法把那条没人走过的路一步一个脚印、留着可复现的记录走到底。愿它对你自己的那场硬仗有用。系列导航全 14 篇编译移植篇怎么把 sglang 从源码编出来00 · 系列总览01 · EPGF 环境地基与岔路口02 · 结论与可行性三铁证 --no-deps03 · 编译篇·前置FlashInfer Windows 源码编译04 · 编译篇·环境关05 · 移植篇(上)GCC 方言06 · 移植篇(下)语义严格与崩溃07 · 编译篇·收尾架构裁剪与 LNK201908 · 方法论部署运行篇怎么跑起来并排障09 · 正确启动 SGLang Unlimited-OCR10 · 排障①推理输出乱码/数值错误根因定位11 · 排障②环境变量块超限导致 spawn 子进程崩溃12 · 性能调优RTX 3090 MoE triton autotune config13 · 长文档验证 端口冲突坑 使用指南本篇参考资料与延伸阅读以下为本文涉及的官方仓库、文档与规格站建议发布前点一遍确认可达Unlimited-OCR 官方仓库模型与项目源码SGLang 官方仓库SGLang 官方文档启动参数 / OpenAI 兼容 APIflashinfer-windowsWindows 兼容 fork编译前置vllm-windows同作者可对照的 Windows 移植思路PyTorch Windows CUDA 预编译索引cu130NVIDIA CUDA Toolkit 下载uv 官方文档Python 环境治理MSVC /Zc:preprocessor 标准预处理器MSVC 致命错误 C1001编译器内部错误nvcc -Xcompiler 转发 host 编译器选项CMake 生成器Visual Studio / NinjaRTX 3090 规格GA102 / sm_86共享内存 100KBCUDA 共享内存上限与 dynamic_shared_memory 限制Windows 子进程环境变量块限制CreateProcess / ~32KBOpenAI 兼容 API 参考推理调用