连续批处理 continuous batching

连续批处理 continuous batching 批处理大模型推理引擎不会每个请求独立推理会把一些请求组成一个batch进行批处理这是推理引擎提升吞吐率的关键。使用批处理后吞吐相比单请求会大幅提升但还是有个问题如下图一个batch4的批处理开始推理后会运行到所有序列推理都结束了才会结束因此整个batch的推理时间取决于最慢的序列在这里是第二行的序列到T8才出现END符号其他序列即使已经推理完了也只能等着并且在这个batch结束前不能安排下一个batch在第二行结束前计算资源被浪费了。这被称为request level的batch必须等待batch内每个请求都结束推理才退出。这也被称为动态批处理在传统AI推理中request level就是最好的方法因为传统AI很多不是生成式模型或者是生成式但是生成长度可控那么可以控制一个batch内的生成长度全相同这样能实现和连续批处理接近的吞吐实现还更简单。比如一个CV模型的训练每轮选出一个batch的图片计算梯度batch内的图片如果像素相同则处理时间都是完全相同的。连续批处理相对于前面的request level batch另一种策略是iteration level具体方法是每个batch都只让所有请求推理一个token然后退出检查是否有序列输出的是END符号这些序列的推理结束了把他们从序列中换出把新的待推理序列换入。这样可以消除前面request level的浪费从时间轴来看每个时刻都是最大的batch size并行如下图最上面是单请求推理中间是动态批处理每次的批处理长度都不一样。最下面时连续批处理每个时间片都会检查batch内的序列是否结束结束则填充新的序列永远都是满batch并行达到了最大的并行度在连续批处理下增大batch size能获得秩序提升的收益而静态批处理batch增大后更容易被少数长输出请求拖慢收益并不明显