#274·nano-vllm

[错误] 计划器: `assert scheduled_seqs` 在解码耗尽 KV 缓存块时会导致引擎崩溃

作者: xbsheng创建于 2026年9月9日更新于 2026年9月14日

说明

Scheduller.scheduler ()' 与Assertion Error: exchedule seqs'相撞,** 当 KV 缓存被耗尽而先发制人不能腾出空间时—— 周围代码被明确写入处理的合理后压条件。

zz
#纳米vllm/引擎/排程器.py,解码相
自动运行和 len( 排程  seqs) <自. max  num  seqs:
下行=自运行. popleft ()
而非自定义。 block manager.can append(seq) :
如果自行运行 :
自定义( 自行运行. pop ())
其他情况:
自定义( seq)
换行
其他情况:
. . . . . . . .
已排定( seqs.append(seq)
维护已排定的( S) <- crash here
自定义。 running. extendle left( 逆向( 已排定的  seqs) )

如何繁殖

最小重置,不需要模型/重量(驱动器Scheduler' +BrockManager',直接带有2个块的 KV 缓存;单序列,其即时填充整个缓存):

最小可重置( 无火炬/ triton/ 型号重量; 直接驱动调度器 ) :

[Python] 导入 importlib.util, sys, 类型 从类型导入简单Namespace ROOT = “ ” def 负载( 名称, 路径) : spec = 导入lib.util. spec from file location(名称,路径) m=导入lib.util.module from spec( spec); sys.modules[名]=m spec.loader.exec module(m);还原 m pkg=类型. ModuleType ("nanovllm"); pkg. path = [f"{ROOT}/nanovllm"]. sys.modules ["nanovllm"] = pkg (英语). eng = 类型. ModuleType ("nanovllm.engine"); eng. path = [f"{ROOT}/nanovllm/engine"]. sys.modules ["nanovllm.engine"] (英语). Eng. cfgstub = 类型. ModuleType ("nanovllm.config"); cfgstub. 配置=对象 sys.modules ["nanovllm.config"]=cfgstub (英语). 下接 m=负载 ("nanovllm.engine.sequence",f"{ROOT}/nanovllm/engine/sequence.py"). 装入 ("nanovllm.engine.block manager", f"{ROOT}/nanovllm/ engine/block manager.py") 中文本无需修改 。 sch m = 负载 ("nanovllm.engine.engine", f"{ROOT}/nanovllm/engine/chenger.py").

S, NB = 4, 2 # 块 大小 = 4, 缓存只持有 2个块= 8个令牌 cfg = 简单Name space(max num seqs=8, max num bitched tokens=64,eos=-1). kvcache block size=S, num kvcache blocks=NB) 互联网档案馆的存檔,存档日期2013-12-21. 序列=下行 米. 序列; 序列. block size=S sch = sch m (英语). 调度器( cfg) sch.add( 顺序( 列表( 范围( 8) ) ), 简单Name space( 温度= 0.0, 最大 tokens= 100, 忽略 eos= False)) ) 用于在幅度内步骤(5): 下下文,为 prefill=sch.chedule () 如果不是以下各项: 打印(f" step {step}: 空批(is prefill is prefill})") 换行 sch.post process (seqs, [1000+ step] * len (seqs, is prefill) # 假冒非EOS输出 s = 后几个 [0] 打印( f) “ step { step} : pre int( is prefill) )} (法语) 已缓存 {s.num cached tokens} block(s.block table)}") 页面存档备份,存于互联网档案馆.


输出( 第1步发生碰撞):

步骤 0: 预=1 len=9 缓存=8个块=2 回溯( 最近最后一次通话) : ./nanovllm/engine/cheduler.py, 第74行,在时间表中 声明已排定( S) 占卜错误: profile seqs


实际模型等同物:设置“ 最大” 大小足够大
. . . . . . .

内容来源: GeeeekExplorer/nano-vllm