Deine erste LLM-API auf Kubernetes
Das Ausführen eines LLM auf Kubernetes unterscheidet sich vom Betrieb einer Standard-Web-App. Du skalierst nicht einfach nach Anfragen, sondern nach GPU-Kapazität und Modellgewichten.
In diesem Leitfaden wirst du ein Modell auf einem GPU-Knoten bereitstellen, es als API exponieren und es mit einer curl-Anfrage aufrufen.
Wir verwenden diese Tools:
- Modell: Qwen/Qwen2.5-1.5B-Instruct
- Engine: vLLM
- Infrastruktur: Kubernetes mit NVIDIA GPU-Unterstützung
Schritt 1: GPU-Kapazität prüfen
Bevor du beginnst, stelle sicher, dass Kubernetes deine Hardware erkennt. Führe diesen Befehl aus:
kubectl get nodes -o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu
Wenn die GPU-Spalte leer ist, halte inne. Du musst zuerst dein NVIDIA Device Plugin beheben.
Schritt 2: Modellzugriff absichern Verwende auch für öffentliche Modelle einen Hugging Face Token. Dies erleichtert den späteren Wechsel zu privaten Modellen.
- Erstelle einen Namespace:
kubectl create namespace llm-demo - Erstelle ein Secret für deinen Token:
kubectl create secret generic hf-token -n llm-demo --from-literal=HF_TOKEN="your_token_here"
Schritt 3: Modellserver bereitstellen Wir verwenden vLLM, da es die Schwerstarbeit übernimmt. Es verwaltet das Batching, die Tokenisierung und die OpenAI-kompatible API.
Erstelle eine Deployment-Datei mit diesen Kernanforderungen:
- 1 GPU anfordern:
nvidia.com/gpu: 1 - Mounten von
/dev/shm: Modellserver benötigen Shared Memory, um Abstürze zu vermeiden. - Secrets verwenden: Übergib deinen
HF_TOKENan den Container.
Wende deine Konfiguration an:
kubectl apply -f qwen-vllm.yaml
Schritt 4: API verifizieren
Vertraue nicht dem Status "Running". Ein Pod wird als "Running" angezeigt, während er noch massive Modelldateien herunterlädt. Überwache deine Logs:
kubectl logs -n llm-demo -f deployment/qwen-vllm
Warte, bis du siehst, dass der Server auf Port 8000 lauscht.
Teste es mit Port-Forwarding:
kubectl port-forward -n llm-demo svc/qwen-vllm 8000:8000
Führe deine curl-Anfrage aus:
curl http://127.0.0.1:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen/Qwen2.5-1.5B-Instruct",
"messages": [{"role": "user", "content": "Explain Kubernetes in two sentences."}],
"max_tokens": 120
}'
Das Ziel: Du bist von der reinen GPU-Kapazität zu einer funktionierenden API übergegangen. Du hast bewiesen, dass:
- Kubernetes die GPU-Workload plant.
- Der Container auf die Hardware zugreifen kann.
- Der Modellserver Gewichte in den Speicher lädt.
- Die API auf Standardanfragen reagiert.
Wenn dieser Kreislauf fehlschlägt, werden Skalierung und Routing dich nicht retten. Behebe zuerst das Fundament.
Optionale Lern-Community: https://t.me/GyaanSetuAi
