Files
Homelab--Bratonein-Kontroll…/Kapitel 18/Premium Rohtext.md

17 KiB
Raw Blame History

Kapitel 18 Premium: Ollama im UCC

Ollama ist im UCC weit mehr als nur eine lokale KI-Engine.
In der Free-Version wurde die Basis gelegt ein Container, der Sprachmodelle lokal bereitstellt.
In diesem Premium-Kapitel wird Ollama zu einer vollwertigen, interaktiven KI-Plattform,
die GPU-Beschleunigung nutzt, eine eigene GUI bereitstellt, über Python gesteuert werden kann
und sich dynamisch an die CPU-Leistung des Systems anpasst.

Ziel ist eine Umgebung, in der lokale KI-Prozesse, GPU-Compute und Steuerung per API oder Interface
ineinandergreifen stabil, performant und komplett offline betreibbar.
Ollama dient hier als zentraler Baustein für Automatisierungen, Assistenz-Funktionen und Content-Workflows.

👉 Screenshot geeignet: Architekturübersicht mit Ollama LXC, GPU-Passthrough, GUI-Frontend und Python-Anbindung

Note

Dieses Kapitel setzt eine funktionierende Free-Installation von Ollama voraus.
Stelle sicher, dass dein LXC-Container läuft, über HTTPS erreichbar ist
und mindestens ein Modell (z. B. llama3, mistral) erfolgreich geladen wurde.

Tip

Falls dein System keine dedizierte GPU besitzt, kann dieses Kapitel trotzdem durchgeführt werden.
CPU-Optimierungen und GUI-Einrichtung funktionieren unabhängig vom GPU-Passthrough.


GPU-Durchreichen in Proxmox

Damit Ollama Modelle wie llama3, gemma oder mistral mit maximaler Leistung ausführen kann,
muss der LXC-Container direkten Zugriff auf die Grafikkarte erhalten.
In diesem Abschnitt richten wir das GPU-Passthrough korrekt ein vollständig über die Proxmox-GUI,
aber erst nachdem die GPU auf Host-Ebene gemappt und für Container freigegeben wurde.

👉 Screenshot geeignet: Proxmox Host-Übersicht mit markierter GPU unter "Hardware → PCI-Geräte"

Note

Proxmox kann GPUs an Container nur durchreichen, wenn die Geräte im Hostsystem
bereits als /dev/nvidia* (NVIDIA) oder /dev/dri/* (Intel/AMD) verfügbar sind.
Fehlen diese Einträge, liegt das Problem nicht am Container, sondern am Host-Treiber.

Schritt 1 GPU-Verfügbarkeit auf dem Host prüfen

Öffne auf dem Proxmox-Host eine Shell:

lspci | egrep "NVIDIA|AMD|Intel"

Beispielausgabe (NVIDIA):

01:00.0 VGA compatible controller: NVIDIA Corporation GA104 [GeForce RTX 3070] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GA104 High Definition Audio Controller (rev a1)

Danach prüfen, ob die Gerätedateien existieren:

ls /dev/nvidia* /dev/dri/* 2>/dev/null

👉 Screenshot geeignet: Terminalausgabe mit sichtbaren /dev/nvidia0, /dev/nvidiactl, /dev/dri/renderD128

Tip

Wenn hier nichts erscheint, installiere zuerst die offiziellen GPU-Treiber im Host
(z. B. apt install nvidia-driver oder apt install firmware-amd-graphics).

Schritt 2 GPU als Device freigeben

  1. Öffne im Proxmox-Webinterface den Host (nicht den Container).
  2. Gehe auf Hardware → PCI-Geräte.
  3. Suche deine GPU in der Liste (z. B. „NVIDIA Corporation GA104 [GeForce RTX 3070]“).
  4. Notiere die PCI-ID (z. B. 0000:01:00.0).
  5. Stelle sicher, dass das Gerät nicht bereits einer VM zugeordnet ist.

👉 Screenshot geeignet: Proxmox Host-Hardwareliste mit markierter GPU und sichtbarer PCI-ID

Note

Für Container wird die GPU nicht direkt über „Hardware → GPU hinzufügen“ eingebunden,
sondern über die Gerätedateien (/dev/nvidia*).
Diese werden per GUI in den Container gemountet.

Schritt 3 Gerät per GUI an den Container anbinden

  1. Öffne im linken Menü deinen Ollama-Container.
  2. Wähle Ressourcen → Optionen → Geräte (je nach Version auch unter Reiter „Hardware“).
  3. Klicke auf Hinzufügen → Gerät → Allgemein (Custom).
  4. Wähle den Typ Gerätedatei (bind mount).
  5. Füge nacheinander folgende Pfade hinzu (je nach GPU-Typ verfügbar):
/dev/nvidia0
/dev/nvidiactl
/dev/nvidia-uvm
/dev/dri/renderD128
  1. Aktiviere die Option Nur Lesen deaktivieren (d. h. Lese-/Schreibzugriff erlauben).
  2. Bestätige mit Hinzufügen.

👉 Screenshot geeignet: Dialogfenster „Gerät hinzufügen“ mit eingetragenem /dev/nvidia0

Tip

Bei Intel- oder AMD-GPUs reicht meist /dev/dri/renderD128.
NVIDIA benötigt in der Regel alle vier Gerätedateien.

Schritt 4 Container starten und GPU-Test

  1. Starte den Container im Proxmox-Webinterface neu.
  2. Öffne die Konsole des Containers.
  3. Prüfe die GPU-Erkennung:
    nvidia-smi
    
    oder (bei AMD/Intel):
    ls /dev/dri/
    
  4. Wenn die GPU erkannt wird, sollte nvidia-smi das Modell, den Treiber und den Status anzeigen.

👉 Screenshot geeignet: Konsolenansicht mit erfolgreicher nvidia-smi-Ausgabe im Ollama-LXC

Note

Sollte keine GPU erscheinen, überprüfe im Host die Gruppenrechte:

chmod 666 /dev/nvidia*

Danach Container erneut starten.

Schritt 5 Test mit Ollama

Im Container:

ollama run llama3

Wenn alles korrekt ist, erscheint:

GPU acceleration enabled: NVIDIA RTX 3070

👉 Screenshot geeignet: Terminalausgabe mit Hinweis „GPU acceleration enabled“

Tip

GPU-Beschleunigung bleibt nach Neustarts aktiv.
Nur bei Kernel- oder Treiberupdates sollte das Mapping kurz überprüft werden.


GUI für Ollama

Die lokale GUI erweitert Ollama um eine komfortable Weboberfläche,
mit der Modelle, Sessions und Chats übersichtlich verwaltet werden können direkt im selben LXC wie Ollama selbst.
Sie kommuniziert intern mit der Ollama-API (http://localhost:11434) und ist nach außen nur über den separaten Proxy-LXC (Nginx Proxy Manager) erreichbar.
Dadurch bleibt der Container isoliert, während die Oberfläche sicher im internen Netz verfügbar ist.

👉 Screenshot geeignet: Architekturübersicht mit Ollama-LXC ↔ Proxy-LXC ↔ Client-Browser

Note

Diese GUI läuft vollständig lokal und benötigt keinen Internetzugang.
Modellverwaltung, Eingaben und Antworten bleiben im Container keine externen API-Aufrufe.

Installation im Ollama-LXC

  1. Öffne im Proxmox-Webinterface die Konsole des Ollama-Containers.
  2. Aktualisiere die Paketquellen und installiere die benötigten Werkzeuge:
apt update && apt install -y curl unzip
  1. Lade die aktuelle Version der Ollama-Weboberfläche herunter:
curl -L -o ollama-gui.zip https://github.com/ollama-webui/ollama-webui/releases/latest/download/webui.zip
unzip ollama-gui.zip -d /opt/ollama-webui

👉 Screenshot geeignet: Terminalausgabe mit entpackten Dateien unter /opt/ollama-webui

  1. Starte die GUI testweise:
cd /opt/ollama-webui
nohup ./ollama-webui --api http://localhost:11434 --port 3000 &

Danach ist sie intern erreichbar unter:

http://<LXC-IP>:3000

👉 Screenshot geeignet: Browserfenster mit lokal aufgerufenem GUI-Dashboard (http://192.168.xxx.xxx:3000)

Tip

Die GUI sollte ausschließlich intern erreichbar bleiben.
Eine öffentliche Freigabe ohne Reverse Proxy ist aus Sicherheitsgründen nicht empfohlen.

Autostart konfigurieren

Damit die GUI nach jedem Neustart automatisch startet:

nano /etc/systemd/system/ollama-gui.service

Inhalt:

[Unit]
Description=Ollama Web GUI
After=network.target

[Service]
ExecStart=/opt/ollama-webui/ollama-webui --api http://localhost:11434 --port 3000
WorkingDirectory=/opt/ollama-webui
Restart=always
User=root

[Install]
WantedBy=multi-user.target

Speichern und aktivieren:

systemctl daemon-reload
systemctl enable ollama-gui
systemctl start ollama-gui

👉 Screenshot geeignet: Terminalausgabe systemctl status ollama-gui mit Status „active (running)“

Note

Der Dienst läuft im Hintergrund und startet automatisch, sobald das Netzwerk verfügbar ist.

Zugriff über externen Nginx Proxy Manager (NPM-LXC)

Der Zugriff erfolgt über den zentralen Nginx Proxy Manager, der in einem eigenen LXC betrieben wird.
Dieser leitet die Anfragen intern an den Ollama-LXC weiter.
So bleibt der Container vollständig abgeschottet, und die GUI kann sicher unter einer eigenen Subdomain aufgerufen werden.

  1. Öffne im NPM-Container die Weboberfläche (https://npm.<deine-domain.tld>).
  2. Gehe zu Hosts → Add Proxy Host.
  3. Trage folgende Werte ein:
Feld Wert
Domain ollama.<deine-domain.tld>
Forward Hostname / IP IP-Adresse des Ollama-LXC (z. B. 192.168.100.42)
Forward Port 3000
Scheme http
Block Common Exploits aktiviert
SSL (Let's Encrypt) aktiviert, Force SSL anhaken
  1. Unter Access Lists optional Zugriffsbeschränkungen einrichten
    (z. B. nur lokale IP-Bereiche oder Benutzer-Authentifizierung aktivieren).
  2. Speichern und den Proxy-Host aktivieren.

👉 Screenshot geeignet: NPM-Konfigurationsfenster mit eingetragener Ziel-IP und aktiviertem SSL

Tip

Wenn du eine interne Subdomain nutzt (z. B. ollama.ucc.local),
kann das Zertifikat über dein internes CA-System oder manuell hinterlegt werden.
Für öffentliche Domains ist Lets Encrypt die empfohlene Lösung.

Ergebnis

Die Ollama-GUI ist jetzt über deinen zentralen Proxy erreichbar
sicher, verschlüsselt und getrennt vom restlichen System.
Sie zeigt verfügbare Modelle, laufende Sessions und GPU-Status an
und kann als Basis für weitere lokale Tools (z. B. n8n oder Stream-Automationen) dienen.

👉 Screenshot geeignet: Browseransicht mit aktiver GUI über https://ollama.<deine-domain.tld> und sichtbarem Modellstatus


Internetzugang für Ollama LXC

Damit Ollama aktuelle Informationen nutzen kann,
bekommt es im Container eine kleine Internet-Bridge.
Sie verbindet Ollama mit dem Internet aber sicher und kontrolliert.
Egal welches Modell du in Ollama verwendest (z. B. Llama 3, Mistral oder Phi 3):
die Bridge erkennt es automatisch und funktioniert mit allen.

👉 Screenshot geeignet: einfache Darstellung „Ollama ↔ Internet-Bridge ↔ Internet“

Note

Ollama selbst bleibt komplett offline.
Nur die Bridge holt gezielt Webseiten und liefert den Text an Ollama zurück.

Schritt 1 Bridge installieren

  1. Öffne in Proxmox den Container, in dem Ollama läuft.

  2. Klicke auf Konsole.

  3. Gib diese Befehle ein:

    apt update
    apt install -y python3-pip
    pip3 install ollama requests beautifulsoup4
    mkdir -p /opt/ollama-bridge
    nano /opt/ollama-bridge/internetbridge.py
    

Schritt 2 Bridge-Programm einfügen

Kopiere diesen Code in die Datei:

from ollama import chat
import requests
from bs4 import BeautifulSoup
import subprocess

# Modell automatisch erkennen
def aktuelles_modell():
    """Ermittelt automatisch das erste installierte Ollama-Modell."""
    result = subprocess.run(["ollama", "list"], capture_output=True, text=True)
    for line in result.stdout.splitlines():
        if line and not line.startswith("NAME"):
            return line.split()[0]
    return "llama3"

modell = aktuelles_modell()
print(f"[Bridge] Verwende Modell: {modell}")

def internet_bruecke(url: str) -> str:
    """Holt Text einer Webseite und gibt ihn an Ollama weiter."""
    r = requests.get(url, timeout=10, headers={"User-Agent": "UCC-Bridge"})
    soup = BeautifulSoup(r.text, "html.parser")
    text = " ".join(soup.stripped_strings)
    return text[:1500]

nachricht = [
    {"role": "system", "content": "Wenn du neue Informationen brauchst, nutze das Tool internet_bruecke."},
    {"role": "user", "content": "Was steht aktuell in der Proxmox-Dokumentation über GPU-Passthrough?"}
]

antwort = chat(model=modell, messages=nachricht, tools=[internet_bruecke])
print(antwort["message"]["content"])

Speichern mit
STRG + O, Enter, STRG + X.

Schritt 3 Automatisch starten

  1. Erstelle eine kleine Startdatei:

    nano /etc/systemd/system/ollama-internetbridge.service
    
  2. Füge ein:

    [Unit]
    Description=Ollama Internet-Bridge
    After=network.target ollama.service
    
    [Service]
    ExecStart=/usr/bin/python3 /opt/ollama-bridge/internetbridge.py
    Restart=always
    User=root
    
    [Install]
    WantedBy=multi-user.target
    
  3. Aktivieren:

    systemctl daemon-reload
    systemctl enable --now ollama-internetbridge
    

👉 Screenshot geeignet: systemctl status ollama-internetbridge → grünes „active (running)“

Ergebnis

Die Internet-Bridge erkennt dein installiertes Modell automatisch,
registriert das benötigte Tool und hält die Verbindung aktiv.
Ollama kann dadurch auf Webseiten zugreifen, Informationen lesen
und sie direkt in seine Antworten einbauen alles lokal, sicher und unabhängig.

👉 Screenshot geeignet: vereinfachte Darstellung „Ollama ↔ Bridge ↔ Webseite ↔ Ollama“


CPU-Optimierung für Ollama LXC

Ollama braucht viel Rechenleistung besonders bei größeren Modellen wie Llama 3 oder Mistral.
Damit dein System dabei ruhig und stabil bleibt, kannst du in Proxmox genau festlegen,
wie viel CPU-Leistung der Container bekommt und wie dein Host damit umgeht.
So bleibt alles kühl, leise und zuverlässig auch bei langen Sessions.

👉 Screenshot geeignet: Reiter „Ressourcen“ im Proxmox-Interface mit markierter CPU-Zuweisung

Note

Die folgenden Schritte funktionieren für alle Setups:
• CPU-only-Systeme
• Kombination aus CPU + GPU
• GPU-only (CPU dient dann nur zur Steuerung)

Schritt 1 CPU-Kerne festlegen

  1. Öffne in Proxmox deinen Ollama-Container.
  2. Gehe zu Optionen → Ressourcen.
  3. Unter CPU stellst du die gewünschte Kernzahl ein, z. B. 4 Kerne.
  4. Aktiviere CPU-Pinning, damit Ollama immer dieselben Kerne nutzt.

👉 Screenshot geeignet: CPU-Einstellungen mit aktivem Pinning (z. B. Kerne 03)

Tip

Für kleine Modelle reichen meist 2 bis 4 Kerne.
Mehr Kerne lohnen sich nur, wenn dein Modell sie tatsächlich verwendet.

Schritt 2 CPU-Leistung im Container begrenzen

Damit dein Host nicht dauerhaft auf 100 % läuft:

  1. Öffne den Reiter Ressourcen → Erweitert.
  2. Setze das CPU-Limit auf etwa 80 %.
  3. Trage bei CPU Units einen Wert zwischen 1000 und 2000 ein.
    So bekommt Ollama Leistung, aber andere Container bleiben flüssig.

👉 Screenshot geeignet: Ansicht mit CPU-Limit bei 80 %

Note

Diese Begrenzung schützt die CPU, hält die Temperatur niedrig
und sorgt für gleichmäßige Leistung ohne Lüftergebrüll.

Schritt 3 CPU-Takt auf dem Host regeln

Die folgenden Befehle werden nicht im Container,
sondern auf dem Proxmox-Host selbst ausgeführt also auf dem physischen Rechner,
auf dem alle Container laufen.

  1. Öffne im Proxmox-Interface oben den Punkt Shell (nicht Konsole des Containers).

  2. Gib dort ein:

    apt install -y cpufrequtils
    cpufreq-set -g schedutil
    

    Dadurch verwaltet der Host die CPU-Taktfrequenz automatisch:
    hohe Leistung bei Bedarf, sparsamer Betrieb im Leerlauf.

👉 Screenshot geeignet: Host-Shell mit erfolgreicher cpufreq-set-Ausgabe

Tip

„schedutil“ ist der dynamische Standardmodus.
Er verhindert, dass die CPU dauerhaft auf Max-Takt läuft,
ohne Ollama spürbar auszubremsen.

Schritt 4 Auslastung überwachen

Behalte die Werte im Blick:

  • Im Proxmox-Reiter „Ressourcen“, oder
  • über Netdata (falls im UCC installiert).

Dort siehst du: CPU-Temperatur, Taktfrequenz und Auslastung pro Kern.

Tip

Wenn einzelne Kerne dauerhaft auf 100 % liegen,
reduziere gleichzeitige Anfragen oder gib dem Container 12 Kerne mehr.

Ergebnis

Dein System läuft jetzt ruhig, effizient und sicher.
Ollama bekommt genug Rechenleistung, ohne dass dein Host überhitzt oder andere Dienste leiden.
Ideal für lange KI-Sessions, Streaming-Setups oder parallele Container-Workflows.

👉 Screenshot geeignet: Vergleichsgrafik „CPU-Last vor / nach Optimierung“


Abschluss Ollama (Premium)

Mit diesem Premium-Kapitel hast du Ollama vollständig in dein UCC integriert
stabil, sicher und für den Dauerbetrieb optimiert.
Das System kombiniert Leistung, Datenschutz und Flexibilität ganz ohne Cloud-Zwang.

Zusammenfassung

Bereich Umsetzung
GUI für Ollama Lokale Weboberfläche zur Modellsteuerung im selben LXC
GPU-Durchreichung Einbindung über Proxmox für beschleunigte Berechnungen
Internetzugang Kontrollierte Python-Bridge, die Webseiten abruft und Texte an Ollama übergibt
CPU-Optimierung Leistungsbegrenzung, Pinning und Temperaturregelung für stabilen Dauerbetrieb

👉 Screenshot geeignet: Architekturübersicht „Ollama LXC mit GUI, GPU, Bridge und Optimierung“

Fazit

  • Ollama läuft vollständig in deiner eigenen Infrastruktur.
  • Alle Modelle, Eingaben und Verläufe bleiben privat.
  • Die Internet-Bridge liefert bei Bedarf aktuelle Informationen kontrolliert und sicher.
  • Durch CPU-Optimierung und GPU-Durchreichung nutzt du dein System effizient, ohne es zu überlasten.
  • Alles bleibt wartungsarm, nachvollziehbar und zukunftssicher.

Damit ist das Premium-Kapitel Ollama abgeschlossen.
Dein UCC verfügt nun über eine vollständig integrierte, selbstverwaltete KI-Umgebung,
die lokal, performant und datensouverän arbeitet.