Was ist Flash-Decoding, und wann beschleunigt es LLMs?
Automatische Übersetzung
Dieser Artikel wurde automatisch aus der englischen Originalversion übersetzt.
Flash-Decoding parallelisiert Decode-Attention über die gespeicherte Key/Value-Sequenz. Verschiedene GPU-Blöcke verarbeiten verschiedene Teile eines langen Verlaufs und führen anschließend die Teilergebnisse der Attention mit einer numerisch korrekten Normalisierung zusammen. Das kann die Generierung mit kleinen Batches beschleunigen, wenn ein langer Cache mehr Arbeit bereitstellt, als die bestehende Ausführungsplanung der Attention effizient verarbeitet.
Es beschleunigt eine Attention-Operation. Die daraus entstehende Beschleunigung beim Serving hängt auch davon ab, wie viel Zeit andere Teile des Models benötigen.
Warum Decode eine andere Ausführungsplanung braucht
Beim Prefill können viele Query-Positionen parallel verarbeitet werden. Beim gewöhnlichen Decode liefert jede aktive Sequenz eine neue Query-Position. Ein kleiner Batch kann daher zu wenige unabhängige Blöcke bereitstellen, um die GPU effektiv auszulasten, obwohl jede Query einen langen Verlauf lesen muss.
Flash-Decoding erzeugt zusätzliche Arbeitseinheiten, indem es diesen Verlauf aufteilt. Jede Einheit berechnet ein Teilergebnis und einen Log-Sum-Exp-Normalisierungswert. Eine Reduktion führt sie zu dem Ergebnis zusammen, das Attention über den vollständigen Verlauf liefern muss. Siehe die Flash-Decoding-Erklärung der Stanford-Autoren.
Bei einem kurzen Verlauf kann der zusätzliche Aufwand für Teilergebnisse und Reduktion den Nutzen übersteigen. Ein größerer Batch kann bereits genügend parallele Arbeit bereitstellen. In beiden Fällen ist ein Gewinn durch eine weitere Aufteilung der Sequenz nicht garantiert.
Das berichtete Ergebnis einordnen
Die Autoren berichteten eine bis zu achtfache End-to-End-Beschleunigung für ihre CodeLlama-34B-Evaluation mit Batchgröße eins auf vier A100-GPUs, bei Sequenzlängen von 512 bis 64K. Dieser Vergleich verwendete die von ihnen gewählte Baseline und Ausführungskonfiguration. Er sagt keine achtfache Verbesserung gegenüber einem aktuellen Server mit bereits optimiertem Decode-Backend voraus.
Beim Testen deines Servers:
- prüfe, ob das gewählte Attention-Backend die Methode tatsächlich verwendet;
- vergleiche dasselbe Model, dieselbe GPU-Anordnung, Cache-Präzision und dieselben Sequenzlängen;
- teste sowohl Batchgröße eins als auch realistische gleichzeitige Anfragen;
- erfasse die Laufzeit des Attention-Kernels getrennt vom vollständigen Decode-Schritt;
- miss die Latency der Ausgabetokens und die numerische Korrektheit.
Ein schnellerer Attention-Kernel kann dazu führen, dass das Lesen der Weights, die Feed-Forward-Berechnung oder die Kommunikation den größten verbleibenden Aufwand verursacht. Richte die Entscheidung über eine Änderung der Serving-Konfiguration am End-to-End-Ergebnis aus.
Engineering-Leitfaden: Flash-Decoding verknüpft die Aufteilung der Sequenz mit dem Unterschied zwischen Prefill und Decode.