Infrastruktur

Mein KI-Homelab: RTX 3090, Proxmox, Ollama und Tailscale

Die meisten Gespräche über selbstgehostete KI beginnen bei den Preisen für Cloud-GPUs und enden bei einer Monatsrechnung, die einem die Tränen in die Augen treibt. Ich bin einen anderen Weg gegangen: ein kompakter Heimserver, der lokale LLMs und Bildgenerierung betreibt und über ein verschlüsseltes Mesh-Netzwerk mit jeder Maschine meiner Infrastruktur verbunden ist. Keine Cloud-Abhängigkeit, keine Abrechnung pro Token, keine Daten, die mein Netzwerk verlassen.

Dieser Aufbau läuft bei mir seit einem Jahr und deckt alles ab, von der Programmierhilfe über die Bildgenerierung bis zu automatisierten Content-Pipelines. So greifen die Teile ineinander.

Die Hardware: ein Mini-PC, der über seiner Klasse spielt

Das Fundament ist ein Mini-PC der Intel-NUC-Klasse. Klein genug für ein Regalbrett, leise genug, um ihn zu vergessen, aber mit genug Arbeitsspeicher für ernsthafte Modelle. Die konkrete Konfiguration:

  • Intel-CPU der 11. Generation mit integrierter Iris-Xe-Grafik
  • 32 GB DDR4 (entscheidend für die Kontextfenster von LLMs)
  • NVMe-Speicher, damit Modelle schnell laden
  • Daneben: eine eigene Workstation mit einer NVIDIA RTX 3090 (24 GB VRAM) für GPU-beschleunigte Inferenz und Bildgenerierung
  • Gemeinsame Leistungsaufnahme unter 120 W im Leerlauf, Spitzen um 400 W bei starker GPU-Inferenz

Der NUC übernimmt die leichten Daueraufgaben: Inferenz kleiner Modelle, Routing und Orchestrierung. Die eigentliche Muskelkraft steht aber daneben — die RTX-3090-Workstation. Mit 24 GB VRAM fährt sie Modelle mit 13 bis 30 Milliarden Parametern in voller GPU-Geschwindigkeit und erledigt Bildgenerierung mit Stable Diffusion XL in Sekunden statt Minuten. Die beiden Maschinen ergänzen sich: der NUC ist das Gehirn, das immer läuft, die GPU-Kiste ist der Lastesel.

Die Virtualisierungsschicht: Proxmox VE

Auf dem NUC läuft nichts direkt auf dem Blech. Er fährt Proxmox VE, eine quelloffene Virtualisierungsplattform auf Basis von KVM und LXC. Für eine so kleine Maschine mag das übertrieben wirken, aber es ist derselbe Hypervisor, den ich auf meiner gesamten Infrastruktur einsetze — und Einheitlichkeit wiegt schwerer als ein paar Prozent Leistung.

Proxmox gibt mir:

  • LXC-Container für leichtgewichtige, isolierte Arbeitslasten. Jeder KI-Dienst läuft in einem eigenen Container mit fest zugeteilten Ressourcen.
  • Snapshots und Sicherungen. Vor jedem Modell-Update und jeder Konfigurationsänderung mache ich einen Snapshot. Geht etwas kaputt, dauert der Rückweg Sekunden.
  • Ressourcenzuteilung, die sich leicht ändern lässt. Braucht der Ollama-Container mehr RAM für ein größeres Modell, ändere ich eine Zahl und starte neu.
  • Eine einheitliche Verwaltungsoberfläche über alle Hosts hinweg. Dieselbe Proxmox-Weboberfläche verwaltet diesen NUC, meine Rechenzentrumsserver und alles dazwischen.

Auf dem NUC laufen derzeit mehrere Container: einer für LLM-Inferenz, einer für Bildgenerierung, einer für eine KI-Agenten-Plattform und ein paar Hilfscontainer für Überwachung und Netzwerk. Der Ressourcenverbrauch pendelt sich bei rund 24 GB zugeteiltem RAM und 60 % CPU unter üblicher Last ein.

Ollama: LLMs ohne den Aufwand

Ollama ist die Laufzeitumgebung, die selbstgehostete LLMs praktikabel macht. Sie kümmert sich um Modellverwaltung, Quantisierung und Auslieferung hinter einer schlichten Schnittstelle, die zum Chat-Completions-Format von OpenAI kompatibel ist. Ein Befehl lädt ein Modell, ein zweiter stellt es bereit.

Die Modelle, die ich vorhalte und im Wechsel nutze:

  • Llama 3.1 8B für allgemeinen Chat, Entwürfe und schnelle Aufgaben. Zügige Inferenz, gute Qualität.
  • CodeLlama 13B für alles rund um Code. Reviews, Refactoring-Vorschläge, Dokumentation.
  • Mistral 7B als leichte Alternative, wenn mir Tempo wichtiger ist als maximale Qualität.
  • Gemma 2 9B für strukturierte Datenextraktion und Klassifikation.

Die entscheidende Erkenntnis: Man braucht kein einzelnes riesiges Modell. Eine Sammlung spezialisierter kleinerer Modelle, jedes gut in einer bestimmten Aufgabenklasse, schlägt oft ein einzelnes Allzweckmodell. Auf der RTX 3090 dauert der Wechsel zwischen geladenen Modellen drei bis fünf Sekunden, und die Inferenz eines 13B-Modells läuft mit über 40 Token pro Sekunde. Die GPU lässt selbstgehostete KI unmittelbar wirken statt nach Kompromiss.

Ollama stellt seine Schnittstelle auf einem lokalen Port bereit. Für sich genommen nützt das nur auf dem NUC selbst. Genau hier macht die Netzwerkschicht aus dem Aufbau statt „Spielzeug im Regal“ echte Infrastruktur.

ComfyUI: Bildgenerierung als Pipeline

Neben Ollama läuft in einem eigenen Container ComfyUI, eine knotenbasierte Oberfläche für Stable Diffusion. Wo die meisten Stable-Diffusion-Oberflächen ein Eingabefeld und einen „Generieren“-Knopf bieten, gibt ComfyUI einen visuellen Workflow-Baukasten. Man verbindet Knoten — Text-Encoder, Sampler, VAE-Decoder, Upscaler — und die Pipeline schickt Bilder durch jeden Schritt.

Warum das für Infrastrukturarbeit zählt:

  • Workflow-Automatisierung. ComfyUI-Workflows lassen sich als JSON speichern und über die Schnittstelle auslösen. Ich nutze das für automatische Vorschaubilder, Beitragsbilder und Asset-Pipelines.
  • Ressourceneffizienz. Die 32 GB Systemspeicher teilen sich Ollama und ComfyUI, aber sie laufen selten gleichzeitig unter Volllast. Ollama bedient tagsüber Textanfragen, ComfyUI arbeitet Bildaufträge über Nacht im Stapel ab.
  • Reproduzierbarkeit. Ein gespeicherter Workflow liefert bei gleichem Seed und gleichen Parametern identische Ergebnisse. Kein Raten, kein „letztes Mal kam da etwas anderes raus“.

ComfyUI läuft auf der RTX-3090-Workstation, wo die 24 GB VRAM SDXL-Modelle nativ tragen. Ein Bild mit 1024×1024 Pixeln entsteht in etwa acht Sekunden. Um die Zuteilung kümmert sich das Memory Ballooning von Proxmox dynamisch.

Tailscale: das Mesh, das alles verbindet

Das ist das Stück, das aus isolierten Diensten gemeinsame Infrastruktur macht. Tailscale ist ein Mesh-VPN auf Basis von WireGuard. Jede Maschine in meinem Netz — vom NUC auf dem Regal zu Hause bis zu VPS-Instanzen in Rechenzentren quer durch Europa — tritt demselben verschlüsselten Mesh bei. Jede bekommt eine feste IP-Adresse, die unabhängig vom physischen Standort funktioniert.

Was das in der Praxis bedeutet:

  • Jeder Server kann Ollama aufrufen. Ein VPS in Helsinki, der ein Dokument zusammenfassen soll, schickt die Anfrage an die Tailscale-IP des NUC auf dem Ollama-Port. Sie läuft durch einen verschlüsselten WireGuard-Tunnel. Der VPS braucht weder eigene GPU noch eigene Modelldateien noch irgendeine KI-Abhängigkeit. Er macht schlicht einen HTTP-Aufruf.
  • ComfyUI ist von überall erreichbar. Ich kann die ComfyUI-Oberfläche von jeder Maschine im Mesh öffnen: Workflow am Laptop bauen, auf der Hardware des NUC ausführen.
  • SSH-Zugriff ist nahtlos. Mit Tailscale SSH erreiche ich den NUC (oder jeden Container darauf) von überall, ohne SSH ins offene Internet zu stellen. Keine Portweiterleitung, kein Ärger mit dynamischem DNS.
  • DNS funktioniert einfach. Dank MagicDNS spreche ich Maschinen über ihren Namen an. ollama.tail löst auf die richtige IP auf, egal in welchem Netz ich gerade bin.

Die Architektur sieht so aus: Der NUC steht hinter einem Heimrouter ohne offene Ports. Tailscale baut ausgehende Verbindungen auf, um das Mesh zu koordinieren. Jede andere Maschine — ob dedizierter Server im Rechenzentrum oder Container auf einem anderen Proxmox-Host — erreicht den NUC über das Mesh. Der Verkehr ist Ende-zu-Ende verschlüsselt, und die Verbindung ist so schnell wie die darunterliegende Internetleitung.

Das Muster aus dem Alltag: der VPS ruft zu Hause an

Ein konkretes Beispiel aus dem Produktivbetrieb. Ich betreibe mehrere Webanwendungen auf VPS-Instanzen in verschiedenen Rechenzentren. Diese Anwendungen brauchen KI-Fähigkeiten: Texterzeugung, Bildverarbeitung, Klassifikation, Embeddings. Der übliche Weg wäre, entweder eine externe Schnittstelle zu rufen (OpenAI, Anthropic) und pro Token zu zahlen, oder GPU-Instanzen zu deutlichen Monatskosten zu betreiben.

Stattdessen läuft auf jedem VPS der Tailscale-Client. Braucht eine Anwendung Inferenz, ruft sie die Ollama-Schnittstelle unter der Mesh-Adresse des NUC. Die Anfrage nimmt diesen Weg:

VPS-Anwendung → Tailscale-Tunnel → NUC zu Hause → Ollama-Container → Antwort

Die Laufzeit im Netz liegt üblicherweise bei 15 bis 40 ms (je nach geografischer Entfernung des Rechenzentrums), dazu kommt die Inferenzzeit. Ein 7B-Modell antwortet auf eine kurze Eingabe insgesamt in zwei bis acht Sekunden. Nicht unmittelbar, aber für Hintergrundaufgaben, Content-Pipelines und Stapelverarbeitung mehr als schnell genug.

Der Kostenvergleich ist deutlich:

  • Externe Schnittstelle: schwankt stark mit der Nutzung. Bei nennenswertem Volumen schnell dreistellig pro Monat.
  • GPU-VPS: Eine Cloud-GPU-Instanz, die 13B-Modelle tragen kann, beginnt bei etwa 80 bis 150 EUR im Monat.
  • Mein Weg: Die Hardware war eine einmalige Investition. Laufend bleiben Strom (grob 20 bis 25 EUR im Monat für beide Maschinen im Dauerbetrieb) und der Tailscale-Tarif. Unter 30 EUR im Monat für unbegrenzte Inferenz — und die RTX 3090 hatte sich nach drei Monaten eingesparter API-Kosten bezahlt gemacht.

Sicherheitsüberlegungen

KI-Inferenz zu Hause zu betreiben und sie entfernten Servern zugänglich zu machen, klingt nach einem Sicherheitsproblem. Das ist es auch, und es gehört bewusst behandelt:

  • Tailscale-ACLs regeln, welche Maschine welchen Dienst erreichen darf. Nicht jede Maschine im Mesh darf mit Ollama sprechen — nur die VPS-Instanzen, die es brauchen, und nur auf den Ports, die sie brauchen.
  • Die Ollama-Schnittstelle hat von Haus aus keine Authentifizierung. Das ist vertretbar, weil sie ausschließlich über das Tailscale-Mesh erreichbar ist, das seinerseits authentifiziert und verschlüsselt ist. Kein Port zeigt ins offene Internet.
  • Der Proxmox-Host des NUC fährt Angriffserkennung und Überwachung. Unerwartete Verbindungsmuster lösen Meldungen aus.
  • Daten bewegen sich nur innerhalb des Mesh. Eingaben und Antworten berühren nie eine fremde Schnittstelle. Bei sensiblen Geschäftsdaten zählt genau das.

Was das Wachstum angeht

Dieser Aufbau hat Grenzen. Ein einzelner NUC mit CPU-Inferenz verkraftet grob fünf bis zehn gleichzeitige Anfragen, bevor die Antwortzeiten spürbar leiden. Für meine derzeitige Last — eine Handvoll Anwendungen mit gelegentlichen KI-Aufrufen — reicht das. Wenn nicht mehr, ist der Weg nach vorn klar:

  • Einen weiteren Knoten dazustellen. Ein zweiter NUC oder eine gebrauchte Workstation mit GPU tritt dem Proxmox-Cluster und dem Tailscale-Mesh bei. Ein Lastverteiler auf Anwendungsebene schickt Anfragen an den jeweils freiesten Knoten.
  • Auf GPU-Inferenz umsteigen. Eine zweite GPU-Workstation ins Mesh und hinter den Lastverteiler zu hängen, ist unkompliziert. Die RTX 3090 ist bereits schnell; eine künftige RTX 5090 oder A6000 würde Modelle jenseits von 70 Milliarden Parametern tragen.
  • Hybrid fahren. Die Hardware zu Hause für den Regelbetrieb, eine Cloud-Schnittstelle für Lastspitzen. Der Anwendungscode prüft die Antwortzeit und entscheidet danach.

Was ich anders machen würde

Würde ich heute bei null anfangen:

  • Mehr Speicher. 48 GB VRAM (RTX A6000 oder zwei Karten) würden Modelle jenseits von 70 Milliarden Parametern lokal erschließen. Die 32-GB-Decke des NUC ist die eigentliche Fessel.
  • Eigenes NAS für die Modelle. Modelldateien auf jeder Maschine vorzuhalten, verschwendet Plattenplatz. Eine gemeinsame NFS-Freigabe für die Modellbibliothek würde die Versionspflege über alle Knoten hinweg vereinfachen.
  • Ollama von Anfang an im Verbund. Mehrere Ollama-Instanzen hinter einem Lastverteiler, jede auf eine Modellgröße spezialisiert, hätten mir einiges an Anfangsschmerz erspart.

Die Kernarchitektur aber — Proxmox für die Isolierung, Ollama für die Inferenz, Tailscale für die Verbindung — trägt. Sie läuft seit über einem Jahr mit minimaler Pflege, und jeder neue Dienst, den ich ausrolle, kann KI-Fähigkeiten mit einem einzigen HTTP-Aufruf nutzen. Kein SDK, keine Schlüsselverwaltung, keine Herstellerbindung. Einfach Infrastruktur, die funktioniert.