Cloud & Infrastruktur

Flame-Serving auf Standalone-vLLM-Durchsatz optimieren

Benchmarking zeigt, dass ein optimierter Flame-Dienst mit eingebettetem vLLM bei kurzen Lastspitzen durch die Optimierung von Prefix-Affinität und Batch-Zulassung innerhalb von 1 % des Durchsatzes von Standalone-vLLM liegt.

Illustration, die einfaches und komplexes Daten-Routing zwischen GPU-Chips vergleicht
Für diesen Artikel generierte Illustration

Automatisch aus dem englischen Original übersetzt.

Forscher verglichen die Leistung von Flame, einem Python-basierten Serving-Framework, das vLLM einbettet, mit Instanzen von Standalone-vLLM. Die am 24. Oktober 2026 veröffentlichte Studie beschreibt, wie spezifische Tuning-Strategien es Flame ermöglichten, nahezu Gleichstand mit der Referenz-Engine auf zwei NVIDIA B200 GPUs zu erreichen. Die Ergebnisse unterstreichen die Bedeutung von Prefix-Caching und asynchroner Request-Zulassung zur Minimierung des Overheads bei Bereitstellungen großer Sprachmodelle.

Was geschah

Die Bewertung konzentrierte sich auf zwei unterschiedliche Workloads unter Verwendung des Modells Llama 3.1 8B Instruct. Der erste Workload umfasste 64 Anfragen ohne Dokumentwiederverwendung, während der zweite 256 Anfragen beinhaltete, bei denen vier Fragen zu jedem von vier Dokumenten gestellt wurden, was eine Wiederverwendung von Prefixes ermöglichte. In beiden Szenarien verarbeitete das System kurze, endliche Lastspitzen anstelle von dauerhaft stabilen Lasten. Das Ziel war festzustellen, ob Flame mindestens 99 % des Durchsatzes eines sorgfältig konfigurierten Standalone-vLLM-Setups halten konnte.

Erste Tests zeigten bei Verwendung der Standardkonfigurationen eine erhebliche Lücke. Nach der Implementierung einer persistenten Worker-Platzierung zur Verbesserung der Cache-Wiederverwendung konnten die Forscher jedoch einen Großteil des Unterschieds schließen. Weitere Optimierungen umfassten die Erhöhung der Batch-Größen, den Wechsel zur asynchronen Engine-Zulassung und die Anwendung verlustfreier Kompression auf Eingaben. In der finalen Konfiguration lag der mediane Abschlussdurchsatz von Flame nur 0,55 % niedriger als bei Standalone-vLLM ohne Dokumentwiederverwendung und 0,86 % niedriger bei Prefix-Wiederverwendung. Während zwei von fünf Testpaaren das strenge 99 %-Ziel bei den Wiederverwendungstests verfehlten, betrug die Abweichung im schlechtesten Fall lediglich 2,03 %.

Wie es funktioniert

Der Kernmechanismus zur Leistungsverbesserung in beiden Systemen war die Prefix-Affinität. Wenn ein Assistent mehrere Fragen zum selben Dokument beantwortet, werden dieselben Anfangs-Tokens wiederholt verarbeitet. Indem dieses Prefix auf einer einzelnen GPU gehalten wird, vermeidet das System das erneute Aufbauens von Attention Keys und Values von Grund auf. Die Forscher implementierten eine clientseitige Karte, die Token-Blöcke hasht, um unbekannte Prefixes dem Shard mit dem geringsten geschätzten Prefill-Aufwand zuzuweisen. Dies stellte sicher, dass nachfolgende Fragen zu einem bestimmten Dokument immer denselben Worker erreichten, sodass vLLM resident KV-Blocks effektiv wiederverwenden konnte.

Neben dem Caching befasste sich das Team damit, wie Anfragen an die Inferenz-Engine zugelassen wurden. Der ursprüngliche Flame-Adapter übergab Batches synchron, wodurch spätere Aufgaben warten mussten, bis aktuelle Aufrufe abgeschlossen waren. Die optimierte Version nutzte eine asynchrone API, die alle Anfragen in einem Batch gleichzeitig zuließ. Sie setzte auch zlib-Kompression der Stufe 1 ein, um die Größe der übertragenen Eingaben zu reduzieren, was besonders effektiv für textlastige Prompts ist. Schließlich reduzierte das Einfrieren des Python-Startup-Heaps Garbage-Collection-Pausen während der Inferenz und stabilisierte so den Durchsatz weiter.

Wichtige Details

  • Die Experimente verwendeten zwei NVIDIA B200 GPUs mit vLLM 0.28.0 und Torch 2.13.0+cu130.
  • Prefix-Affinität steigerte den medianen Durchsatz bei Wiederverwendungsszenarien um 77,5 % für Standalone-vLLM und um 73,4 % für Flame.
  • Der finale mediane Durchsatz für Flame betrug 7,586 Anfragen/s ohne Wiederverwendung und 28,350 Anfragen/s mit Wiederverwendung.
  • Die Eingabekompression reduzierte die codierte Service-Eingabegröße für den Wiederverwendungs-Burst von über 6 MB auf etwa 388 KB.
  • Das Einfrieren des Startup-Heaps reduzierte die maximalen Garbage-Collection-Pausen pro Worker von 8,80 ms auf 4,59 ms.
  • Die Studie zeigte in diesen spezifischen Tests keinen Leistungsvorteil durch den datenbewussten Scheduler von Flame.

Warum es wichtig ist

Für Ingenieure, die produktive LLM-Services entwickeln, klärt dieser Vergleich, woher der Overhead in gekapselten Serving-Frameworks tatsächlich stammt. Es zeigt, dass die Einbußen bei der Nutzung einer höheren Orchestrierungsebene wie Flame nicht inhärent in der Architektur liegen, sondern auf suboptimale Batching- und Synchronisierungs-Standardeinstellungen zurückzuführen sind. Durch das Verständnis, dass Prefix-Lokalität und asynchrone Zulassung kritisch sind, können Entwickler ihre eigenen Stacks so abstimmen, dass Latenzspitzen minimiert und die GPU-Auslastung maximiert werden.

Die Erkenntnisse warnen auch davor anzunehmen, dass Framework-Features automatisch zu Leistungsgewinnen führen. Der datenbewusste Scheduler in Flame übertraf in den Tests nicht das einfachere explizite Client-Mapping. Dies deutet darauf hin, dass für viele Anwendungsfälle geradlinige Routing-Strategien in Kombination mit sorgfältigem Ressourcenmanagement effektiver sein können als komplexe Scheduling-Algorithmen. Teams sollten messbaren Faktoren wie Cache-Hit-Rates und Batch-Auslastung Vorrang vor theoretischen Scheduling-Vorteilen geben.

Was Sie tun können

  • Implementieren Sie Prefix-Affinität in Ihrem Client-Routing, um sicherzustellen, dass Anfragen mit gemeinsamem Kontext dieselbe GPU-Replik treffen.
  • Wechseln Sie zu asynchronen APIs für die Engine-Zulassung, um zu verhindern, dass die Batch-Verarbeitung neue Anfragen blockiert.
  • Aktivieren Sie verlustfreie Kompression für textlastige Eingaben, um Netzwerk- und Speicher-Overhead während der Übertragung zu reduzieren.
  • Stimmen Sie Fenster und Limits für die Batch-Bildung ab, um basierend auf Ihren Traffic-Mustern ein Gleichgewicht zwischen Latenz und Durchsatz herzustellen.
  • Überwachen Sie Garbage-Collection-Pausen und erwägen Sie das Einfrieren langlebiger Objekte während der Worker-Initialisierung.
  • Validieren Sie die Leistung mit Tests für endliche Lastspitzen, die Ihre tatsächlichen Nutzungsmuster nachahmen, einschließlich Szenarien zur Prefix-Wiederverwendung.
  • #vllm
  • #llm serving
  • #performance tuning

Tools aus dem Bytechap-Shop

Weiterlesen

Alle Artikel