Funktionen¶
Der Funktionsumfang gliedert sich in Hardware- und GPU-Verwaltung, Modell-Verwaltung, Routing und API-Bereitstellung, Schlüssel-Management, qualitätssichernde Funktionen sowie Monitoring und Energie-Tracking. Die Bedienung erfolgt über eine tabbasierte Web-Oberfläche.
Anwendungsszenarien¶
- Chat-, Vision- und Embedding-Modelle für Forschungsgruppen. Auf einem Server mit mehreren NVIDIA-GPUs werden parallel ein größeres Chat-Modell (über mehrere GPUs per Tensor-Parallel) und ein kleineres Embedding-Modell (auf einer MIG-Instanz) bereitgestellt. Mitglieder der Gruppe greifen über Virtual Keys mit individuellen Rate-Limits und Modell-Einschränkungen zu.
- Spracherkennung und Sprachsynthese als interne Dienste. Speech-to-Text- und Text-to-Speech-Modelle laufen auf MIG-Instanzen oder kleineren GPUs und werden über die direkten Endpunkte
/models/<n>/v1/*an interne Anwendungen — etwa Transkriptions-Tools oder Vorlese-Funktionen — angebunden. - Bildgenerierung als interner Dienst. Bildgenerierungs-Modelle werden auf einer dedizierten GPU bereitgestellt und über einen Direkt-Routen-Key an eine interne Anwendung gebunden, ohne dass diese am Virtual-Key-System teilnimmt.
- Multi-Tenant-Betrieb mit Verbrauchsabrechnung. Mehrere Arbeitsgruppen nutzen denselben Server. Pro Gruppe oder Person wird ein Virtual Key mit RPM-Limit, Modell-Einschränkungen und Spend-Tracking erzeugt; die Verbrauchsdaten lassen sich über die LiteLLM-Management-API auswerten.
- Bereitstellung im Hochschulnetz ohne Schlüsselverteilung. In firewall-geschützten Netzen werden ausgewählte Chat-, Vision- und Embedding-Modelle über die Open-Access-Route
/open/<n>/v1/*mit beliebigem Bearer-Token erreichbar gemacht. Die Zugriffskontrolle erfolgt durch die vorgelagerte Firewall; ein Kill-Switch deaktiviert alle Open-Access-Routen sofort. - Performance-Vergleich vor Modell-Auswahl. Vor der Übernahme eines Modells in den Regelbetrieb werden TTFT-Perzentile (P50/P95/P99), Gesamtlatenz und Throughput direkt am vLLM-Container gemessen — ohne Proxy-Overhead. Mehrere Modelle lassen sich nacheinander unter denselben Bedingungen testen.
Auf einen Blick¶
- Automatische Erkennung aller NVIDIA-GPUs (Anzahl, Typ, VRAM, NVLink, MIG-Status) und Persistenz der MIG-Konfiguration über Reboots hinweg.
- Sieben Modell-Typen mit typspezifischen Defaults für Docker-Image, Argumente, Routing und Endpunkte.
- Zwei API-Routing-Pfade (LiteLLM-vermittelt und direkt) hinter einem gemeinsamen HTTPS-Reverse-Proxy.
- Dreistufiges API-Key-System (Master, Direkt-Routen-Keys, Virtual Keys) mit getrennten Geltungsbereichen.
- Replicas mit transparentem Load Balancing und Live-Statusanzeige (z.B. 4/4, 3/4 bei Teilausfall).
- Zweisprachige Oberfläche (Deutsch/Englisch) mit Umschalter in der Kopfzeile.
- Pro Modell wählbare vLLM-Version — mehrere Versionslinien laufen parallel auf derselben Maschine, neue Modelle starten unabhängig vom Bestand.
- LiteLLM-Aliase: ein Modell unter mehreren API-Namen mit fest hinterlegten Parameter-Bündeln (Sampling, Reasoning-Stufen).
- Integriertes Prometheus- und Grafana-Monitoring sowie ein eigener Energie-Monitor mit CSV-Export.
- Wiederherstellung des vorherigen Betriebszustands nach Reboot über einen einzigen Bedienschritt.
Hardware- und GPU-Verwaltung¶
Beim Start werden alle NVIDIA-GPUs erkannt und in der Oberfläche aufgeführt — inklusive VRAM, NVLink- und NVSwitch-Verbindungen sowie MIG-Status. Heterogene Konstellationen (z.B. eine A100 neben mehreren H100) werden unterstützt. Über den MIG-Bereich lassen sich GPUs in isolierte Instanzen partitionieren (Profile von 1g.45gb bis 4g.180gb, bis zu sieben Instanzen pro GPU); kleine Modelle laufen auf MIG-Instanzen, große Modelle belegen ganze GPUs. Die MIG-Konfiguration wird in einer eigenen Datei persistiert und nach einem Reboot automatisch wiederhergestellt.
Ein integrierter GPU-Speicher-Kalkulator schätzt anhand von Parameteranzahl, Quantisierung, Kontextlänge und Architekturdetails den VRAM-Bedarf (Modellgewichte, KV-Cache, Aktivierungen, Overhead) und schlägt eine zur NVLink-Topologie passende Tensor-Parallel-Konstellation vor.
Modell-Verwaltung¶
Modelle werden über die Hugging-Face-ID hinzugefügt; Modell-Typ, GPU- bzw. MIG-Zuweisung, Quantisierung (auto, fp8, awq, gptq, bitsandbytes), maximale Kontextlänge sowie zusätzliche vLLM-Argumente und Umgebungsvariablen lassen sich pro Modell setzen. Jedes Modell läuft in einem eigenen Docker-Container; Container-Logs sind direkt aus der Oberfläche einsehbar. Optional lassen sich pro Modell ein eigenes Jinja2-Chat-Template, eine eigene vLLM- bzw. vLLM-Omni-Version, ein abweichendes Docker-Image und mehrere Replicas (1–8) konfigurieren. Modelle ohne eigene Versionsangabe folgen der global konfigurierten Version; damit lassen sich einzelne Modelle auf einer anderen vLLM-Linie betreiben als der übrige Bestand, und die Modell-Tabelle weist die jeweils wirksame Version aus. Bei Replicas > 1 erstellt LLM-Manager identische Container auf den zugewiesenen GPUs; die Validierung verlangt eine durch die Replica-Anzahl teilbare GPU-Anzahl.
Ein eingebauter Vorab-Download über die Hugging-Face-CLI lädt Modelle ohne GPU-Belegung in den lokalen Cache, sodass auch sehr große Modelle ausserhalb der eigentlichen Inbetriebnahme bereitgestellt werden können. Eine Cache-Übersicht zeigt heruntergeladene Modelle mit Größe und erlaubt selektives Bereinigen.
Konnektoren und externe Dienste¶
- Hugging Face Hub — Bezugsquelle aller Modelle. Der Zugriff erfolgt über die offizielle Hugging-Face-CLI in einem temporären Container; ein Hugging-Face-Token kann für geschützte Modelle hinterlegt werden. Heruntergeladene Modelle liegen in einem geteilten Cache und werden in alle vLLM-Container als Volume eingebunden.
- Docker Hub — Bezugsquelle für die offiziellen vLLM-Images, das PostgreSQL-Image, das Caddy-Image, das Prometheus-Image und das Grafana-Image.
- GitHub Container Registry (ghcr.io) — Bezugsquelle für die LiteLLM-Images (Standard-Variante und Database-Variante mit Prisma).
- ACME-Server (Let's Encrypt oder eigener Server) — Bezugsquelle für TLS-Zertifikate, die Caddy automatisch bezieht und verlängert. Endpunkt und E-Mail-Adresse sind konfigurierbar.
Routing und API-Bereitstellung¶
Zwei Routing-Pfade decken alle Modell-Typen ab. Chat-, Vision- und Embedding-Modelle werden unter /v1/chat/completions, /v1/embeddings und /v1/models über LiteLLM gebündelt; LiteLLM authentifiziert per Master-Key oder Virtual Key und routet intern an den jeweiligen vLLM-Container. Spracherkennungs-, Sprachsynthese- und Bildgenerierungs-Modelle werden direkt unter /models/<n>/v1/* an den vLLM-Container geleitet; Caddy entfernt das Präfix und prüft den Authorization-Header per Expression-Matcher gegen den Master-Key sowie alle eingetragenen Direkt-Routen-Keys.
Optional lässt sich pro chat-, vision- oder embedding-fähigem Modell der Open-Access-Modus aktivieren, der eine Route /open/<n>/v1/* mit beliebigem Bearer-Token freischaltet. Caddy ersetzt den Token durch den echten Master-Key und reicht die Anfrage an LiteLLM weiter. Ein Kill-Switch im HTTPS-Bereich deaktiviert alle Open-Access-Routen gleichzeitig.
Pro Modell lassen sich zusätzlich LiteLLM-Aliase definieren: weitere API-Modellnamen, an die feste Parameter-Bündel gebunden sind — Sampling-Werte sowie Template-Einstellungen wie Reasoning-Stufen über chat_template_kwargs. Clients wählen damit ein Verhalten statt einzelner Parameter (etwa modell, modell-low, modell-med, modell-xhigh). Aliase folgen dem Modellstatus, erben Replicas samt Load Balancing und erscheinen in der generierten LiteLLM-Konfiguration als eigenständige Einträge; ein Alias mit dem Namen des Modells ersetzt dessen Standard-Eintrag, sodass auch der Basisname ein definiertes Bündel trägt.
Die Modell-Tabelle zeigt pro Modell die vollständige Client-URL, sodass sich Endpunkte direkt entnehmen lassen.
API-Key-Management¶
Drei Schlüsseltypen mit unterschiedlichem Geltungsbereich:
- Master-Key — gilt für alle Routen, wird in der Konfigurationsdatei abgelegt und sowohl von LiteLLM als auch von Caddy akzeptiert.
- Direkt-Routen-Keys — beliebig viele Schlüssel, die ausschließlich für
/models/<n>/v1/*gelten und für interne Anwendungen vorgesehen sind. Sie werden über einen Caddy-Expression-Matcher validiert. - Virtual Keys — über die LiteLLM-Management-API erzeugt, in PostgreSQL persistiert; zu jedem Schlüssel lassen sich RPM-Limits, Modell-Einschränkungen und Spend-Tracking hinterlegen. PostgreSQL wird beim ersten Virtual Key automatisch eingerichtet — kein eigener Konfigurationsschritt.
Qualitätssichernde Funktionen¶
Mehrere Mechanismen sichern Konsistenz, Robustheit und Nachvollziehbarkeit ab:
- Validierung der Konfiguration. Replicas erfordern eine durch ihre Anzahl teilbare GPU-Anzahl; reservierte Modellnamen (
open,models,v1) werden abgelehnt; MIG-Änderungen sind nur möglich, wenn keine Container auf der betroffenen GPU laufen; Alias-Namen werden über alle Modelle hinweg auf Eindeutigkeit geprüft. Beim Speichern warnen Regeln vor veralteten oder unbekannten vLLM-Argumenten. - Konsistenzprüfung. Ein eigener Bereich vergleicht laufende Container gegen die Konfiguration — Image und Version, Argumente, GPU-/MIG-Zuweisung und Umgebungsvariablen, bei Replicas je Replica einzeln — und weist Abweichungen typisiert aus. Soll- und Ist-Zustand entstehen aus derselben Aufbaulogik wie der Container-Start.
- Selektive Aktualisierung. Ein Image- oder Versionswechsel startet nur die Container neu, deren Ziel-Image sich tatsächlich ändert; alle übrigen laufen unberührt weiter.
- Sichere Container-Operationen. Der Stop-Vorgang von PostgreSQL entfernt nie den Container und nie das Volume; der Neustart von LiteLLM hält drei Sekunden zwischen Stop und Start ein und berührt PostgreSQL und Caddy nicht; Health-Checks gewähren bei Datenbank-Migrationen 60 Sekunden Anlaufzeit.
- Persistenz und Wiederherstellung. Modell- und MIG-Konfiguration werden in lokalen Dateien gespeichert; ein Restore-Vorgang stellt nach einem Reboot in fünf Schritten den vorherigen Betriebszustand her — MIG-Partitionen, PostgreSQL, Modelle, LiteLLM, Caddy. Optional folgt der Monitoring-Stack als sechster Schritt.
- Live-Logs und Live-Status. Container-Logs sind direkt aus der Oberfläche einsehbar; der Status laufender Modelle wird einschließlich Replica-Zähler in der Modell-Tabelle dargestellt.
- Reproduzierbare Image-Auswahl. Die Image-Auswahl folgt einer festen Priorität (Override, Rezept-Image, vLLM-Omni-Image, Standard-vLLM-Image); Rezept-Images für Spracherkennungs-Modelle werden definiert reproduzierbar gebaut.
- Benchmark-Funktion. Leistungsmessungen direkt am vLLM-Container — ohne Proxy-Overhead — mit konfigurierbarer Request-Anzahl, Concurrency und Prompt-Länge. Ausgewertet werden TTFT-Perzentile (P50/P95/P99), Gesamtlatenz, Tokens pro Sekunde und Requests pro Sekunde, jeweils nach einem Warmup-Request.
Monitoring und Energie-Tracking¶
Prometheus, Grafana und der NVIDIA DCGM Exporter werden als zusätzliche Container über die Oberfläche gestartet, gestoppt und konfiguriert. Prometheus-Scrape-Targets werden bei jedem Modell-Start oder -Stopp automatisch aktualisiert; die Retention ist zwischen 30 und 365 Tagen einstellbar. Grafana ist über https://host/grafana/ mit IP-Whitelist oder per SSH-Tunnel über Port 3000 erreichbar.
Vier vorkonfigurierte Dashboards stehen bereit: ein Übersichts-Dashboard (Token-Nutzung, Throughput, TTFT-P95, GPU-Power, KV-Cache, Requests pro Sekunde), ein Pro-Modell-Detail-Dashboard (Latenz-Perzentile, Queue-Wartezeit, Prefix-Cache-Hitrate), ein Vergleichs-Dashboard (Multi-Select über Modelle) und ein Energie- und GPU-Dashboard (GPU-Leistung, Temperatur, VRAM, Effizienz in Wh / 1000 Tokens). Labels model_name und model_type auf allen Metriken erlauben Aggregation über Modellwechsel hinweg; Modelle der Omni-Runtime (Sprachsynthese, Bildgenerierung) werden über ihre eigenen Metriknamen in die Dashboards einbezogen.
Unabhängig vom Grafana-Stack misst ein leichtgewichtiger Energie-Monitor pro GPU die Leistungsaufnahme (über nvidia-smi, alle zwei Sekunden) und ordnet sie Sitzungen zu. Sitzungs-Token-Zählung und Effizienzkennzahlen lassen sich als CSV exportieren.
Konfiguration und Betrieb¶
Die Konfiguration wird in einer einzigen JSON-Datei gehalten; LiteLLM-Konfiguration, Caddyfile, Prometheus-Konfiguration und Grafana-Provisioning werden aus dieser zentralen Datei generiert und beim Modell- oder Routen-Wechsel aktualisiert. Die Web-Oberfläche bindet ausschließlich auf 127.0.0.1:7860; der Zugriff erfolgt vom Server selbst oder über einen SSH-Tunnel. Externe Erreichbarkeit ist nur über Caddy auf Port 443 möglich; das Admin-UI lässt sich zusätzlich per IP-Whitelist absichern.
Import- und Exportformate¶
- Modell-Import: Hugging-Face-IDs (öffentlich oder mit Token); Modelle werden in einen geteilten Hugging-Face-Cache geladen und von allen Containern als Volume eingebunden.
- Konfigurations-Import und -Export: Backup und Wiederherstellung über das Konfigurationsverzeichnis (z.B. per
tar); MIG-Konfiguration und Modell-Definitionen werden mitgesichert. Die zentraleconfig.jsonist die einzige relevante Datei. - Energie-Export: CSV pro Sitzung mit Zeitstempel, GPU-Leistung, Token-Anzahl und Effizienz.
- Generierte Konfigurationen:
litellm-config.yaml,Caddyfile,prometheus.ymlsowie Grafana-Dashboard- und -Datasource-JSONs werden bei jeder Änderung neu erzeugt und dienen gleichzeitig als nachvollziehbare Snapshots des Routings.