Belägg

Benchmarks

Hur Wäg-gatewayen står sig mot LiteLLM under identiska förhållanden. Den här sidan redovisar metoden i sin helhet och publicerar de mätvärden den gav. Vi publicerar inga multiplikatorer.

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

Så gjordes mätningen

Allt kördes i Docker på en maskin, med varje komponent låst till egna kärnor så att inget konkurrerade om CPU.

  • Båda gatewayerna står framför samma upstream med identisk modellkonfiguration, så ingen av dem får den lättare vägen.
  • Varje gateway körs som dess egen dokumentation rekommenderar: LiteLLM enligt sin produktionsguide med lika många workers som vCPU:er, Wäg med levererade standardvärden. Svarscache är avstängd i båda.
  • Tester i sluten loop mäter maximal genomströmning. Tester i öppen loop skickar enligt fast schema och räknar latensen från den avsedda sändtidpunkten, så en gateway som köar kan inte dölja köandet.
  • Varje svar valideras: status, kroppens struktur och för strömmar det förväntade antalet delar och avslutningen. Allt annat räknas som fel, aldrig som ett snabbt svar.
  • Varje scenario körs tre gånger och tabellerna visar medianen. Utan gateway i vägen når samma last cirka 90 000 förfrågningar/s, långt över båda gatewayerna, så resultaten begränsas av gatewayen och inte av riggen.

Fotavtryck

Vad varje gateway kostar innan den levererar något: minne i vila, starttid, avbildningens storlek och den latens den lägger till en enskild förfrågan mot en upstream som svarar direkt.

Minne efter start3,8 MBLiteLLM 2 302 MB
Starttid0,32 sLiteLLM 11,2 s
Containeravbildning123 MBLiteLLM 1 669 MB
Tillagd latens, en klient (p50)0,11 msLiteLLM 2,1 ms

Vad det betyder: Minnet avgör hur många repliker som ryms på en nod, och avbildningens storlek hur snabb en utrullning är. Med 3,8 MB i minnet och en avbildning på 123 MB får Wäg plats i en sidecar och är redo innan en hälsokontroll hinner löpa ut; 2,3 GB och 11 sekunder är en pod man planerar runt.

Den tillagda latensen är gatewayens p50 minus den p50 som mäts utan gateway i vägen.

Med en realistisk upstream

En riktig modell svarar på hundratals millisekunder, så tusentals förfrågningar är i luften samtidigt. Här tar upstreamen 300 ms och förfrågningar kommer i fast takt oavsett vad gatewayen gör. Vid 2 000 förfrågningar/s är omkring 600 under arbete i varje ögonblick.

WägLiteLLM
200 ms500 ms1,00 s2,00 s5,00 s10 s20 s50 sGolv: 300 ms upstream1005001,0002,000förfrågningar per sekundLiteLLMWäg
förfrågningar per sekundWäg p50Wäg p99Wäg FelWäg CPULiteLLM p50LiteLLM p99LiteLLM FelLiteLLM 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×

Vad det betyder: Så ser verklig trafik ut: en modell svarar på hundratals millisekunder och tusentals förfrågningar är i luften. En gateway som köar gör ett svar på 300 ms till flera sekunder, och ingen märker det förrän vid toppen. Wäg ligger kvar på golvet upp till 2 000 förfrågningar/s med mindre än en tredjedel av sin CPU-budget. LiteLLM köar redan vid 1 000 och missar 8 % av förfrågningarna vid 2 000.

Bara upstreamen tar 300 ms, så 300 ms är golvet. Allt däröver är tid i kö inne i gatewayen. Kolumnen × läses alltid likadant: högre betyder att Wäg ligger före. Den är Wäg ÷ LiteLLM för genomströmning och LiteLLM ÷ Wäg för latens.

Genomströmning och latens

Sluten loop mot en upstream som svarar direkt: ren gatewaykostnad, utan modellatens att gömma sig bakom. Det här är siffrorna en kapacitetsplan behöver. De är inte skälet att välja en control plane.

4 vCPU, utan databas

Samtidiga klienterWä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, utan databas

Samtidiga klienterWä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×

Vad det betyder: Det avgör hur många repliker en trafiknivå kräver, och därmed vad gatewayen kostar att driva. För Kubernetes är tabellen med 1 vCPU den som gäller: det är effektiviteten per kärna som en pod faktiskt får.

Strömning, payloads, embeddingar, failover

4 vCPU, utan databas. Strömmar är 50 tokens med 5 ms mellanrum; uthållighetstestet skickar 200 strömmar per sekund med svar på ungefär 1,2 sekunder under tre minuter.

ScenarioWägWäg p99Wäg FelLiteLLMLiteLLM p99LiteLLM Fel×
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×

Vad det betyder: Strömning, långa prompter, embeddingar och failover är där en produktionslast tillbringar tiden. Läs felkolumnerna före genomströmningskolumnerna: en misslyckad förfrågan är en misslyckad användarförfrågan, inte en långsam.

Siffran för 64 KB-payloads ligger vid riggens tak: utan gateway i vägen når samma last 3 711 förfrågningar/s med 64 KB-kroppar på en kärna, så Wäg-siffran där är en undre gräns och inte ett maximum.

Vad detta inte visar

Varje benchmark beskriver en uppställning. Det här är gränserna för den här.

  • Absoluta tal beror på värden. Båda gatewayerna kördes på samma maskin med låsta kärnor, så jämförelsen dem emellan håller, men räkna med andra absoluta tal på er egen hårdvara.
  • Testriggen bakom de här körningarna är inte publicerad, så ni kan inte upprepa dem kommando för kommando. Metoden ovan är beskriven tillräckligt utförligt för att bygga en likvärdig uppsättning.
  • LiteLLM släpper nästan varje vecka. Siffrorna är mätta mot v1.104.2, den aktuella stabila versionen. När en version ändrar vidarebefordringsvägen mäter vi om och publicerar vad vi får fram.
  • LiteLLM konfigurerades utifrån sin produktionsguide, inte av sina underhållare. Det kan finnas en bättre konfiguration; hittar ni en kör vi om och publicerar på nytt.
  • Båda gatewayerna kördes på en maskin med låsta kärnor. Inget här mäter beteende över ett nätverk, under Kubernetes-schemaläggning eller med störande grannar.