LLMs für die Produktion skalieren: Ein praktischer Leitfaden
Große Sprachmodelle (LLMs) haben sich rasant weiterentwickelt und sind von Forschungsneugierden zu leistungsstarken Werkzeugen für verschiedene Anwendungen geworden. Während das Starten eines einfachen Chatbots mit Tools wie Llama.cpp oder Ollama relativ unkompliziert ist, stellt die Bereitstellung von LLMs in einer Produktionsumgebung zur Bearbeitung realer Workloads eine andere Reihe von Herausforderungen dar. Zu diesen Herausforderungen gehören die Verwaltung mehrerer gleichzeitiger Benutzer, die Sicherstellung von Uptime-Garantien und die Optimierung der GPU-Ressourcennutzung, um Budgetbeschränkungen nicht zu überschreiten.
Die Ressourcen, die zum Bereitstellen eines LLM in großem Maßstab benötigt werden, unterscheiden sich erheblich von denen, die zum Ausführen auf einem Personal Computer erforderlich sind. Ein Modell, das mit weniger als 4 GB Speicher auf einem PC effizient arbeitet, kann 40 GB oder mehr GPU-Speicher benötigen, wenn es in einer Produktionsumgebung bereitgestellt wird, um zahlreiche gleichzeitige Anfragen zu bearbeiten.
Dieser Leitfaden untersucht die Möglichkeiten zur Skalierung von KI-Workloads von ersten Proof-of-Concept-Projekten bis hin zu produktionsreifen Bereitstellungen. Wir führen Sie durch die Bereitstellung von Modellen wie Gemma 3 oder Llama 3 in großem Maßstab.
Nutzung von APIs für die LLM-Integration
Die Integration von LLMs in eine Codebasis kann auf verschiedene Arten erfolgen, aber die Verwendung einer OpenAI-kompatiblen API wird für Produktionsbereitstellungen dringend empfohlen. Dieser Ansatz bietet die Flexibilität, sich an die sich schnell entwickelnde Modelllandschaft anzupassen. Modelle, die noch vor wenigen Monaten als hochmodern galten, können schnell veraltet sein.
Seit dem KI-Boom, der mit ChatGPT im Jahr 2022 begann, hat sich die API-Schnittstelle von OpenAI zum De-facto-Standard für die Verbindung von Anwendungen mit LLMs entwickelt. Dieser Standard ermöglicht es Entwicklern, Anwendungen mit verfügbaren Ressourcen zu erstellen, z. B. mit Mistral 7B in Llama.cpp auf einem Notebook zu beginnen und nahtlos zu den API-Servern von Mistral AI für die Produktionsbereitstellung überzugehen. Dadurch wird vermieden, dass man an ein einzelnes Modell, eine einzelne Inferenz-Engine oder einen einzigen API-Anbieter gebunden ist.
Cloudbasierte Inferenzdienste bieten eine investitionsausgabenfreundliche (Capex) Möglichkeit zur Skalierung von KI-Bereitstellungen. Diese Dienste machen die Hardwareverwaltung und Modellkonfiguration überflüssig und stellen stattdessen eine API für die Anwendungsintegration bereit.
Zusätzlich zu den API-Angeboten der großen Modellbauer bietet eine wachsende Zahl von KI-Infrastruktur-Startups Inference-as-a-Service für Open-Weight-Modelle an. Diese Anbieter unterscheiden sich in ihren Ansätzen. Einige, wie SambaNova, Cerebras und Groq, nutzen spezialisierte Hardware oder Techniken wie spekulative Dekodierung, um die Inferenz zu beschleunigen, bieten aber eine kleinere Auswahl an Modellen. Andere, wie Fireworks AI, unterstützen die Bereitstellung von kundenspezifischen, feinabgestimmten Modellen mithilfe von Low Rank Adaptation (LoRA)-Adaptern. Die Vielfalt des KI-Ökosystems erfordert eine gründliche Recherche, bevor man sich für einen bestimmten Anbieter entscheidet.
Überlegungen zur lokalen LLM-Bereitstellung
In Situationen, in denen cloudbasierte Ansätze aufgrund von Datenschutz-, regulatorischen oder bereits bestehenden Infrastrukturbeschränkungen (z. B. ein Unternehmen hat bereits in GPU-Server investiert) nicht möglich sind, ist eine lokale Bereitstellung erforderlich. Dies kann mehrere Herausforderungen mit sich bringen. Einige häufig gestellte Fragen sind:
- Modellauswahl: Das geeignete Modell hängt vom spezifischen Anwendungsfall ab. Ein Modell, das für einen Kundendienst-Chatbot entwickelt wurde, hat andere Anforderungen als ein Modell, das für die Retrieval-Augmented Generation oder als Code-Assistent verwendet wird. Es wird empfohlen, sich mit API-Anbietern in Verbindung zu setzen, um ein Modell zu finden, das den Anforderungen entspricht.
- Hardwareanforderungen: Die Bestimmung der erforderlichen Hardware ist von entscheidender Bedeutung, da GPUs teuer und schwer zu beschaffen sein können. Das Modell selbst kann Einblicke in die Hardware geben, die zum Ausführen erforderlich ist. Größere Modelle benötigen mehr Hardware. Eine grobe Schätzung des minimalen GPU-Speichers kann berechnet werden, indem die Anzahl der Parameter (in Milliarden) mit 2 GB für Modelle multipliziert wird, die mit 16-Bit-Genauigkeit trainiert wurden. Für 8-Bit-Modelle werden 1 GB pro Milliarde Parameter benötigt. Modellkomprimierungstechniken wie Quantisierung können dies auf 512 MB pro Milliarde Parameter reduzieren. Dies ist eine untere Grenze. Zusätzlicher Speicher wird benötigt, um das Modell für mehrere Benutzer gleichzeitig bereitzustellen, da der Key-Value-Cache als Kurzzeitgedächtnis des Modells fungiert. Die Support-Matrix von Nvidia bietet Anleitungen zu den GPUs, die zum Ausführen verschiedener Modelle benötigt werden.
- Redundanz: Zusätzlich zur Größenanpassung der Hardware an das Modell muss die Redundanz berücksichtigt werden. Ein einzelner GPU-Knoten ist anfällig für Ausfälle, daher ist die Bereitstellung von zwei oder mehr Systemen für Failover und Lastausgleich wichtig.
- Bereitstellungsmethoden: LLMs können mit verschiedenen Methoden bereitgestellt und in der Produktion bereitgestellt werden: Bare Metal mit Load Balancern, virtuelle Maschinen oder Container in Docker oder Kubernetes. Kubernetes vereinfacht groß angelegte Bereitstellungen, indem es die Containererstellung, das Networking und den Lastausgleich automatisiert.
Kubernetes für die LLM-Bereitstellung
Kubernetes abstrahiert einen Großteil der Komplexität, die mit groß angelegten Bereitstellungen verbunden ist, indem es die Containererstellung, das Networking und den Lastausgleich automatisiert. Viele Unternehmen haben Kubernetes bereits übernommen und verstehen es. Nvidia, Hugging Face und andere bevorzugen containerisierte Umgebungen mit Nvidia Inference Microservices (NIMs) und Hugging Face Generative AI Services (HUGS), die für gängige Workloads und Bereitstellungen vorkonfiguriert sind.
Inferenz-Engines
Es stehen verschiedene Inferenz-Engines zum Ausführen von Modellen zur Verfügung, darunter Ollama und Llama.cpp, die mit einer Vielzahl von Hardware kompatibel sind. Zum Skalieren von Modellen werden häufig Bibliotheken wie vLLM, TensorRT LLM, SGLang und PyTorch verwendet. Dieser Leitfaden konzentriert sich auf die Bereitstellung von Modellen mit vLLM, da es eine große Auswahl an gängigen Modellen unterstützt und eine breite Unterstützung und Kompatibilität über Nvidia, AMD und andere Hardware hinweg bietet.
Vorbereiten der Kubernetes-Umgebung
Das Einrichten einer Kubernetes-Umgebung zur Verwendung mit GPUs erfordert zusätzliche Treiber und Abhängigkeiten im Vergleich zu einer typischen Kubernetes-Einrichtung. Der Einrichtungsprozess unterscheidet sich für AMD- und Nvidia-Hardware.
Dieser Leitfaden verwendet K3S in einer Einzelknotenkonfiguration. Die grundlegenden Schritte sind ähnlich wie bei Mehrknotenumgebungen, aber Abhängigkeiten müssen auf jedem GPU-Worker-Knoten erfüllt werden, und die Speicherkonfiguration erfordert möglicherweise Anpassungen.
Ziel ist es, eine solide Grundlage für die Bereitstellung von Inferenz-Workloads auf eine produktionsfreundliche Weise zu schaffen. Die folgenden Voraussetzungen sind erforderlich:
- Ein Server oder eine Workstation mit mindestens einer unterstützten AMD- oder Nvidia-GPU-Karte
- Eine Neuinstallation von Ubuntu 24.04 LTS
Nvidia-Abhängigkeiten
Das Einrichten einer Nvidia-beschleunigten K3S-Umgebung erfordert die Installation von CUDA-Treibern, Fabric Manager und Headless-Servertreibern. Installieren Sie die Server-Dienstprogramme von Nvidia, um Treiberprobleme zu debuggen.
Die Installation der erforderlichen Nvidia-Komponenten kann je nach verwendeter Ubuntu-Version variieren. Es wird empfohlen, die offizielle Nvidia-Dokumentation für die spezifische Ubuntu-Version zu konsultieren.
Hier sind die allgemeinen Schritte:
- Deaktivieren Sie den Nouveau-Treiber: Der Nouveau-Treiber ist ein Open-Source-Treiber für Nvidia-Grafikkarten, der mit den Nvidia-Treibern in Konflikt stehen kann. Um ihn zu deaktivieren, erstellen Sie eine Datei
/etc/modprobe.d/blacklist-nouveau.conf
mit folgendem Inhalt: