batching VS. continuous batching
batching是所有requests的output都生成完毕之后,才能开始处理下一个batch。一般要做input padding,要等待凑够batch才运行(也有超时bar)。
continuous batching是每完成1个request,就让1个新request加入到batch里。好处:可以让decode阶段的一个batch的token数目不减少,确保计算密度。
continuous batching VS. chunked prefill
VLLM里,前者是prefill优先。新到的prefill请求,打断所有decode请求。且prefill和decode不batching。
后者是decode优先。且prefill请求和decode请求可以batching到一起。decode那个batch的token较少填不满batch时,才会把prefill加进来。prefill的tokens太多时,分chunk每次做一段。
如下图,chunked prefill,deepspeed的论文:
2024年初;VLLM是prefill和decode不batch到一起。Orca是两者batch到一起。DeepSpeed是chunked prefill,即把input拆分,和decode阶段的batch到一起。