⚡ Best Practices for Production
1. Verwenden Sie diese config.yaml
Verwenden Sie diese config.yaml in der Produktion (mit Ihren eigenen LLMs)
model_list:
- model_name: fake-openai-endpoint
litellm_params:
model: openai/fake
api_key: fake-key
api_base: https://exampleopenaiendpoint-production.up.railway.app/
general_settings:
master_key: sk-1234 # enter your own master key, ensure it starts with 'sk-'
alerting: ["slack"] # Setup slack alerting - get alerts on LLM exceptions, Budget Alerts, Slow LLM Responses
proxy_batch_write_at: 60 # Batch write spend updates every 60s
database_connection_pool_limit: 10 # limit the number of database connections to = MAX Number of DB Connections/Number of instances of litellm proxy (Around 10-20 is good number)
# OPTIONAL Best Practices
disable_spend_logs: True # turn off writing each transaction to the db. We recommend doing this is you don't need to see Usage on the LiteLLM UI and are tracking metrics via Prometheus
disable_error_logs: True # turn off writing LLM Exceptions to DB
allow_requests_on_db_unavailable: True # Only USE when running LiteLLM on your VPC. Allow requests to still be processed even if the DB is unavailable. We recommend doing this if you're running LiteLLM on VPC that cannot be accessed from the public internet.
litellm_settings:
request_timeout: 600 # raise Timeout error if call takes longer than 600 seconds. Default value is 6000seconds if not set
set_verbose: False # Switch off Debug Logging, ensure your logs do not have any debugging on
json_logs: true # Get debug logs in json format
Setzen Sie die Slack-Webhook-URL in Ihrer Umgebung
export SLACK_WEBHOOK_URL="https://hooks.slack.com/services/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"
Schalten Sie die standardmäßigen Info-Logs von FastAPI aus
export LITELLM_LOG="ERROR"
Benötigen Sie Hilfe oder wünschen Sie dedizierten Support? Sprechen Sie mit einem Gründer[hier]: (https://calendly.com/d/4mp-gd3-k5k/litellm-1-1-onboarding-chat)
2. Auf Kubernetes – Verwenden Sie 1 Uvicorn-Worker[Empfohlener CMD]
Verwenden Sie diesen Docker CMD. Damit wird der Proxy mit 1 Uvicorn Async Worker gestartet
(Stellen Sie sicher, dass Sie run_gunicorn oder num_workers nicht im CMD setzen).
CMD ["--port", "4000", "--config", "./proxy_server_config.yaml"]
3. Verwenden Sie Redis 'port', 'host', 'password'. NICHT 'redis_url'
Wenn Sie sich für die Verwendung von Redis entscheiden, verwenden Sie NICHT 'redis_url'. Wir empfehlen die Verwendung der Parameter für Redis-Port, -Host und -Passwort.
redis_url ist 80 RPS langsamer
Dies ist immer noch etwas, das wir untersuchen. Behalten Sie es im Auge hier
Empfohlen für die Produktion
router_settings:
routing_strategy: usage-based-routing-v2
# redis_url: "os.environ/REDIS_URL"
redis_host: os.environ/REDIS_HOST
redis_port: os.environ/REDIS_PORT
redis_password: os.environ/REDIS_PASSWORD
litellm_settings:
cache: True
cache_params:
type: redis
host: os.environ/REDIS_HOST
port: os.environ/REDIS_PORT
password: os.environ/REDIS_PASSWORD
4. Deaktivieren Sie 'load_dotenv'
Setzen Sie export LITELLM_MODE="PRODUCTION"
Dadurch wird die load_dotenv()-Funktionalität deaktiviert, die Ihre Umgebung-Zugangsdaten automatisch aus der lokalen .env-Datei lädt.
5. Wenn Sie LiteLLM auf VPC ausführen, behandeln Sie DB-Nichtverfügbarkeit graceful
Wenn Sie LiteLLM auf einer VPC ausführen (und nicht über das öffentliche Internet erreichbar sind), können Sie eine graceful Degradation aktivieren, sodass die Anfrageverarbeitung auch dann fortgesetzt wird, wenn die Datenbank vorübergehend nicht verfügbar ist.
WARNUNG: Tun Sie dies nur, wenn Sie LiteLLM auf einer VPC ausführen, die nicht über das öffentliche Internet zugänglich ist.
Konfiguration
general_settings:
allow_requests_on_db_unavailable: True
Erwartetes Verhalten
Wenn allow_requests_on_db_unavailable auf true gesetzt ist, behandelt LiteLLM Fehler wie folgt
| Art des Fehlers | Erwartetes Verhalten | Details |
|---|---|---|
| Prisma-Fehler | ✅ Anfrage wird zugelassen | Umfasst Probleme wie DB-Verbindungsunterbrechungen oder Ablehnungen von der DB über Prisma, dem von LiteLLM verwendeten ORM. |
| Httpx-Fehler | ✅ Anfrage wird zugelassen | Tritt auf, wenn die Datenbank nicht erreichbar ist, sodass die Anfrage trotz des DB-Ausfalls fortgesetzt werden kann. |
| Pod-Startverhalten | ✅ Pods starten trotzdem | LiteLLM-Pods starten auch dann, wenn die Datenbank nicht verfügbar oder nicht erreichbar ist, was eine höhere Verfügbarkeit für Deployments gewährleistet. |
| Health/Readiness-Prüfung | ✅ Gibt immer 200 OK zurück | Der Endpunkt /health/readiness gibt einen 200 OK-Status zurück, um sicherzustellen, dass Pods auch dann betriebsbereit bleiben, wenn die Datenbank nicht verfügbar ist. |
| LiteLLM-Budgetfehler oder Modellfehler | ❌ Anfrage wird blockiert | Ausgelöst, wenn die DB erreichbar ist, aber das Authentifizierungstoken ungültig ist, keine Zugriffsrechte hat oder Budgetlimits überschreitet. |
6. Deaktivieren Sie spend_logs & error_logs, wenn Sie die LiteLLM UI nicht verwenden
Standardmäßig schreibt LiteLLM verschiedene Arten von Protokollen in die Datenbank
- Jede LLM-API-Anfrage an die Tabelle
LiteLLM_SpendLogs - LLM-Ausnahmen an die Tabelle
LiteLLM_SpendLogs
Wenn Sie diese Protokolle nicht in der LiteLLM-UI anzeigen, können Sie sie deaktivieren, indem Sie die folgenden Flags auf True setzen
general_settings:
disable_spend_logs: True # Disable writing spend logs to DB
disable_error_logs: True # Disable writing error logs to DB
Mehr Informationen darüber, wofür die Datenbank verwendet wird, finden Sie hier
7. Verwenden Sie den Helm PreSync Hook für Datenbankmigrationen[BETA]
Um sicherzustellen, dass nur ein Dienst Datenbankmigrationen verwaltet, verwenden Sie unseren Helm PreSync Hook für Datenbankmigrationen. Dies stellt sicher, dass Migrationen während helm upgrade oder helm install durchgeführt werden, während LiteLLM-Pods explizit Migrationen deaktivieren.
Helm PreSync Hook:
- Der Helm PreSync Hook ist im Chart konfiguriert, um Datenbankmigrationen während Deployments auszuführen.
- Der Hook setzt immer
DISABLE_SCHEMA_UPDATE=false, um sicherzustellen, dass Migrationen zuverlässig ausgeführt werden.
Referenzeinstellungen für ArgoCD für
values.yamldb:
useExisting: true # use existing Postgres DB
url: postgresql://ishaanjaffer0324:... # url of existing Postgres DBLiteLLM-Pods:
- Setzen Sie
DISABLE_SCHEMA_UPDATE=truein den LiteLLM-Pod-Konfigurationen, um zu verhindern, dass sie Migrationen ausführen.
Beispielkonfiguration für LiteLLM-Pod
env:
- name: DISABLE_SCHEMA_UPDATE
value: "true"- Setzen Sie
8. Setzen Sie den LiteLLM Salt Key
Wenn Sie die DB verwenden möchten, setzen Sie einen Salt Key zum Verschlüsseln/Entschlüsseln von Variablen in der DB.
Ändern Sie dies nicht, nachdem Sie ein Modell hinzugefügt haben. Es wird verwendet, um Ihre LLM-API-Schlüssel-Zugangsdaten zu verschlüsseln / entschlüsseln.
Wir empfehlen: https://1password.com/password-generator/ Passwortgenerator, um einen zufälligen Hash für den LiteLLM Salt Key zu erhalten.
export LITELLM_SALT_KEY="sk-1234"
9. Verwenden Sie prisma migrate deploy
Verwenden Sie dies, um DB-Migrationen über LiteLLM-Versionen hinweg in der Produktion zu handhaben
- UMGEBUNG
- CLI
USE_PRISMA_MIGRATE="True"
litellm --use_prisma_migrate
Vorteile
Der migrate deploy Befehl
- Gibt **keine** Warnung aus, wenn eine bereits angewendete Migration in der Migrationshistorie fehlt
- Erkennt **keine** Abweichungen (Produktionsdatenbank-Schema weicht vom Endzustand der Migrationshistorie ab – z. B. aufgrund eines Hotfixes)
- Setzt die Datenbank **nicht** zurück und generiert keine Artefakte (wie Prisma Client)
- Verlässt sich **nicht** auf eine Schatten-Datenbank
Wie behandelt LiteLLM DB-Migrationen in der Produktion?
Eine neue Migrationsdatei wird in unser Paket
litellm-proxy-extrasgeschrieben. Alle anzeigenDas Kern-pip-Paket
litellmwird angehoben, um auf das neue Paketlitellm-proxy-extraszu verweisen. Dies stellt sicher, dass ältere Versionen von LiteLLM die alten Migrationen weiterhin verwenden. Code anzeigenWenn Sie auf eine neue Version von LiteLLM upgraden, wird die Migrationsdatei auf die Datenbank angewendet. Code anzeigen
Schreibgeschütztes Dateisystem
Wenn Sie eine Fehlermeldung "Permission denied" sehen, bedeutet dies, dass der LiteLLM-Pod mit einem schreibgeschützten Dateisystem ausgeführt wird.
Um dies zu beheben, setzen Sie einfach LITELLM_MIGRATION_DIR="/path/to/writeable/directory" in Ihrer Umgebung.
LiteLLM verwendet dieses Verzeichnis zum Schreiben von Migrationsdateien.
Extras
Erwartete Leistung in der Produktion
1 LiteLLM Uvicorn Worker auf Kubernetes
| Beschreibung | Wert |
|---|---|
| Durchschnittliche Latenz | 50ms |
| Median-Latenz | 51ms |
/chat/completions Anfragen/Sekunde | 100 |
/chat/completions Anfragen/Minute | 6000 |
/chat/completions Anfragen/Stunde | 360K |
Überprüfung, ob Debugging-Logs deaktiviert sind
Sie sollten nur die folgenden Detailierungsstufen in den Logs auf dem Proxy-Server sehen
# INFO: 192.168.2.205:11774 - "POST /chat/completions HTTP/1.1" 200 OK
# INFO: 192.168.2.205:34717 - "POST /chat/completions HTTP/1.1" 200 OK
# INFO: 192.168.2.205:29734 - "POST /chat/completions HTTP/1.1" 200 OK