Generasi autoregresif tidak menyelesaikan setiap request pada iterasi yang sama. Satu sequence dapat menghasilkan stop token setelah beberapa langkah decode, sedangkan sequence lain masih aktif hingga ratusan langkah berikutnya. Batch statis mengikat request tersebut sampai batas batch tercapai. Continuous batching memutus ikatan itu dengan mengizinkan himpunan aktif berubah di antara iterasi model.
Perubahan utamanya berada pada granularitas scheduling. Request tidak lagi menjadi unit scheduling yang tidak dapat dipecah selama seluruh proses generasi. Sistem serving dapat membentuk batch eksekusi untuk satu iterasi, memperbarui state request setelah iterasi tersebut, mengeluarkan sequence yang selesai, lalu memasukkan pekerjaan antrean sebelum langkah eksekusi berikutnya.
Batch statis mempertahankan keterikatan antar-request
Misalkan tiga request masuk bersama:
request A: 18 iterasi decode
request B: 73 iterasi decode
request C: 141 iterasi decodePada batching tingkat request, kelompok tersebut tetap terikat secara struktural pada request terpanjang. Request yang lebih pendek dapat berhenti menghasilkan pekerjaan token yang berguna jauh sebelum kelompok selesai. Request baru juga dapat tetap berada di antrean walaupun sebagian kapasitas di dalam kelompok awal sudah tidak terpakai.
Perilaku ini kurang sesuai dengan beban generasi karena panjang output umumnya belum tetap saat admission. Stop condition, batas maksimum token, dan token yang dihasilkan menentukan kapan tiap request keluar. Batch yang dibentuk dari request dengan ukuran prompt serupa tetap dapat menyimpang jauh selama decoding.
Continuous batching memindahkan batas itu ke dalam proses. Setelah satu iterasi selesai, scheduler dapat menilai kembali himpunan aktif. Bentuk eksekusi dapat berubah selama umur sebuah request.
Scheduling per iterasi mengubah anggota batch
Transisi state yang disederhanakan dapat digambarkan seperti ini:
antrean -> admitted -> aktif -> selesai
^ |
|___|
iterasi berikutnyaPada setiap titik scheduling, sistem memiliki beberapa kategori state: request antrean yang menunggu admission, request aktif dengan state generasi yang dipertahankan, dan request yang baru selesai. Scheduler memilih pekerjaan untuk pemanggilan model berikutnya sesuai batas memori, token, serta batas lain yang spesifik terhadap implementasi.
Mekanisme ini tidak berarti setiap engine memakai kebijakan scheduling yang sama. Satu sistem dapat memprioritaskan decode, sistem lain dapat memasukkan prefill secara agresif, sedangkan sistem lain membagi prefill panjang menjadi beberapa chunk. Continuous batching menyatakan kemampuan mengubah anggota batch antar-iterasi eksekusi; prioritas, fairness, admission control, dan preemption tetap merupakan keputusan kebijakan yang terpisah.
Pemisahan tersebut penting saat membandingkan sistem serving. Dua engine dapat sama-sama mendukung continuous batching tetapi menghasilkan distribusi latensi berbeda karena scheduler mengambil keputusan berbeda pada batas scheduling yang sama.
State KV membuat admission menjadi keputusan memori
Request yang sedang decoding membawa state dari satu iterasi ke iterasi berikutnya. Pada serving Transformer, state tersebut biasanya mencakup key-value cache yang merepresentasikan token sebelumnya untuk attention. Mengeluarkan request yang selesai dapat melepaskan kapasitas cache, sedangkan memasukkan request baru menciptakan state baru yang harus sesuai dengan kebijakan memori engine.
Karena itu, adanya slot batch yang kosong belum cukup untuk memastikan request lain dapat masuk. Admission dapat bergantung pada kapasitas KV cache yang tersedia, panjang prompt, token budget yang dikonfigurasi, alokasi blok cache, serta batas spesifik engine lainnya.
Scheduler setidaknya bekerja pada dua dimensi resource: pekerjaan eksekusi untuk iterasi berikutnya dan state persisten yang dipertahankan antar-iterasi. Kebijakan yang mengisi kapasitas komputasi secara agresif tetap dapat menghadapi tekanan memori jika sequence aktif mengakumulasi cache besar.
Pengelola KV cache berbasis page atau block dapat membuat alokasi lebih fleksibel, tetapi tidak menghapus batas tersebut. Mekanisme alokasinya berubah. Lapisan serving tetap memerlukan kebijakan untuk menentukan state request yang tetap resident dan pekerjaan baru yang dapat masuk.
Prefill dan decode memiliki bentuk kerja yang berbeda
Continuous batching sering dibahas melalui iterasi decode, tetapi request baru harus memproses prompt terlebih dahulu. Prefill dapat melibatkan banyak token input sekaligus, sedangkan langkah decode autoregresif konvensional memajukan sequence aktif dengan satu token hasil generasi.
Pencampuran kedua fase tersebut menimbulkan ketegangan scheduling. Prefill besar dapat menambahkan pekerjaan yang signifikan pada iterasi yang juga membawa request decode sensitif terhadap latensi. Menunda seluruh prefill dapat menjaga cadence decode, tetapi request antrean menjadi lebih lama menunggu dan utilisasi agregat dapat turun pada beban tertentu.
Continuous batching sendiri tidak menyelesaikan ketegangan tersebut. Sistem dapat menggunakan prioritas fase, token budget, chunked prefill, atau mekanisme lain. Desain itu merupakan lapisan tambahan di atas kemampuan yang sama untuk mengubah anggota batch pada batas scheduling yang lebih halus.
Batas arsitekturalnya berguna: keanggotaan dinamis menyediakan kesempatan untuk scheduling; kebijakan menentukan cara kesempatan tersebut digunakan.
Throughput dan latensi bergantung pada bentuk beban
Scheduling per iterasi menghapus satu sumber kapasitas menganggur: request yang selesai tidak perlu mempertahankan batch asalnya tetap utuh. Request antrean juga dapat masuk tanpa menunggu semua sequence pada kelompok sebelumnya selesai.
Sifat tersebut tidak menetapkan pengali performa tertentu. Dampaknya bergantung pada arrival rate, panjang prompt, distribusi panjang output, kapasitas memori, ukuran model, strategi parallelism, kebijakan scheduler, dan perilaku accelerator. Pada concurrency rendah, mungkin hanya sedikit pekerjaan antrean yang tersedia untuk mengisi kapasitas yang baru dilepas. Pada beban tinggi, admission agresif dapat meningkatkan utilisasi sekaligus mengubah queueing dan latensi per token.
Karena itu, continuous batching lebih tepat diperlakukan sebagai mekanisme scheduling, bukan jaminan throughput. Pengukuran sebaiknya memisahkan latensi request, time to first token, interval antar-token output, queueing delay, throughput, dan okupansi memori. Satu angka agregat token per detik dapat menyembunyikan scheduler yang mengutamakan satu fase atau kelas request dengan mengorbankan yang lain.
Keanggotaan dinamis adalah batas utamanya
Properti intinya cukup sempit: himpunan request yang ikut dalam eksekusi dapat berubah pada titik scheduling per iterasi. Sequence yang selesai dapat keluar, dan pekerjaan antrean yang memenuhi syarat dapat masuk, tanpa lebih dulu mengosongkan kelompok request tetap.
Bagian lain di sekeliling properti tersebut tetap menjadi keputusan desain sistem serving. Alokasi cache menentukan representasi state persisten. Admission control menentukan apakah pekerjaan baru dapat ditampung. Kebijakan scheduling mengurutkan pekerjaan prefill dan decode. Aturan fairness menentukan pembagian layanan antar-client atau antar-request. Preemption menentukan apakah pekerjaan aktif dapat digeser.
Pemisahan ini menjaga continuous batching agar tidak menjadi label umum untuk seluruh optimasi inferensi. Kontribusi teknisnya adalah menghapus keanggotaan kelompok request yang statis sepanjang umur autoregresif, sehingga scheduler memperoleh kesempatan berulang untuk membentuk ulang eksekusi saat request datang, maju, dan selesai.