Continuous Batching und statisches Batching: So funktioniert LLM-Scheduling

Automatische Übersetzung

Dieser Artikel wurde automatisch aus der englischen Originalversion übersetzt.

Statisches Batching fasst Anfragen für einen Inference-Durchlauf zusammen. Continuous Batching aktualisiert die Menge aktiver Anfragen zwischen den Generierungsiterationen: Abgeschlossene Anfragen werden entfernt, und wartende Anfragen werden aufgenommen, wenn sie die Voraussetzungen erfüllen. So kann ein Server Kapazität wiederverwenden, ohne auf den Abschluss aller ursprünglichen Anfragen zu warten.

Für Serving-Engineers hängt der Nutzen von unterschiedlichen Antwortlängen, der Scheduling-Strategie, der Speicherkapazität und den Latency-Anforderungen ab.

Unterschiedliche Ausgabelängen vergleichen

Angenommen, drei Anfragen benötigen 10, 40 und 100 Ausgabe-Tokens. In einer einfachen Generierungsschleife mit festem Batch, die abgeschlossene Anfragen nicht ersetzt, wird die von den ersten beiden belegte Kapazität frei, bevor die dritte Anfrage endet. Der Server wartet trotzdem auf die längste Antwort des Batches, bevor er einen weiteren vollständigen Batch startet.

Ein Scheduler auf Iterationsebene kann jede abgeschlossene Anfrage entfernen und eine andere aufnehmen. Orca führte ein Design für LLM-Serving mit diesem Scheduling-Ansatz ein. Die Aufnahme erfordert weiterhin freie KV-Cache-Blöcke und ein passendes Iterationsbudget. Continuous Batching bedeutet nicht, dass jede Anfrage in der Warteschlange sofort startet.

Neue Prompts benötigen außerdem Prefill. In Abschnitte unterteiltes Prefill kann sich das Iterationsbudget mit laufenden Decode-Vorgängen teilen. Die Aufnahme- und Prioritätsregeln des Schedulers beeinflussen deshalb sowohl die Zeit bis zum ersten Token als auch die Abstände zwischen späteren Tokens.

Scheduler und vollständige Runtime vergleichen

Anyscales Experiment von 2023 berichtete gegenüber einer einfachen Baseline etwa den Faktor 4 für FasterTransformer, 8 für seine Continuous-Batching-Konfigurationen und 23 für vLLM. Es verwendete OPT-13B, eine A100-40GB, 1,000 Anfragen, Eingaben mit 512 Tokens und eine exponentielle Verteilung der Ausgabelängen mit einem Mittelwert von 128 Tokens. Diese Ergebnisse gelten für vollständige Implementierungen in diesem Aufbau, nicht für die isolierte Wirkung einer einzelnen Scheduling-Änderung.

Halten Sie für Ihren Vergleich Folgendes fest:

PrüfpunkteBedeutung
Verteilungen der Anfrageankunft und der AusgabelängenBestimmen ungenutzte Kapazität und Belastung der Warteschlange
Maximale Anzahl aktiver Sequenzen und Token-BudgetBegrenzen die Arbeit pro Iteration
KV-Zuweisung und PreemptionKönnen die Aufnahme neuer Anfragen verhindern
TTFT und Generierungs-Latency pro AnfrageZeigen die Kosten für einzelne Anfragen
Erfolgsquote und goodputZeigen, ob zusätzliche Arbeit das Service-Ziel erfüllt

Untersuchen Sie kurze und lange Anfragen getrennt. Ein höherer gesamter Throughput kann mit schlechterer Latency für eine Anfragegruppe einhergehen. Wählen Sie die Scheduling-Einstellungen anhand der gemessenen Service-Anforderungen.

Engineering-Leitfaden: Continuous Batching erklärt die Mechanismen für Speicherzuweisung und Scheduling gemeinsam.