用途与实际影响
这项功能怎样使用
为什么需要它
只限制窗口等待会留下后台推理,只看进程存在又不知道任务是否健康。这个运行层把服务、推理进程、显卡资格和任务期限分开管理,并把冲突、超期、取消与模型错误交回调用方。
举个实际例子
我可以说:“这次识别卡住了,取消它,但别影响听写。”系统只取消这个已确认任务。PCConfig允许OCR(光学字符识别)和ASR(自动语音识别)各一份跨类并行;已有同类OCR(光学字符识别)或Ollama占用时才报告冲突,不自动排队、不结束其他程序抢资源。
最后我会得到什么
识别正常就交回文件;卡住、取消或显卡冲突时给出准确任务和清理状态。服务在、显卡可用、模型已加载与这份文件已读完是四件不同事。
正常时
取得资源并在期限内完成后交回实际文件,同一种模型可复用已加载进程。
发现问题时
取消、超时或内存不足时只结束本次识别,留下具体原因。
入口不可用或证据不足时
显卡或本机服务不可用时停这条路线,不暗中换云端或结束其他程序。
从哪里开始
在本机 LocalOCR 对话中点名要查询或取消的识别任务;服务状态可用项目“只看服务状态”入口查看。
需要准备什么
- 任务标识
- 具体超时、卡住或显卡冲突现象
从开始到拿到结果
- 1
先查任务实际状态
系统确认本次识别是否仍在运行、是否占用显卡,以及服务是否真是 LocalOCR;只看进程名不够。
- 2
只管自己的资源
同模型可复用进程;期限、取消或故障只处理本服务对应任务。
- 3
看清停止结果
交回成功文件或精确冲突和清理状态;别的本地模型或听写任务不会因此被当成应停对象。
技术实现与依据
这里保留实现、关键条件、精确入口、历史记录和验证结果。
监督执行与回收已实现关键规则与设计选择
health.active_jobs 是忙碌事实源,缺失即未知。
300 秒默认期限覆盖整次请求和加载,不是每页或每文件各给 300 秒。
显卡未探测、模型未驻留和显卡不可用不能混写。
当前机器调度策略允许一份OCR(光学字符识别)与一份ASR(自动语音识别)同时持有资格;两份OCR(光学字符识别)仍互斥,Ollama与这两类外部任务互斥。不据此推断任意模型都可并行或全都互斥,也不把源码策略冒充本轮真实并发验收。
本模块用到的名词
- lease(资源使用资格)
- 现有协调器确认当前任务可使用显卡;不是永久占有权,丢失后必须停止。
- execution deadline(执行期限)
- 服务端真正执行的总时限,与 HTTP 传输和调用脚本等待不同。
- loaded_models(驻留模型)
- 当前进程已加载的模型,不等于所有登记模型都通过真实推理验收。
专业定义
本机服务、温热模型与显卡协调共同工作;出错时只处理本次明确任务。
解决什么
防止冷启动反复、模型抢资源、调用端退出后遗留推理,以及粗暴停止服务误伤其他任务。
当前怎样实现
- server.py 默认只监听 127.0.0.1:18665;18666 已有其他产品用途,不是可猜测的后备端口。
- runtime.py 维护一个受监督 warm worker(温热推理进程);同模型复用,模型切换时重建,协调层不直接导入 Paddle。
- gpu_broker.py在GPU探测、模型导入、加载和推理前向现有LocalGpuBroker(本地 GPU 调度器)申请localocr/localocr-cli租约,失去资格只结束相应执行。PCConfig 912b1af的broker.py把OCR(光学字符识别)与ASR(自动语音识别)分成两个固定家族,跨家族可并行,同家族及Ollama会话/请求与外部租约互斥;本轮没有启动模型重测该并发路径。
- DEFAULT_TIMEOUT_SEC=300,MAX_TIMEOUT_SEC=7200;DEFAULT_MEMORY_LIMIT_BYTES=30_000_000_000,限制本服务进程树而不是整机其他程序。
- 执行监管处理明确取消、期限、进程异常和后代回收;服务重用不是新增持久队列,重复请求冲突不自动排队。
- HTTP 400 表示输入/配置错误,409 表示活跃任务或资源冲突,503 表示协调器或租约失败,504 表示执行期限;必须保留 detail 和任务定位。
执行流程
- 1
读取本服务身份与 active_jobs。
- 2
确认本次任务及显卡资源资格。
- 3
复用同模型进程或按需切换模型。
- 4
按整次请求期限与进程树内存上限监管。
- 5
成功交回结果;取消或故障结束对应执行并说明原因。
边界
- 当前服务是本机入口,不是带远程访问授权的公网产品。
- 只对明确本次任务和本服务进程树执行回收。
- 常规连续识别保留温热进程;确需给其他任务让资源时才释放,避免冷启动抖动。
失败与恢复
- gpu_status=not_probed
- 说明尚未进行显卡任务或探测,不解释成 CPU 降级或显卡故障。
- 显卡冲突或协调器不可用
- 返回 409/503 与实际原因,不绕过现有资源协调。
- 执行期限、取消或内存越界
- 结束相应推理进程及受管后代,保留明确错误,不把窗口退出当完成。
- 服务健康缺 active_jobs
- 保持 readiness_unknown,不按空闲继续提交。
真实入口
E:\Projects\Tools\LocalOCR\localocr\runtime.py温热进程、期限与回收
E:\Projects\Tools\LocalOCR\localocr\gpu_broker.py现有显卡协调
E:\Projects\Tools\LocalOCR\localocr\server.py本机服务与状态
E:\Projects\Tools\LocalOCR\release_resources.ps1按需资源释放
如何验证
- 普通生命周期与调用入口测试验证受控的取消、期限、回收和身份行为,不冒充真实极端显卡压力测试。
- 当前按需服务状态与9月17日合成样例是不同证据;本轮只回读运行元数据和来源验收,技术总览分别列出。
- 没有为网页验收重启电脑、停止其他模型或修改常驻配置。
与其他模块的关系
输入模块通过本机入口进入,任务模块提供明确定位;本模块控制真正执行与资源,结果质量仍回到结果复核模块。
