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_TOKEN an 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.

Quelle: https://dev.to/the-persistent-engineer/your-first-llm-api-on-kubernetes-from-model-to-curl-request-4l1j

Optionale Lern-Community: https://t.me/GyaanSetuAi