Dynamische KV-Cache-Kompression basierend auf dem vLLM-Framework

Motivation

Durch die Analyse aktueller wissenschaftlicher Arbeiten aus dem vergangenen Jahr im Bereich der KV-Sparsity (H2O, SnapKV, PyramidKV) wenden wir KV-Sparsity auf verschiedene Ebenen des Modells an. Mit einer Pruning-Strategie entfernen wir KV-Paare mit niedrigeren Bewertungen und behalten diejenigen mit höheren Bewertungen und größerer Nähe bei. Dieser Ansatz reduziert den Speicherverbrauch sowie den Rechen- und I/O-Overhead und führt letztlich zu einer beschleunigten Inferenz.

Experimente

Baselines und Einstellungen: Wir führen alle KV-Compress-Experimente mit unserer vLLM-Integration durch, die von v0.6.2 abgeleitet ist, im Cuda-Graph-Modus mit einer Blockgröße von 16. Für alle RTX 4090/Llama-3.1-8B-Instruct-Experimente verwenden wir eine standardmäßige GPU-Speicherauslastung von 0,9 und setzen die maximale Modelllänge auf 32k. Wir bewerten unsere Kompression auf Llama-3.1-8B-Instruct und vergleichen die Leistung mit den folgenden Basislinienmethoden aus früheren Arbeiten:

  • vLLM-0.6.2
  • Novita AI, Pyramid-KV-Cache-Kompression basierend auf dem vLLM-Framework

MMLU Pro und LongBench: Wir steuern verschiedene KV-Cache-Kompressionsverhältnisse, indem wir auf verschiedenen Ebenen unterschiedliche Längen gleitender Fenster festlegen. Im Experiment haben wir hauptsächlich drei verschiedene Längen gleitender Fenster von 1024, 1280 und 1536 eingestellt und Quertests mit unterschiedlicher Anzahl von Ebenen durchgeführt.MMLU ProIm MMLU-Pro-Test zeigen verschiedene KV-Sparsity-Ebenen und unterschiedliche Längen gleitender Fenster unterschiedliche Leistungen. Unter Berücksichtigung des Beschleunigungsverhältnisses kann die Gesamtgenauigkeit über 98% garantiert werden.

vllm-0.6.2 Novita AI
KV-Sparsity-Ebenen voll gleitendes Fenster=1536
22 0.4517 0.4496
26 0.4517 0.4476
31 0.4517 0.4476

LongBenchIm LongBench-Test haben wir ein gleitendes Fenster von 1024 für den Leistungstest ausgewählt und festgestellt, dass der Genauigkeitsverlust etwa 1,03 % beträgt.

vllm Basis vs. Novita AI

Durchsatz-Benchmarks: In realen LLM-Anwendungen ist eine Eingabe-/Ausgabelänge von 5000/500 die am häufigsten beobachtete Konfiguration, und der TTFT-Index muss unter 2s liegen. Basierend auf diesen Bedingungen haben wir Batch-Leistungsvergleichstests durchgeführt, die eine 1,5-fache Inferenzbeschleunigung für vLLM ergaben.

Durchsatz vllm-0.6.2 Novita AI
KV-Sparsity-Ebenen voll gleitendes Fenster=1536
22 1 1.26
26 1 1.34
31 1 1.44

Wesentliche Änderungen

Geänderte Dateien umfassen hauptsächlich:

  • Flash Attention, sparsity-basierte Bewertung basierend auf Flash Attention, während der Kernel-Leistungsverlust unter 1% gehalten wird.
  • Paged Attention und reshape_and_cache, sparsity-basierte Bewertung basierend auf Paged Attention und Synchronisierung der sparsity-basierten Bewertung in den Prefill- und Decode-Phasen.
  • Block_manager und andere Funktionen im Zusammenhang mit Speicherverwaltung und Tensor-Vorbereitung.

Fazit

Novita AI unterstützt auch Tensor-Parallelismus, um Modelle wie Llama3-70B auf mehreren GPUs auszuführen. Derzeit wird der Code aus bestimmten Gründen nicht offen unterstützt, aber wir hoffen, der Community einige Technologien und Ideen beizutragen, und freuen uns über technischen Austausch mit allen.Ein Hinweis: Die folgenden Funktionen werden in vLLM-0.6.2 noch nicht unterstützt:

  • Chunked-prefill
  • Prefix caching
  • FlashInfer und andere Nicht-FlashAttention-Backends
  • Spekulative Dekodierung

Novita AI ist eine KI-Cloud-Plattform, die Entwicklern eine einfache Möglichkeit bietet, KI-Modelle über unsere einfache API bereitzustellen und gleichzeitig eine erschwingliche und zuverlässige GPU-Cloud für den Aufbau und die Skalierung bereitstellt.

Empfohlene Lektüre

  1. Wie KV-Sparsity eine 1,5-fache Beschleunigung für vLLM erreicht
  2. Llama 3–8b Zero-Shot-Chat freischalten: Expertentipps und -techniken
  3. Clipboard Conqueror mit Novita-AI-API-Schlüssel für Entwicklerproduktivität nutzen