当内存只适合处理一个模型时,并发跨模型请求处理会中断
当内存只适合一种模式时, 并行的跨模型请求处理中断
** 描述错误**
当OMlx被配置为一次只能装入一个模型的内存限制时,同时提出的不同模型的请求要么被HTTP 507拒绝,要么被屏蔽20-37秒. 已经装入的型号的推断也因为Ayncio锁在另一个型号的装入时会将所有的发取都序列化而出现出站.
这与同型号上的 omlx 处理 2+ 并发流不同( 它通过每引擎排程器队列运行良好) 。 这是一个单独的失败模式 。
** 明显症状**: 管弦乐团的Qwen代理在试图调用Gemma模型时似乎停止了——没有出错,没有输出,只是停留了到Qwen请求完成或者被内存执行器所杀.
-- -- . . .
□ 重现
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
启动 omlx 有积极的记忆后卫( 最高为~38-42GB)
omlx 服务 -- -- model- dir ~/ models -- -- 记忆- 护卫积极性
Quen3.6-35B (~21GB) + Gemma-4-12B (~11GB) = 32GB > 上限 ~ 只有一款适合
加载 Qwen(主型号),然后发送同步的Gemma请求
卷起 - H “ 认证: 熊鼠键”
http://localhost:8000/v1/chat/完成\?
-d"{"型号":"qwen3-6-35b-a3b-oQ4-mtp","信息":[{"作用":"用户","内容":"测试"],"流":"真实"]
当Qwen运行时:
卷起 - H “ 认证: 熊鼠键”
http://localhost:8000/v1/chat/完成\?
-d"{"型号":"gemma-4-12b-it-qat-4bit","信息":[{"作用":"用户","内容":"测试"],"流":"真".
预期(buggy): 要么507 minory Error 要么20 -37s的摊位.
预期( 正确): 请求在 Qwen 后面的队列, 释放内存后返回 。
-- -- . . .
□ 预期行为
跨模型请求应排队等待繁忙模型排出. 在另一人的负载期间,Ayncio锁封堵已经装入的模型是不会预期到的——不同装入的模型上的并发流都应该能够服务于推论.
-- -- . . .
□到底发生了什么?
1. `EnginePool.get engine ()' 在整个负载序列中有一个专属锁(`engine pool.py:664-780')
众生. 锁定(定义取自 " engine pool.py:135 " )将整个 " get engine () " 包起来 -- -- 包括入境前检查、所有驱逐回路、 " X " load engine () " 电话和金属缓冲操作。 这意味着:
- 已经装入的模型的请求在另一个模型装入时被屏蔽
- 要求已经装入的Qwen引擎在Gemma装入时等待(反之亦然)
2. QQfind lru victim() 跳过有主动请求的模型(`engine pool.py:832-858')
``` ZZ
如果 e. in us > 0 :
继续
如果自定义。 entry has action requests(e) :
logger.debug( f"正在测试受害者 “% {mid} ” : 有活动的请求)
继续当同时提出的请求针对不同的模型,而内存只适合一个时,所有模型都有主动请求 – 没有找到可驱逐的被害者 – 接收回路会产生"不充足的记忆" (HTTP 507).
这概括了两种不同的失败模式:
- `模式-光是模式 ' . . . . . . .
内容来源: jundot/omlx