Belæg

Benchmarks

Hvordan Wäg-gatewayen klarer sig mod LiteLLM under identiske forhold. Denne side redegør for metoden i sin helhed og offentliggør de målinger, den gav. Vi offentliggør ikke multiplikatorer.

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

Sådan blev der målt

Alt kørte i Docker på én maskine, med hver komponent bundet til egne kerner, så intet konkurrerede om CPU.

  • Begge gateways står foran den samme upstream med identisk modelkonfiguration, så ingen af dem får den lettere vej.
  • Hver gateway kører, som dens egen dokumentation anbefaler: LiteLLM efter sin produktionsvejledning med lige så mange workers som vCPU'er, Wäg med de leverede standardindstillinger. Svarcache er slået fra i begge.
  • Test i lukket sløjfe måler maksimal gennemstrømning. Test i åben sløjfe sender efter en fast plan og tæller latensen fra det tiltænkte afsendelsestidspunkt, så en gateway der sætter i kø, ikke kan skjule det.
  • Hvert svar valideres: status, kroppens opbygning og for streams det forventede antal dele og afslutningen. Alt andet tæller som fejl, aldrig som et hurtigt svar.
  • Hvert scenarie køres tre gange, og tabellerne viser medianen. Uden gateway i vejen når den samme belastning omkring 90.000 forespørgsler/s, langt over begge gateways, så resultaterne begrænses af gatewayen og ikke af riggen.

Fodaftryk

Hvad hver gateway koster, før den betjener noget som helst: hukommelse i hvile, opstartstid, billedstørrelse og den latens, den lægger til en enkelt forespørgsel mod en upstream der svarer med det samme.

Hukommelse efter opstart3,8 MBLiteLLM 2.302 MB
Opstartstid0,32 sLiteLLM 11,2 s
Containerbillede123 MBLiteLLM 1.669 MB
Tilføjet latens, én klient (p50)0,11 msLiteLLM 2,1 ms

Hvad det betyder: Hukommelsen afgør, hvor mange replikaer der er plads til på en node, og billedstørrelsen, hvor hurtig en udrulning er. Med 3,8 MB i hukommelsen og et billede på 123 MB er der plads til Wäg i en sidecar, og den er klar, før et health check løber ud; 2,3 GB og 11 sekunder er en pod, man planlægger omkring.

Den tilføjede latens er gatewayens p50 minus den p50, der måles uden gateway i vejen.

Med en realistisk upstream

En rigtig model svarer på hundredvis af millisekunder, så tusindvis af forespørgsler er undervejs samtidig. Her tager upstreamen 300 ms, og forespørgsler ankommer i fast takt, uanset hvad gatewayen gør. Ved 2.000 forespørgsler/s er omkring 600 i gang på ethvert tidspunkt.

WägLiteLLM
200 ms500 ms1,00 s2,00 s5,00 s10 s20 s50 sGulv: 300 ms upstream1005001,0002,000forespørgsler pr. sekundLiteLLMWäg
forespørgsler pr. sekundWäg p50Wäg p99Wäg FejlWäg CPULiteLLM p50LiteLLM p99LiteLLM FejlLiteLLM 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×

Hvad det betyder: Sådan ser rigtig trafik ud: en model svarer på hundredvis af millisekunder, og tusindvis af forespørgsler er undervejs. En gateway, der sætter i kø, gør et svar på 300 ms til flere sekunder, og ingen opdager det før spidsbelastningen. Wäg bliver på gulvet op til 2.000 forespørgsler/s med under en tredjedel af sit CPU-budget. LiteLLM sætter allerede i kø ved 1.000 og fejler 8 % af forespørgslerne ved 2.000.

Upstreamen alene tager 300 ms, så 300 ms er gulvet. Alt derover er tid brugt i kø inde i gatewayen. Kolonnen × læses altid ens: højere betyder, at Wäg er foran. Den er Wäg ÷ LiteLLM for gennemstrømning og LiteLLM ÷ Wäg for latens.

Gennemstrømning og latens

Lukket sløjfe mod en upstream der svarer med det samme: rene gatewayomkostninger, uden modellatens at gemme sig bag. Det er tallene, en kapacitetsplan har brug for. De er ikke grunden til at vælge en control plane.

4 vCPU, uden database

Samtidige 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, uden database

Samtidige 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×

Hvad det betyder: Det afgør, hvor mange replikaer et trafikniveau kræver, og dermed hvad gatewayen koster at drive. For Kubernetes er tabellen med 1 vCPU den relevante: det er effektiviteten pr. kerne, som en pod reelt får.

Streaming, payloads, embeddings, failover

4 vCPU, uden database. Streams er 50 tokens med 5 ms mellemrum; udholdenhedstesten sender 200 streams i sekundet med svar på cirka 1,2 sekunder i tre minutter.

ScenarieWägWäg p99Wäg FejlLiteLLMLiteLLM p99LiteLLM Fejl×
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×

Hvad det betyder: Streaming, lange prompts, embeddings og failover er der, hvor en produktionsbelastning bruger tiden. Læs fejlkolonnerne før gennemstrømningskolonnerne: en fejlet forespørgsel er en fejlet brugerforespørgsel, ikke en langsom.

Tallet for 64 KB-payloads ligger ved riggens loft: uden gateway i vejen når den samme belastning 3.711 forespørgsler/s med 64 KB-kroppe på én kerne, så Wäg-tallet er dér en nedre grænse og ikke et maksimum.

Hvad dette ikke viser

Enhver benchmark beskriver én opstilling. Dette er grænserne for denne.

  • Absolutte tal afhænger af værten. Begge gateways kørte på den samme maskine med bundne kerner, så sammenligningen mellem dem holder, men forvent andre absolutte tal på jeres egen hardware.
  • Testriggen bag disse kørsler er ikke offentliggjort, så I kan ikke gentage dem kommando for kommando. Metoden ovenfor er beskrevet detaljeret nok til at bygge en tilsvarende opsætning.
  • LiteLLM udgiver næsten hver uge. Tallene er målt mod v1.104.2, den aktuelle stabile udgave. Når en udgivelse ændrer videresendelsesvejen, måler vi igen og offentliggør, hvad vi finder.
  • LiteLLM blev konfigureret ud fra sin produktionsvejledning, ikke af dens vedligeholdere. Der findes måske en bedre konfiguration; finder I en, måler vi igen og offentliggør på ny.
  • Begge gateways kørte på én maskine med bundne kerner. Intet her måler adfærd over et netværk, under Kubernetes-scheduling eller med støjende naboer.