Belege

Benchmarks

Wie sich das Wäg-Gateway unter identischen Bedingungen gegen LiteLLM schlägt. Diese Seite legt die Methode vollständig offen und veröffentlicht die damit erzeugten Messwerte. Multiplikatoren veröffentlichen wir nicht.

8 vCPU Docker, pinned coresWäg v1.0.0LiteLLM v1.104.23 runs/scenario

So wurde gemessen

Alles lief in Docker auf einer Maschine, jede Komponente auf eigene Kerne fixiert, damit nichts um CPU konkurrierte.

  • Beide Gateways stehen vor demselben Upstream mit identischer Modellkonfiguration, keines hat also den leichteren Weg.
  • Jedes Gateway läuft so, wie es die eigene Dokumentation empfiehlt: LiteLLM nach seinem Produktionsleitfaden mit Workern in Höhe der vCPUs, Wäg mit den ausgelieferten Standardwerten. Response-Caching ist bei beiden aus.
  • Closed-Loop-Tests messen den maximalen Durchsatz. Open-Loop-Tests senden nach festem Zeitplan und rechnen die Latenz ab dem vorgesehenen Sendezeitpunkt — ein Gateway, das Anfragen staut, kann das Stauen also nicht verbergen.
  • Jede Antwort wird geprüft: Status, Struktur des Bodys und bei Streams die erwartete Anzahl Chunks samt Abschluss. Alles andere zählt als Fehler, nie als schnelle Antwort.
  • Jedes Szenario läuft dreimal; die Tabellen zeigen den Median. Ohne Gateway im Pfad erreicht dieselbe Last rund 90.000 Anfragen/s, weit mehr als beide Gateways — die Ergebnisse sind also durch das Gateway begrenzt, nicht durch das Harness.

Fussabdruck

Was jedes Gateway kostet, bevor es irgendetwas ausliefert: Speicher im Leerlauf, Startzeit, Imagegrösse und die Latenz, die es einer einzelnen Anfrage gegen einen sofort antwortenden Upstream hinzufügt.

Speicher nach dem Start3,8 MBLiteLLM 2.302 MB
Startzeit0,32 sLiteLLM 11,2 s
Container-Image123 MBLiteLLM 1.669 MB
Zusätzliche Latenz, ein Client (p50)0,11 msLiteLLM 2,1 ms

Was das bedeutet: Der Speicher bestimmt, wie viele Replicas auf einen Knoten passen, die Imagegrösse, wie schnell ein Rollout ist. Mit 3,8 MB im Speicher und einem 123-MB-Image passt Wäg in einen Sidecar und ist bereit, bevor ein Health-Check ausläuft; 2,3 GB und 11 Sekunden sind ein Pod, um den man planen muss.

Die zusätzliche Latenz ist der p50 des Gateways abzüglich des p50, der ohne Gateway im Pfad gemessen wurde.

Mit realistischem Upstream

Ein echtes Modell antwortet in Hunderten von Millisekunden, also sind Tausende Anfragen gleichzeitig unterwegs. Hier braucht der Upstream 300 ms, und Anfragen treffen mit fester Rate ein, was das Gateway auch tut. Bei 2.000 Anfragen/s sind jederzeit rund 600 Anfragen in Bearbeitung.

WägLiteLLM
200 ms500 ms1,00 s2,00 s5,00 s10 s20 s50 sUntergrenze: 300 ms Upstream1005001,0002,000Anfragen pro SekundeLiteLLMWäg
Anfragen pro SekundeWäg p50Wäg p99Wäg FehlerWäg CPULiteLLM p50LiteLLM p99LiteLLM FehlerLiteLLM CPU×
100303 ms305 ms0,00%10,2%305 ms308 ms0,00%38,7%1,0×
500301 ms303 ms0,00%15,6%304 ms321 ms0,00%140,5%1,1×
1.000301 ms302 ms0,00%20,2%317 ms605 ms0,00%263,7%2,0×
2.000301 ms302 ms0,00%31,7%3,26 s28 s7,99%391,9%92×

Was das bedeutet: So sieht echter Verkehr aus: Ein Modell antwortet in Hunderten von Millisekunden, Tausende Anfragen sind gleichzeitig unterwegs. Ein Gateway, das staut, macht aus einer 300-ms-Antwort eine von mehreren Sekunden — und es fällt erst zur Spitzenlast auf. Wäg bleibt bis 2.000 Anfragen/s an der Untergrenze, mit weniger als einem Drittel seines CPU-Budgets. LiteLLM staut bereits bei 1.000 und lässt bei 2.000 acht Prozent der Anfragen scheitern.

Der Upstream allein braucht 300 ms, das ist die Untergrenze. Alles darüber ist Wartezeit in der Warteschlange des Gateways. Die Spalte × ist immer gleich zu lesen: höher heisst, Wäg liegt vorn. Beim Durchsatz ist es Wäg ÷ LiteLLM, bei der Latenz LiteLLM ÷ Wäg.

Durchsatz und Latenz

Closed Loop gegen einen sofort antwortenden Upstream: reine Gateway-Kosten, ohne Modelllatenz zum Dahinterverstecken. Das sind die Zahlen für die Kapazitätsplanung. Sie sind nicht der Grund, eine Control Plane zu wählen.

4 vCPU, ohne Datenbank

Gleichzeitige ClientsWäg req/sWäg p99Wäg CPULiteLLM req/sLiteLLM p99LiteLLM CPU×
16.2320,27 ms63,4%4633,2 ms98,1%13×
825.7110,70 ms311,5%1.23715 ms286,1%21×
3225.0932,6 ms321,8%1.62146 ms385,1%15×
12823.63911 ms328,3%1.669111 ms396,2%14×
51222.40745 ms336,9%1.569749 ms391,6%14×

1 vCPU, ohne Datenbank

Gleichzeitige ClientsWäg req/sWäg p99LiteLLM req/sLiteLLM p99×
16.5890,35 ms4593,2 ms14×
816.5941,3 ms48426 ms34×
3215.2263,8 ms50685 ms30×
12813.26415 ms505438 ms26×

Was das bedeutet: Das bestimmt, wie viele Replicas ein Verkehrsniveau braucht — und damit die Betriebskosten des Gateways. Für Kubernetes ist die Tabelle mit 1 vCPU die entscheidende: Das ist die Effizienz pro Kern, die ein Pod tatsächlich bekommt.

Streaming, Payloads, Embeddings, Failover

4 vCPU, ohne Datenbank. Streams bestehen aus 50 Tokens im Abstand von 5 ms; der Dauertest fährt drei Minuten lang 200 Streams pro Sekunde mit Antworten von rund 1,2 Sekunden.

SzenarioWägWäg p99Wäg FehlerLiteLLMLiteLLM p99LiteLLM Fehler×
Streaming, 64 clients233286 ms0,00%179674 ms0,00%1,3×
Streaming, 256 clients911288 ms0,00%3071,09 s0,00%3,0×
64 KB conversation history, 32 clients3.58329 ms0,00%568106 ms0,00%6,3×
Embeddings (1,536 dims), 32 clients13.5584,3 ms0,00%74069 ms0,00%18×
Fallback after upstream 500, 16 clients19.8161,8 ms0,00%58462 ms0,00%34×
Soak: 200 streams/s for 3 minutes2001,27 s0,00%17620 s12,09%1,1×

Was das bedeutet: Streaming, lange Prompts, Embeddings und Failover sind die Pfade, auf denen eine Produktionslast ihre Zeit verbringt. Lesen Sie die Fehlerspalten vor den Durchsatzspalten: Eine fehlgeschlagene Anfrage ist eine fehlgeschlagene Nutzeranfrage, keine langsame.

Der Wert für 64-KB-Payloads liegt an der Obergrenze des Harness: Ohne Gateway im Pfad erreicht dieselbe Last 3.711 Anfragen/s mit 64-KB-Bodies auf einem Kern. Die Wäg-Zahl ist dort also eine Unter-, keine Obergrenze.

Was hier nicht gezeigt wird

Jeder Benchmark beschreibt einen Aufbau. Das sind die Grenzen dieses Aufbaus.

  • Absolute Zahlen hängen vom Host ab. Beide Gateways liefen auf derselben Maschine mit fixierten Kernen, der Vergleich untereinander trägt also — erwarten Sie auf Ihrer eigenen Hardware aber andere absolute Werte.
  • Das Harness hinter diesen Läufen ist nicht veröffentlicht, Sie können sie also nicht Befehl für Befehl wiederholen. Die Methode oben ist ausführlich genug beschrieben, um einen gleichwertigen Aufbau nachzubauen.
  • LiteLLM veröffentlicht fast wöchentlich. Diese Werte wurden gegen v1.104.2 gemessen, die aktuelle stabile Version. Sobald eine Veröffentlichung den Weiterleitungspfad verändert, messen wir erneut und zeigen das Ergebnis.
  • LiteLLM wurde nach seinem Produktionsleitfaden konfiguriert, nicht von seinen Maintainern. Es mag eine bessere Konfiguration geben; wenn Sie eine finden, messen wir neu und veröffentlichen erneut.
  • Beide Gateways liefen auf einer Maschine mit fixierten Kernen. Nichts hiervon misst das Verhalten über ein Netzwerk, unter Kubernetes-Scheduling oder mit lauten Nachbarn.