LiteLLM Proxy - 1K RPS Lasttest mit Locust
Tutorial, wie Sie mit LiteLLM Proxy auf Locust 1K+ RPS erreichen
Checkliste vor dem Testen
- Stellen Sie sicher, dass Sie die neueste
-stableVersion von litellm verwenden - Stellen Sie sicher, dass Sie ALLE Best Practices für die Produktion befolgen
- Locust - Stellen Sie sicher, dass Ihre Locust-Instanz 1K+ Anfragen pro Sekunde erstellen kann
- 👉 Sie können unsere gepflegte Locust-Instanz hier verwenden
- Wenn Sie Locust selbst hosten
- Verwenden Sie diese Maschinenspezifikation für die Ausführung von litellm proxy
- Enterprise LiteLLM - Verwenden Sie
prometheusals Callback in Ihrerproxy_config.yaml, um Metriken für Ihren Lasttest zu erhalten. Setzen Sielitellm_settings.callbacks, um Erfolge/Fehler/alle Arten von Fehlern zu überwachenlitellm_settings:
callbacks: ["prometheus"] # Enterprise LiteLLM Only - use prometheus to get metrics on your load test
Verwenden Sie diese Konfiguration für Tests
Hinweis: Wir migrieren derzeit zu aiohttp, das einen 10x höheren Durchsatz hat. Wir empfehlen die Verwendung des aiohttp_openai/ Providers für Lasttests.
model_list:
- model_name: "fake-openai-endpoint"
litellm_params:
model: aiohttp_openai/any
api_base: https://your-fake-openai-endpoint.com/chat/completions
api_key: "test"
Lasttest - Fake OpenAI Endpunkt
Erwartete Leistung
| Metrik | Wert |
|---|---|
| Anfragen pro Sekunde | 1174+ |
| Mittlere Antwortzeit | 96ms |
| Durchschnittliche Antwortzeit | 142,18ms |
Test ausführen
- Fügen Sie
fake-openai-endpointzu Ihrer proxy_config.yaml hinzu und starten Sie Ihren litellm proxy. litellm bietet einen gehostetenfake-openai-endpoint, den Sie gegenlasttesten können
model_list:
- model_name: fake-openai-endpoint
litellm_params:
model: aiohttp_openai/fake
api_key: fake-key
api_base: https://exampleopenaiendpoint-production.up.railway.app/
litellm_settings:
callbacks: ["prometheus"] # Enterprise LiteLLM Only - use prometheus to get metrics on your load test
pip install locustErstellen Sie eine Datei namens
locustfile.pyauf Ihrem lokalen Rechner. Kopieren Sie den Inhalt aus dem litellm Lasttest, der sich hier befindetStarten Sie Locust. Führen Sie
locustim selben Verzeichnis wie Ihrelocustfile.pyaus Schritt 2 auslocust -f locustfile.py --processes 4Lasttest auf Locust ausführen
Rufen Sie die Locust-Benutzeroberfläche unter http://0.0.0.0:8089 auf
Stellen Sie Benutzer=1000, Hochfahren der Benutzer=1000, Host=Basis-URL Ihres LiteLLM Proxys ein
Erwartete Ergebnisse
Lasttest - Endpunkte mit Ratenbegrenzungen
Führen Sie einen Lasttest auf 2 LLM-Bereitstellungen mit jeweils 10K RPM Kontingent durch. Erwarten Sie ~20K RPM
Erwartete Leistung
- Wir erwarten, dass in 1 Minute 20.000+ erfolgreiche Antworten angezeigt werden
- Die restlichen Anfragen schlagen fehl, da der Endpunkt sein 10K RPM Kontingentlimit überschreitet - vom LLM API-Anbieter
| Metrik | Wert |
|---|---|
| Erfolgreiche Antworten in 1 Minute | 20,000+ |
| Anfragen pro Sekunde | ~1170+ |
| Mittlere Antwortzeit | 70ms |
| Durchschnittliche Antwortzeit | 640,18ms |
Test ausführen
- Fügen Sie 2
gemini-visionBereitstellungen zu Ihrer config.yaml hinzu. Jede Bereitstellung kann 10K RPM verarbeiten. (Wir richten unten einen Fake-Endpunkt mit einer Ratenbegrenzung von 1000 RPM auf der Route/v1/projects/bad-adroit-crowein)
Alle Anfragen mit model="gemini-vision" werden gleichmäßig auf die 2 Bereitstellungen verteilt.
model_list:
- model_name: gemini-vision
litellm_params:
model: vertex_ai/gemini-1.0-pro-vision-001
api_base: https://exampleopenaiendpoint-production.up.railway.app/v1/projects/bad-adroit-crow-413218/locations/us-central1/publishers/google/models/gemini-1.0-pro-vision-001
vertex_project: "adroit-crow-413218"
vertex_location: "us-central1"
vertex_credentials: /etc/secrets/adroit_crow.json
- model_name: gemini-vision
litellm_params:
model: vertex_ai/gemini-1.0-pro-vision-001
api_base: https://exampleopenaiendpoint-production-c715.up.railway.app/v1/projects/bad-adroit-crow-413218/locations/us-central1/publishers/google/models/gemini-1.0-pro-vision-001
vertex_project: "adroit-crow-413218"
vertex_location: "us-central1"
vertex_credentials: /etc/secrets/adroit_crow.json
litellm_settings:
callbacks: ["prometheus"] # Enterprise LiteLLM Only - use prometheus to get metrics on your load test
pip install locustErstellen Sie eine Datei namens
locustfile.pyauf Ihrem lokalen Rechner. Kopieren Sie den Inhalt aus dem litellm Lasttest, der sich hier befindetStarten Sie Locust. Führen Sie
locustim selben Verzeichnis wie Ihrelocustfile.pyaus Schritt 2 auslocust -f locustfile.py --processes 4 -t 60Lasttest auf Locust ausführen
Rufen Sie die Locust-Benutzeroberfläche unter http://0.0.0.0:8089 auf und verwenden Sie die folgenden Einstellungen
Erwartete Ergebnisse
- Erfolgreiche Antworten pro Minute = 19.800 = (69415 - 49615)
- Anfragen pro Sekunde = 1170
- Mittlere Antwortzeit = 70ms
- Durchschnittliche Antwortzeit = 640ms
Prometheus-Metriken zum Debuggen von Lasttests
Verwenden Sie die folgenden Prometheus-Metriken zum Debuggen Ihrer Lasttests / Fehler
| Metrikname | Beschreibung |
|---|---|
litellm_deployment_failure_responses | Gesamtzahl der fehlgeschlagenen LLM-API-Aufrufe für eine bestimmte LLM-Bereitstellung. Labels: "requested_model", "litellm_model_name", "model_id", "api_base", "api_provider", "hashed_api_key", "api_key_alias", "team", "team_alias", "exception_status", "exception_class" |
litellm_deployment_cooled_down | Anzahl der Male, die eine Bereitstellung von der LiteLLM-Lastverteilungslogik heruntergetaktet wurde. Labels: "litellm_model_name", "model_id", "api_base", "api_provider", "exception_status" |
Maschinenspezifikationen für die Ausführung von Locust
| Metrik | Wert |
|---|---|
locust --processes 4 | 4 |
vCPUs auf der Lasttestmaschine | 2,0 vCPUs |
Speicher auf der Lasttestmaschine | 450 MB |
Replikate der Lasttestmaschine | 1 |
Maschinenspezifikationen für die Ausführung von LiteLLM Proxy
👉 Anzahl der Replikate von LiteLLM Proxy=4 für 1K+ RPS
| Dienst | Spezifikation | CPUs | Speicher | Architektur | Version |
|---|---|---|---|---|---|
| Server | t2.large. | 2 vCPUs | 8 GB | x86 |
Locust-Datei für Tests verwendet
import os
import uuid
from locust import HttpUser, task, between
class MyUser(HttpUser):
wait_time = between(0.5, 1) # Random wait time between requests
@task(100)
def litellm_completion(self):
# no cache hits with this
payload = {
"model": "fake-openai-endpoint",
"messages": [{"role": "user", "content": f"{uuid.uuid4()} This is a test there will be no cache hits and we'll fill up the context" * 150 }],
"user": "my-new-end-user-1"
}
response = self.client.post("chat/completions", json=payload)
if response.status_code != 200:
# log the errors in error.txt
with open("error.txt", "a") as error_log:
error_log.write(response.text + "\n")
def on_start(self):
self.api_key = os.getenv('API_KEY', 'sk-1234')
self.client.headers.update({'Authorization': f'Bearer {self.api_key}'})