IceMultiGPUAI

View on GitHub


IceMultiGPUAI

Vollständige, faktenbasierte Setup‑ und Disaster‑Recovery‑Dokumentation des Hosts KI02: einer HP Z440 Workstation mit 2× NVIDIA RTX 3060 (24 GB VRAM gesamt), die als lokaler Multi‑LLM‑ / Multi‑GPU‑Server (Ollama) plus diverse KI‑Dienste betrieben wird. KI02 hat das alte „KI01” abgelöst und dessen IP 10.10.0.210 übernommen.

Zweck: Aus diesem Repo lässt sich der Host im Katastrophenfall Schritt für Schritt vollständig wiederherstellen. Siehe docs/07-disaster-recovery.md.

⚠️ Keine Geheimnisse im Repo. Passwörter, Tokens und Schlüssel sind bewusst nicht enthalten und im Text durch <PLATZHALTER> ersetzt. Interne RFC‑1918‑IPs sind enthalten, weil sie für die Wiederherstellung benötigt werden.


1. Eckdaten (Stand 2026‑06‑27)

Bereich Wert
Modell HP Z440 Workstation, BIOS M60 v02.41
CPU Intel Xeon E5‑1650 v4 @ 3.60 GHz (6 Cores / 6 Threads)
RAM 16 GB DDR4 + 4 GB Swap
GPU 2× NVIDIA GeForce RTX 3060, je 12 GB (24 GB gesamt), Compute 8.6, PCI 02:00.0 + 03:00.0, Power‑Limit 130 W je Karte
OS Ubuntu 24.04.4 LTS, Kernel 6.8.0-124-generic
GPU‑Treiber nvidia-driver-595-open 595.71.05
Python 3.12.3
LLM‑Runtime Ollama 0.30.10 (0.0.0.0:11434) + 14 Modelle
Container Docker + nvidia-container-toolkit + docker‑compose‑v2
OS‑Disk sda 238 GB Micron SSD (LVM ubuntu-vg, ext4 /)
Daten‑Disk sdb 3.6 TB Seagate (LVM storage, ext4 /storage, 2.9 TB)
Netz eno1 statisch 10.10.0.210/24, GW 10.10.0.2, DNS 10.10.0.2 + x.x.x.x

2. Architektur — Schichten

flowchart TB
  subgraph HW["🖥️ Hardware — HP Z440"]
    CPU["Xeon E5-1650 v4<br/>6C / 16 GB RAM"]
    GPU0["RTX 3060 #0<br/>12 GB · PCI 02:00 · 130 W"]
    GPU1["RTX 3060 #1<br/>12 GB · PCI 03:00 · 130 W"]
    SDA["sda · 238 GB SSD<br/>OS /"]
    SDB["sdb · 3.6 TB HDD<br/>/storage"]
  end

  subgraph OS["⚙️ OS & Treiber"]
    UB["Ubuntu 24.04.4<br/>Kernel 6.8"]
    DRV["nvidia-driver-595-open<br/>595.71.05"]
    PWR["nvidia-powerlimit.service<br/>-pm 1 / -pl 130"]
  end

  subgraph RT["🧠 Laufzeit"]
    OLL["Ollama 0.30.10 :11434<br/>14 Modelle · 2 GPUs"]
    DOCK["Docker + nvidia-container-toolkit"]
  end

  subgraph SVC["🔌 Dienste"]
    OWU["Open WebUI :8080"]
    MRAG["malware-rag :5000"]
    GHID["ghidra-orchestrator :5001"]
    ICE["IceIntelligence :8000"]
    QDR["qdrant :6333/6334"]
    IMML["immich-ml :3003 (GPU)"]
    N8N["deal-hunter n8n :5678"]
    KA["ka-api :8081"]
    MON["ki02-monitor :9100"]
  end

  HW --> OS --> RT --> SVC
  GPU0 -. NVML .-> PWR
  GPU1 -. NVML .-> PWR
  OLL -. nutzt .-> GPU0 & GPU1
  IMML -. CUDA .-> GPU0

3. Dienste, Ports & Datenfluss

Dienst Port Typ Persistenz Nutzt
Ollama 11434 systemd /usr/share/ollama/.ollama beide GPUs
Open WebUI 8080 Docker (host‑net) Volume open-webui Ollama
malware-rag 5000 systemd (Flask) /opt/malware-rag/chroma_db (7.5 GB) Ollama (qwen2.5-coder:14b), ChromaDB
ghidra-orchestrator 5001 systemd (Flask) /opt/ghidra, malware‑rag‑venv, JDK 21 Ollama, malware-rag
gpu-monitor systemd NVML, Ollama
IceIntelligence 8000 systemd (FastAPI) /root/IceIntelligence (13 GB) Ollama (llama3.1:8b + nomic-embed-text), ChromaDB, Paperless
qdrant 6333/6334 Docker /opt/qdrant/qdrant_storage
immich-ml 3003 Docker (GPU) Volume model-cache CUDA (externer Immich‑Server)
deal-hunter n8n 5678 Docker Volume deal-hunter-n8n-data Ollama, ka-api
ka-api (Kleinanzeigen) 8081 Docker
ki02-monitor 9100 systemd NVML, Docker, InfluxDB 10.10.0.100:8086
flowchart LR
  user(["Nutzer / Clients"])
  user --> OWU["Open WebUI :8080"]
  OWU --> OLL[("Ollama :11434")]
  OLL --> G0["RTX 3060 #0"]
  OLL --> G1["RTX 3060 #1"]

  user --> ICE["IceIntelligence :8000"]
  ICE --> OLL
  ICE --> CH1[("ChromaDB")]
  ICE --> PL[/"Paperless-ngx<br/>(extern)"/]

  user --> MRAG["malware-rag :5000"]
  MRAG --> OLL
  MRAG --> CH2[("ChromaDB<br/>3 Collections")]
  GHID["ghidra-orchestrator :5001"] --> MRAG
  GHID --> OLL

  N8N["deal-hunter n8n :5678"] --> OLL
  N8N --> KA["ka-api :8081"]

  IMML["immich-ml :3003"] --> G0
  MON["ki02-monitor :9100"] --> INF[("InfluxDB<br/>10.10.0.100:8086")]

4. Multi‑GPU‑Modell‑Scheduling

Ollama wird ohne OLLAMA_SCHED_SPREAD betrieben → flexibles Scheduling:

  • Kleine Modelle werden je nach VRAM auf eine der beiden Karten geladen (mehrere Modelle parallel, je eines pro GPU).
  • Große Modelle (z. B. qwen2.5:14b, ~9 GB) werden bei Bedarf über beide Karten gesplittet.
  • Gesteuert über die systemd‑Override (siehe etc/systemd/ollama.service.d-override.conf): OLLAMA_MAX_LOADED_MODELS=3, OLLAMA_NUM_PARALLEL=2, OLLAMA_KEEP_ALIVE=30m.

5. Netzwerk‑Einbettung

flowchart LR
  KI02["KI02<br/>10.10.0.210/24"]
  GW(["Gateway 10.10.0.2"])
  KI02 --> GW --> NET(["Internet"])
  KI02 <-->|"Monitoring / HA"| H100["10.10.0.100<br/>InfluxDB :8086 · Home Assistant :8123"]
  KI02 <-->|"Homarr Dashboard"| H186["10.10.0.186<br/>SynNAS · Homarr :7575"]
  KI02 <-->|"Joplin (geplant: Jella-KI)"| H67["10.10.0.67<br/>joplin-server :22300"]

6. Repo‑Struktur

IceMultiGPUAI/
├── README.md                      ← diese Übersicht
├── docs/
│   ├── 01-hardware-bios.md        Hardware, PSU/GPU-Kabel, BIOS „Headless Boot"
│   ├── 02-os-driver-gpu.md        Ubuntu, NVIDIA-Treiber, Power-Limit
│   ├── 03-ollama-multigpu.md      Ollama-Install, Override, Modelle
│   ├── 04-services.md             Alle Dienste im Detail
│   ├── 05-storage-network.md      LVM/Disks, /storage, Netplan
│   ├── 06-monitoring.md           ki02-monitor + InfluxDB
│   └── 07-disaster-recovery.md    ⭐ Schritt-für-Schritt Wiederherstellung
├── etc/                           Verbatim-Konfigs (secret-frei)
│   ├── systemd/*.service
│   ├── netplan/50-cloud-init.yaml
│   └── cloud-init/99-disable-network-config.cfg
├── compose/                       docker-compose-Dateien je Dienst
├── scripts/ki02_monitor.py        Monitoring-Dienst
└── screenshots/                   (GUI-Screenshots manuell zu ergänzen)

7. Im Katastrophenfall

➡️ Direkt zu docs/07-disaster-recovery.md — dort steht die vollständige Reihenfolge: BIOS → Ubuntu → Treiber → Ollama → Docker → Dienste → Daten zurückspielen → Verifikation.


Erstellt 2026‑06‑27. Alle Werte stammen aus dem laufenden System (live erhoben), nicht aus Annahmen.