推論與服務
連續批次(continuous batching)
傳統的靜態批次把一組固定的請求綁在一起跑,必須等批次中最慢的那個生成完才能回傳任何結果。由於大型語言模型的輸出長度差異極大,短回覆會被長回覆綁架,已完成的位置只能空等其他還在硬磨的序列。於是吞吐量崩潰、尾端延遲暴增。連續批次打破這點的方法,是以「單一解碼步驟」而非「整個請求」為運作的粒度。
在每一次 token 生成迭代之後,排程器都會重新檢視正在跑的批次:任何觸發停止條件的序列立刻退場、釋放它的 KV 快取格,任何在排隊的請求則被接納進這個剛空出的格、加入下一次迭代。於是批次的組成持續地、每一步都在變動,GPU 被有用的工作填滿,而不是被填充浪費。再搭配讓接納與驅逐序列都很便宜的分頁 KV 記憶體,這正是伺服器能在快速流動、長度混雜的工作負載下維持高吞吐量的原因。
剩下的微妙之處,是要平衡需要一次沉重 prefill 的新到提示,與每次只需一步的進行中解碼——這正是分塊 prefill 與 prefill/decode 排程的動機。
連續批次是迭代層級的排程,靜態批次是請求層級的。接納的單位是「一個解碼步驟」,這就是為什麼一個又慢又長的生成不再會卡住又快又短的請求。
又称
另见