- Authors

- Name
- Phillip Pham
- @ddppham
Stable Diffusion auf Kubernetes: Self-Hosting fuer KI-Bildgenerierung
TL;DR
- Self-Hosting von Stable Diffusion auf Kubernetes gibt volle Kontrolle ueber Daten, Modelle und Kosten -- keine Abhaengigkeit von externen APIs
- Mindestanforderung: NVIDIA GPU mit 12 GB VRAM (fuer SDXL empfohlen: 24 GB), NVIDIA Device Plugin im Cluster
- AUTOMATIC1111 ist ideal fuer den Einstieg, ComfyUI fuer komplexe Workflows und API-Integration
- Mit Horizontal Pod Autoscaler und GPU-Metriken skaliert die Loesung automatisch bei steigendem Bedarf
- Persistent Volumes fuer Modelle und Outputs sind Pflicht -- Basismodelle allein benoetigen 5-10 GB
Warum Stable Diffusion selbst hosten?
Externe Dienste wie Midjourney oder DALL-E sind bequem, aber sie haben drei Nachteile: Jeder Prompt und jedes generierte Bild verlassen das Unternehmen. Die Kosten skalieren linear mit dem Volumen. Und Fine-Tuning auf eigene Markenassets ist nicht moeglich.
Self-Hosting auf Kubernetes loest alle drei Probleme. Prompts und Outputs bleiben im eigenen Cluster. Bei hohem Volumen sinken die Kosten pro Bild auf einen Bruchteil der API-Preise. Und mit LoRA oder DreamBooth lassen sich Modelle auf eigene Produkte, Stile oder Markenidentitaeten trainieren.
Wann lohnt sich Self-Hosting?
| Kriterium | Externer Dienst | Self-Hosting |
|---|---|---|
| Volumen | < 500 Bilder/Monat | > 500 Bilder/Monat |
| Kosten bei Skalierung | Linear steigend | Nahezu konstant (Fixkosten) |
| Datenkontrolle | Daten beim Anbieter | Daten im eigenen Cluster |
| Fine-Tuning | Nicht moeglich | Volle Kontrolle |
| Latenz | Abhaengig vom Anbieter | Abhaengig von eigener GPU |
| Initialaufwand | Gering (API-Key) | Mittel (Cluster + GPU-Setup) |
| Modellauswahl | Vom Anbieter vorgegeben | Beliebiges Open-Source-Modell |
Ab einem Volumen von ca. 500 Bildern pro Monat wird Self-Hosting in der Regel guenstiger als API-basierte Dienste. Bei Unternehmen mit strengen Datenschutzanforderungen kann es unabhaengig vom Volumen die einzig sinnvolle Option sein.
Architektur im Ueberblick
Die Kernkomponenten einer Self-Hosted Stable Diffusion Installation auf Kubernetes:
- GPU-Worker-Nodes mit NVIDIA-GPUs und installiertem NVIDIA Device Plugin
- Stable Diffusion Pod mit Web-UI (AUTOMATIC1111 oder ComfyUI)
- Persistent Volume Claims fuer Modelle (ReadWriteMany) und Outputs
- Ingress Controller fuer den Zugriff auf das Web-UI mit TLS
- Monitoring via Prometheus + DCGM Exporter fuer GPU-Metriken
Das NVIDIA Device Plugin registriert GPUs als schedulable Resource (nvidia.com/gpu) im Cluster. Der Kubernetes Scheduler weist Pods mit GPU-Requests automatisch den passenden Nodes zu.
GPU-Anforderungen und Hardware-Vergleich
| GPU | VRAM | SD 1.5 | SDXL | SDXL + LoRA | Preis (ca.) |
|---|---|---|---|---|---|
| RTX 3060 | 12 GB | Gut | Eingeschraenkt | Nicht empfohlen | 300 EUR |
| RTX 4070 Ti | 12 GB | Gut | Machbar | Eingeschraenkt | 700 EUR |
| RTX 4090 | 24 GB | Excellent | Gut | Gut | 1.800 EUR |
| A100 (40 GB) | 40 GB | Excellent | Excellent | Excellent | 10.000+ EUR |
| L40S | 48 GB | Excellent | Excellent | Excellent + Batch | 8.000+ EUR |
Fuer den Einstieg reicht eine RTX 4090 mit 24 GB VRAM. Fuer Produktivbetrieb mit mehreren parallelen Nutzern oder Batch-Generierung empfehlen sich A100 oder L40S. Details zur GPU-Auswahl finden sich im Artikel GPU und CUDA Cores im Vergleich.
Deployment: Schritt fuer Schritt
1. NVIDIA Device Plugin installieren
Das Device Plugin ist Voraussetzung dafuer, dass Kubernetes GPUs erkennt und zuweisen kann.
# NVIDIA GPU Operator installieren (empfohlen -- kuemmert sich um Treiber + Plugin)
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia
helm repo update
helm install gpu-operator nvidia/gpu-operator \
--namespace gpu-operator \
--create-namespace \
--set driver.enabled=true \
--set toolkit.enabled=true \
--set devicePlugin.enabled=true
# Verifizieren, dass GPUs erkannt werden
kubectl get nodes -o json | jq '.items[].status.allocatable["nvidia.com/gpu"]'
2. Persistent Volumes fuer Modelle und Outputs
Modelle sind gross (SDXL Base: ~6.5 GB, Refiner: ~6 GB, LoRAs: 50-200 MB). Ein performanter Storage-Backend ist wichtig fuer schnelle Ladezeiten.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: sd-models
namespace: ai-workloads
spec:
accessModes:
- ReadWriteOnce
storageClassName: fast-ssd # NVMe-basiert empfohlen
resources:
requests:
storage: 100Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: sd-outputs
namespace: ai-workloads
spec:
accessModes:
- ReadWriteOnce
storageClassName: standard
resources:
requests:
storage: 50Gi
Hinweise zu performantem und DSGVO-konformem Storage finden sich unter Kubernetes Storage Loesungen.
3. Stable Diffusion Deployment
Das folgende Deployment nutzt AUTOMATIC1111 als Web-UI. Fuer ComfyUI aendern sich im Wesentlichen das Image und die Startargumente.
apiVersion: apps/v1
kind: Deployment
metadata:
name: stable-diffusion
namespace: ai-workloads
labels:
app: stable-diffusion
spec:
replicas: 1
selector:
matchLabels:
app: stable-diffusion
template:
metadata:
labels:
app: stable-diffusion
spec:
containers:
- name: webui
image: ghcr.io/your-org/sd-webui:latest
ports:
- containerPort: 7860
name: http
env:
- name: CLI_ARGS
value: "--listen --port 7860 --xformers --api"
resources:
requests:
cpu: "2"
memory: "8Gi"
nvidia.com/gpu: 1
limits:
cpu: "4"
memory: "16Gi"
nvidia.com/gpu: 1
volumeMounts:
- name: models
mountPath: /app/models
- name: outputs
mountPath: /app/outputs
readinessProbe:
httpGet:
path: /sdapi/v1/options
port: 7860
initialDelaySeconds: 60
periodSeconds: 10
livenessProbe:
httpGet:
path: /sdapi/v1/options
port: 7860
initialDelaySeconds: 120
periodSeconds: 30
nodeSelector:
nvidia.com/gpu.present: "true"
tolerations:
- key: nvidia.com/gpu
operator: Exists
effect: NoSchedule
volumes:
- name: models
persistentVolumeClaim:
claimName: sd-models
- name: outputs
persistentVolumeClaim:
claimName: sd-outputs
---
apiVersion: v1
kind: Service
metadata:
name: stable-diffusion
namespace: ai-workloads
spec:
selector:
app: stable-diffusion
ports:
- port: 80
targetPort: 7860
protocol: TCP
Wichtige Details:
--xformersaktiviert Memory-Optimierungen und reduziert den VRAM-Verbrauch um ca. 30%--apistellt die REST-API bereit, ueber die andere Systeme Bilder generieren koennen- Die
readinessProbeverhindert, dass Traffic an den Pod gesendet wird, bevor das Modell geladen ist (dauert 30-90 Sekunden) nodeSelectorstellt sicher, dass der Pod nur auf GPU-Nodes geplant wird
AUTOMATIC1111 vs. ComfyUI: Welches UI fuer welchen Zweck?
| Merkmal | AUTOMATIC1111 | ComfyUI |
|---|---|---|
| Bedienung | Klassisches Web-Formular | Node-basierter Graph-Editor |
| Einstieg | Einfach | Steilere Lernkurve |
| Workflow-Automatisierung | Begrenzt | Sehr gut (Workflows exportierbar) |
| API | REST-API vorhanden | REST + WebSocket API |
| Erweiterbarkeit | Extensions-System | Custom Nodes |
| Batch-Verarbeitung | Grundlegend | Gut (Queue-System) |
| Community | Sehr gross | Wachsend |
| Empfehlung | Manuelle Nutzung, Einstieg | Pipelines, Automatisierung |
Fuer Teams, die Bilder hauptsaechlich manuell erstellen (Marketing, Design), ist AUTOMATIC1111 der bessere Einstieg. Wenn die Bildgenerierung in bestehende Systeme integriert oder automatisiert werden soll, bietet ComfyUI mit seinem Workflow-System mehr Flexibilitaet.
Skalierung und Ressourcenmanagement
Horizontale Skalierung
Bei steigendem Bedarf koennen mehrere Stable Diffusion Pods parallel laufen. Der Horizontal Pod Autoscaler kann auf GPU-Metriken (via DCGM Exporter und Prometheus Adapter) oder auf Custom Metrics wie die Laenge einer Request-Queue reagieren.
Voraussetzung: Genug GPU-Nodes im Cluster. Fuer dynamische Skalierung auf Cloud-Infrastruktur empfiehlt sich der Cluster Autoscaler, der neue GPU-Nodes automatisch provisioniert. Mehr dazu unter HPA und automatische Skalierung.
Modell-Management
Modelle sollten nicht im Container-Image eingebettet sein. Stattdessen werden sie ueber Persistent Volumes bereitgestellt. Das hat zwei Vorteile: Container-Images bleiben klein (< 5 GB statt 15+ GB), und Modelle koennen aktualisiert werden, ohne das Image neu zu bauen.
Ein initContainer kann beim Pod-Start pruefen, ob die benoetigten Modelle vorhanden sind, und fehlende Modelle von einem internen Modelserver oder S3-kompatiblen Storage herunterladen.
Monitoring
Fuer Stable Diffusion auf Kubernetes sind folgende Metriken relevant:
- GPU Utilization (%): Zeigt, wie ausgelastet die GPU ist. Unter 50% deutet auf Ueberdimensionierung hin.
- GPU Memory Used (MB): VRAM-Verbrauch. Nahe am Limit fuehrt zu Out-of-Memory-Fehlern.
- Generation Latency (ms): Zeit pro generiertem Bild. Abhaengig von Modell, Aufloesung und Step Count.
- Queue Length: Wartende Requests. Steigt dauerhaft, sind mehr Replicas noetig.
- Pod Restarts: Haeufige Restarts deuten auf OOM-Kills oder fehlerhafte Health Checks.
Prometheus mit dem NVIDIA DCGM Exporter liefert die GPU-Metriken. Ein Grafana-Dashboard macht sie sichtbar. Details zum Monitoring-Setup finden sich unter GPU Monitoring in Kubernetes.
Sicherheit
Da Stable Diffusion Web-UIs standardmaessig keine Authentifizierung mitbringen, muessen zusaetzliche Massnahmen getroffen werden:
- Ingress mit Authentifizierung: Nutzen Sie OAuth2 Proxy oder Basic Auth am Ingress Controller
- NetworkPolicies: Beschraenken Sie den Zugriff auf den Stable Diffusion Service auf autorisierte Namespaces
- RBAC: ServiceAccounts fuer Stable Diffusion Pods sollten minimale Rechte haben
- Image Scanning: Container-Images regelmaessig auf Vulnerabilities pruefen (Trivy, Grype)
Weitere Sicherheitsmassnahmen beschreibt der Artikel zu Kubernetes Security Hardening.
Haeufige Probleme und Loesungen
Pod startet, aber GPU wird nicht erkannt. Pruefen Sie, ob der NVIDIA Device Plugin DaemonSet auf dem Node laeuft (kubectl get pods -n gpu-operator). Haeufige Ursache: Inkompatible Treiberversionen.
Out of Memory beim Laden grosser Modelle. SDXL benoetigt ca. 6.5 GB VRAM. Mit --xformers oder --medvram laesst sich der Verbrauch reduzieren. Alternativ: GPU mit mehr VRAM einsetzen.
Langsame Ladezeiten beim Pod-Start. Modelle von NFS oder langsamen Volumes zu laden dauert Minuten. Nutzen Sie lokale NVMe-SSDs oder bereiten Sie Modelle in einem Init-Container vor.
Web-UI reagiert nicht mehr nach laengerer Nutzung. Memory Leaks in einigen Extensions. Setzen Sie eine livenessProbe, die den Pod bei Nichterreichbarkeit automatisch neu startet.
Kosten: Self-Hosting vs. API-Dienste
Eine grobe Rechnung fuer ein Team, das ca. 2.000 Bilder pro Monat generiert:
| Posten | API-Dienst (z.B. DALL-E 3) | Self-Hosting (RTX 4090) |
|---|---|---|
| Einmalige Kosten | 0 EUR | ~3.000 EUR (GPU + Server) |
| Monatliche Kosten | ~200 EUR (0.10 EUR/Bild) | ~80 EUR (Strom + Admin) |
| Kosten nach 12 Monaten | 2.400 EUR | 3.960 EUR |
| Kosten nach 24 Monaten | 4.800 EUR | 4.920 EUR |
| Break-Even | -- | ~24 Monate |
Bei hoeherem Volumen (10.000+ Bilder/Monat) verschiebt sich der Break-Even auf wenige Monate. Zusaetzlich: Die Moeglichkeit zum Fine-Tuning und die volle Datenkontrolle lassen sich nicht in Euro beziffern, sind aber fuer viele Unternehmen der eigentliche Treiber.
Fazit
Stable Diffusion auf Kubernetes zu betreiben ist kein Hexenwerk, erfordert aber solide Grundlagen: funktionierende GPU-Integration, durchdachtes Storage-Konzept und sinnvolles Monitoring. Der Aufwand lohnt sich, wenn Datenkontrolle, Fine-Tuning-Moeglichkeiten oder hohes Generierungsvolumen eine Rolle spielen.
Der empfohlene Einstieg: Ein einzelner GPU-Node, AUTOMATIC1111 als Pod, und ein Persistent Volume fuer Modelle. Wenn das laeuft und der Bedarf steigt, kommen Skalierung und Automatisierung dazu.
Wenn Sie Unterstuetzung beim Setup oder bei der Integration in bestehende Workflows benoetigen, melden Sie sich gerne unter /kontakt.
Kubernetes-Beratung gesucht?
Wir helfen deutschen Unternehmen bei der Kubernetes-Implementierung, Migration und Optimierung. DSGVO-konform und praxiserprobt.
📖 Verwandte Artikel
Weitere interessante Beiträge zu ähnlichen Themen
Self-Hosted Kubernetes AI Code Assistant: Ihr eigener Copilot für Datensouveränität
Entdecken Sie, wie Ihr Unternehmen mit einem selbst-gehosteten Kubernetes AI Code Assistant maximale Datensouveränität sicherstellt und Compliance-Anforderungen erfüllt. Profitieren Sie von Kosteneffizienz und maßgeschneiderter Coding AI als leistungsstarke Copilot-Alternative – ideal für deutsche Entwicklungsteams und den Mittelstand.
LLM Self-Hosting auf Kubernetes: Llama und Mistral
Open-Source LLMs wie Llama und Mistral auf Kubernetes self-hosten für volle Datensouveränität, DSGVO-Konformität und präzise Kostenkontrolle.
Milvus Vector Database auf Kubernetes mit GPU skalieren
Milvus Vector Database auf Kubernetes für Enterprise-KI skalieren: Cluster-Deployment, Hochverfügbarkeit und GPU-Beschleunigung praxisnah erklärt.
CNCF AI Conformance: GPU, KServe und Kueue auf Kubernetes
CNCF AI Conformance auf Kubernetes umsetzen: GPU-Management mit MPS und Time-Slicing, Model Serving mit KServe und Scheduling mit Kueue.
KI-Qualitätskontrolle auf Kubernetes mit YOLO
KI-gestützte Qualitätskontrolle auf Kubernetes: Kamera-zu-Inference-Pipeline mit YOLO und Triton Inference Server für automatisierte Defekterkennung.