Files
MinerU/docs/native-async-analysis.md

65 lines
4.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 文档分析的原生异步运行时
PDF 的 high/xhigh 分析在使用本地 vLLM 或远程 HTTP 时,通过常驻运行时执行原生异步推理。
`doc_analyze`、`aio_doc_analyze`、`parse`、`parse_async` 的参数与结果协议保持一致。
## 运行时与共享边界
- 相同有效配置的同步分析、异步分析与 API 预加载共享一个运行时。vLLM 托管路径统一使用 AsyncLLM,
不同时加载离线 LLM 和 AsyncLLM 两套权重。
- 每个运行时拥有一个事件循环线程。同步入口等待线程安全提交的结果,异步入口等待可取消的 Future;
调用方可以多次创建、关闭自己的事件循环。
- HTTP 连接池在所属运行时循环中持续复用。地址、模型、凭据及连接配置仍保持隔离。
- API 应用拥有独立租约。关闭一个应用只释放自身租约;其他应用或独立解析仍持有的实例不会因此关闭。
独立 Python 调用使用进程级模型缓存,退出时清理;显式模型关闭仍由 `shutdown_cached_models()` 完成。
## 并发与取消
- API 的 `--concurrency` 控制同时运行的 job 数,默认仍为 1。同一个 job 内的文件顺序执行。
- `model.vlm.max_concurrency` 控制同一有效配置运行时内的 VLM 在途请求总数,默认 100;
多份文档共享该额度,不各自获得 100 个名额。
- 单文档按既有窗口顺序执行。准备与回填阶段在线程中运行,本地共享模型阶段按设备串行保护;
等待 VLM 时释放保护,允许其他文档推进。PDFium 继续使用 DocVortex 的共享锁。
- 取消会传播到实际任务,但只有底层请求及同步阶段清理完成后,才关闭图片/PDF 和释放 job 名额。
排队取消不会开始解析,已经取消的任务不会再发布结果。
- HTTP 取消保证本地停止等待与清理,远端是否立即停止生成取决于服务端;低频 GPU 指标不能证明即时 abort。
- 本地 LMDeploy、MLX、llama.cpp、Flash/basic 和非 PDF 保持受控线程回退。
取消这些路径需要等待在途同步阶段结束,不承诺立即中断模型计算。
## 分层实现
MinerU 拥有模型构造、缓存、运行时、文档编排和 API 任务生命周期。mineru-vl-utils 提供原生异步抽取及
HTTP 连接关闭接口,不关闭调用方提供的引擎或 executor。DocVortex 的基础访问、语义协议和确定性处理职责不变。
同步与异步 PDF 窗口共同使用准备输入和结果回填函数,保持原生表格优先、文本/公式处理、图像开关与页序。
high 等待外部布局抽取,xhigh 等待两阶段抽取;后置 LLM 增强使用现有协程。
## 验收与性能采集
在项目虚拟环境中执行 `scripts/benchmark_async_analysis.py`;脚本还需要 `psutil`。
配置文件或环境变量提供鉴权信息,不把密钥写入命令行或报告。
```bash
.venv1/bin/python scripts/benchmark_async_analysis.py demo/pdfs/demo1.pdf demo/pdfs/demo2.pdf \
--server-url http://localhost:30000 --tier standard --ocr-mode ocr \
--concurrency 1 2 4 8 --repeats 4 --output output/native_async/http.json
```
本地 vLLM 验收使用 `--engine vllm`,不传 `--server-url`,并确保配置中未设置远程地址。
`--mode sync-thread` 用于同步线程调用;比较旧实现时应使用独立基线源码,固定依赖、输入、模型、窗口和采样配置。
`--save-results` 可保存预热结果用于语义回归;`--cancel-after` 记录异步取消返回耗时。
报告包括文档/页吞吐、解析 P50/P95、含排队的延迟、事件循环延迟、线程及 RSS 峰值。
本地 NVIDIA 环境通过 nvidia-smi 采集解析进程及子进程显存;远端显存缺失时保留空值。
单次样本和模拟后端不能替代 GPU 性能验收;源码位置、文件哈希及配置必须与结果一起保留。
上线性能目标为代表性多文档负载吞吐提升至少 25%,或同吞吐下 P95 降低至少 20%,
同时单文档耗时回退不超过 5%。未达到目标时不扩大默认并发,不宣称性能提升。
本地嵌入式 vLLM 必须另做 Linux CUDA 实机验收;远程 LMDeploy HTTP 通过不能代替该项。
## 两仓交付
本次依赖 mineru-vl-utils 新增的 `MinerUClient.aclose()` 与取消清理能力。
开发验证使用配套的本地 editable 源码。正式交付必须先发布包含这些改动的 mineru-vl-utils 版本,
确认包索引可解析后,再提高 MinerU 的依赖下限;未完成设备验收前保留发布门槛。