SH

Soloharness

概念 · 辨析 · Agent

← 返回概念辨析

Concept Contrast Fable

听起来是一个东西,打开来是两套开关

连续批处理和动态批处理在大多数文档里被当作同一件事,但在具体实现中,槽位的入队时机、释放策略和批内请求的可移除性不同。用错了会导致延迟抖动或槽位浪费。

寓言

两家面馆都在煮了就走,但换槽和退碗的规矩不一样

城里有两家汤面馆,都说自己会把客人的面单合在一锅里煮。老客一听觉得差不多,反正都是攒几碗一起下锅,省火、省水、省人手。直到赶集日客人排到巷口,两家馆子的差别才露出来。

南馆的灶台一直开着。第一批面还没完全出锅,后厨就把新来的小碗面塞进空出的竹篓里;有客人吃得快,竹篓腾出来,下一碗马上补进去。锅里始终有面在煮,灶火不等整锅清空才接下一轮。

北馆也会看队伍长短来凑锅。掌柜发现来了十个客人,就把十碗凑成一锅;下一批客人来得慢,就少凑几碗开锅。它的组批会随到客节奏变化,但每一锅仍是一锅一锅地起落。

一个外地老板来考察,听两家都说“动态”,差点签错合同。南馆师傅把竹篓举起来给他看:这里的关键是锅在运行时不断补位,老面和新面可以交错存在。北馆掌柜说:我的关键是开锅前按当下队伍凑批,开了锅就按这一批走完。

当天午后来了个急单。南馆刚有一个竹篓腾空,急单立刻补进去,虽然旁边还有几碗老单没出。北馆要等当前一锅出完,才把急单放到下一锅里。急单等得更久,但每一锅的账更整齐。

商会后来改了登记册:连续批处理强调运行中持续补位,让槽位随生成结束逐步释放;动态组批强调按请求到达情况临时凑批,可以在开批前调大小。两个词有重叠,但不能把“开批前凑批”和“运行中补位”混成一件事。

从那以后,采购推理引擎的人都会问三句话:新请求能不能插进正在运行的队列?已完成的槽位能不能立刻释放?批次大小是在开批前决定,还是运行中持续变化?三句问完,谁在卖哪种灶台就清楚了。

后来外地老板把两家灶台都买回去试跑,账本才真正说话:南馆那套在零散客流里少空锅,北馆那套在整批外卖里更好算账。术语相近,适合的生意并不相同。

连续批处理

推理服务运行中持续接纳新请求,并在已有请求完成后释放槽位、补入新请求,以提高在线服务吞吐和资源利用率。重点是运行中的连续补位。

动态批处理(飞行批处理)

根据请求到达情况动态组成批次,常用于在吞吐和延迟之间折中。重点是按当下流量凑批,具体实现可能与连续批处理有重叠,需要看槽位释放和补位语义。

故事对应

  • 南馆灶台一直开着并不断补位:continuous batching 的运行中连续补位
  • 北馆按当下客流凑一锅:dynamic batching 的开批前动态组批
  • 急单能否插进正在运行队列:区分两类实现的关键问题
  • 竹篓腾空后是否马上补入新单:槽位释放策略
  • 两家都说动态但机制不同:供应商术语需要追问实现细节
  • 三句采购问题:把抽象术语落到可验证行为

落到推理引擎选型

评估推理引擎时,不要只看是否支持批处理,要追问具体语义:新请求能否插入正在运行的队列,已完成请求的槽位能否立刻释放,批次大小是在开批前决定还是运行中持续变化。在线对话通常更关心连续补位带来的资源利用率和尾延迟表现;离线任务更容易接受按批凑齐后统一处理。供应商说支持 dynamic 或 continuous 时,先让它画出请求进入、生成、释放、补位的时序图。