Proxmox: GPU sharing in LXC Containern

Warum GPU-Sharing mit LXC-Containern?

Wenn du einen Proxmox-Server mit einer GPU betreibst und verschiedene Dienste wie Ollama (für KI-Modelle), Plex (für Medien-Transcoding) oder Frigate (für Videoüberwachung) mit Hardware-Beschleunigung nutzen möchtest, stehst du vor einer wichtigen Entscheidung.

Die zwei Optionen:

  1. GPU-Passthrough zu einer VM: Funktioniert gut, aber die GPU kann nur an EINE einzige VM weitergegeben werden
  2. GPU-Sharing mit LXC-Containern: Mehrere Container können sich die GPU gleichzeitig teilen

Da die meisten von uns ihre Dienste isoliert voneinander betreiben möchten, ist Option 2 mit LXC-Containern oft die bessere Wahl. Der einzige „Nachteil“: Du musst LXC-Container statt VMs verwenden – was für die meisten Standalone-Dienste aber kein Problem darstellt.

Voraussetzungen

Bevor wir loslegen, stelle sicher, dass folgende Voraussetzungen erfüllt sind:

  • Proxmox VE 8.2+ oder 9.0 (empfohlen für Web-UI Device Passthrough)
  • Eine unterstützte GPU (NVIDIA, AMD oder Intel)
  • Root-Zugriff auf den Proxmox-Host
  • Grundkenntnisse in der Linux-Kommandozeile

💡 Neu in Proxmox VE 9.0: Die Version 9.0 (veröffentlicht im August 2025) basiert auf Debian 13 „Trixie“ mit Linux Kernel 6.14.8-2 und bringt LXC 6.0.4 mit verbesserter Ressourcenverwaltung und Cgroup v2-Integration. Die Web-UI Device Passthrough Funktion wurde bereits in Version 8.2.7 eingeführt und ist in Version 9.0 weiter optimiert.

Wichtiger Hinweis: Falls du bereits GPU-Passthrough für VMs konfiguriert hast (mit Blacklisting von Treibern etc.), musst du diese Änderungen rückgängig machen. LXC-Container benötigen funktionierende Treiber auf dem Host!

Moderne Methode: Web-UI Device Passthrough (Proxmox 8.2.7+)

Seit Proxmox VE 8.2.7 gibt es eine deutlich einfachere Methode für GPU-Passthrough zu LXC-Containern über die Web-Oberfläche. Diese Methode funktioniert sogar mit unprivilegierten Containern!

Schritt 1: GPU im Web-UI hinzufügen

  1. Wähle deinen Container in der Proxmox Web-UI aus
  2. Gehe zu Resources
  3. Klicke auf AddDevice Passthrough
  4. Gib den Device-Pfad ein (z.B. /dev/dri/card0 für Intel/AMD oder /dev/nvidia0 für NVIDIA)
  5. Klicke auf Advanced und setze:
    • Access Mode: 0666
    • GID: 104 (render group) für unprivilegierte Container
    • UID: Optional, je nach Anwendung

Diese Methode ersetzt die manuelle Konfiguration mit lxc.cgroup2.devices.allow und lxc.mount.entry Einträgen!

NVIDIA GPU Konfiguration

Schritt 1: NVIDIA-Treiber auf dem Host installieren

Zuerst müssen die NVIDIA-Treiber auf dem Proxmox-Host installiert werden. Lade den passenden Treiber von der NVIDIA-Website herunter.

# Vorhandene NVIDIA-Pakete entfernen (wichtig!)
apt remove --purge nvidia* libnvidia* libnvcuvid1

# Nouveau-Treiber blacklisten
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf
update-initramfs -u

# System neustarten
reboot

# NVIDIA-Treiber installieren (Beispiel für Version 550.127.05)
wget https://us.download.nvidia.com/XFree86/Linux-x86_64/550.127.05/NVIDIA-Linux-x86_64-550.127.05.run
chmod +x NVIDIA-Linux-x86_64-550.127.05.run
./NVIDIA-Linux-x86_64-550.127.05.run --dkms

Schritt 2: GPU-Geräte identifizieren

Nach der Installation überprüfe die NVIDIA-Geräte:

# NVIDIA-Geräte anzeigen
ls -l /dev/nvidia*

# Ausgabe sollte etwa so aussehen:
crw-rw-rw- 1 root root 195,   0 Nov 25 10:00 /dev/nvidia0
crw-rw-rw- 1 root root 195, 255 Nov 25 10:00 /dev/nvidiactl
crw-rw-rw- 1 root root 507,   0 Nov 25 10:00 /dev/nvidia-uvm
crw-rw-rw- 1 root root 507,   1 Nov 25 10:00 /dev/nvidia-uvm-tools

Schritt 3: Container konfigurieren

Option A: Web-UI Methode (empfohlen für Proxmox 8.2.7+/9.0)

Füge über Resources → Add → Device Passthrough folgende Geräte hinzu:

  • /dev/nvidia0 mit Mode: 0666
  • /dev/nvidiactl mit Mode: 0666
  • /dev/nvidia-uvm mit Mode: 0666
  • /dev/nvidia-uvm-tools mit Mode: 0666
  • /dev/nvidia-modeset mit Mode: 0666 (falls vorhanden)

Option B: Manuelle Methode (für ältere Versionen)

Bearbeite die Container-Konfiguration (ersetze 100 mit deiner Container-ID):

nano /etc/pve/lxc/100.conf

Füge folgende Zeilen hinzu (passe die Zahlen an deine Geräte an):

# NVIDIA GPU Support
lxc.cgroup2.devices.allow: c 195:* rwm
lxc.cgroup2.devices.allow: c 507:* rwm
lxc.mount.entry: /dev/nvidia0 dev/nvidia0 none bind,optional,create=file
lxc.mount.entry: /dev/nvidiactl dev/nvidiactl none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-uvm dev/nvidia-uvm none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-uvm-tools dev/nvidia-uvm-tools none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-modeset dev/nvidia-modeset none bind,optional,create=file

Schritt 4: NVIDIA-Treiber im Container installieren

Starte den Container und installiere die gleiche Treiberversion:

# Im Container ausführen:
wget https://us.download.nvidia.com/XFree86/Linux-x86_64/550.127.05/NVIDIA-Linux-x86_64-550.127.05.run
chmod +x NVIDIA-Linux-x86_64-550.127.05.run
./NVIDIA-Linux-x86_64-550.127.05.run --no-kernel-module

Wichtig: Der Parameter --no-kernel-module ist essentiell, da der Container den Kernel des Hosts nutzt!

AMD GPU Konfiguration

AMD-GPUs sind besonders interessant für KI-Workloads, da Modelle wie die RX 7900 XTX mit 24GB VRAM ausgestattet sind – perfekt für große LLMs!

Schritt 1: Geräte überprüfen

# AMD GPU-Geräte anzeigen
ls -l /dev/dri
ls -l /dev/kfd

Schritt 2: Container konfigurieren (Web-UI Methode)

In Proxmox 8.2.7+ und 9.0:

  1. Wähle deinen Container aus
  2. Gehe zu Resources
  3. Klicke auf AddDevice Passthrough
  4. Füge folgende Geräte hinzu:
    • /dev/dri/card0 mit Mode: 0666, GID: 104 (render)
    • /dev/dri/renderD128 mit Mode: 0666, GID: 104
    • /dev/kfd mit Mode: 0666 (für ROCm-Support)

Der Vorteil: Diese Methode funktioniert auch perfekt mit unprivilegierten Containern!

Schritt 3: ROCm im Container installieren

# ROCm Repository hinzufügen (Ubuntu/Debian)
wget -q -O - https://repo.radeon.com/rocm/rocm.gpg.key | apt-key add -
echo 'deb [arch=amd64] https://repo.radeon.com/rocm/apt/debian/ ubuntu main' > /etc/apt/sources.list.d/rocm.list

# ROCm installieren
apt update
apt install rocm-dkms

Intel GPU Konfiguration

Intel-GPUs eignen sich hervorragend für Media-Transcoding mit Plex oder Jellyfin. Mit Intel VT-d können in Proxmox 8.2+ sogar bis zu 7 VMs die GPU teilen!

Schritt 1: Intel GPU-Unterstützung auf dem Host

# Intel Media Driver installieren
apt update
apt install intel-media-va-driver-non-free

Schritt 2: Container-Konfiguration (Web-UI Methode)

Füge über die Web-UI folgende Geräte hinzu:

  • /dev/dri/card0 mit Mode: 0666, GID: 104
  • /dev/dri/renderD128 mit Mode: 0666, GID: 104

Alternativ für die manuelle Methode in /etc/pve/lxc/100.conf:

# Intel GPU Support
lxc.cgroup2.devices.allow: c 226:* rwm
lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir

Schritt 3: Gruppe im Container anpassen

# Im Container die render-Gruppe für den Benutzer hinzufügen
usermod -aG video,render plex  # Beispiel für Plex-User

Unprivilegierte Container – Die sichere Wahl

Mit der Web-UI Device Passthrough Funktion ist es jetzt viel einfacher, GPUs auch in unprivilegierten Containern zu nutzen:

  • Setze einfach die GID auf 104 (render group) in den Advanced Settings
  • Keine komplexen idmap-Konfigurationen mehr nötig
  • Funktioniert out-of-the-box mit den meisten Anwendungen

Dies löst das alte Sicherheitsproblem, bei dem privilegierte Container für einfache GPU-Passthrough benötigt wurden.

Verifizierung der GPU-Funktionalität

Für NVIDIA:

# Im Container ausführen:
nvidia-smi

# Sollte die GPU und aktuelle Auslastung anzeigen

Für AMD:

# ROCm-Info anzeigen
rocm-smi
rocminfo

Für Intel:

# Intel GPU-Tools installieren und testen
apt install intel-gpu-tools
intel_gpu_top

Praktische Anwendungsfälle

Ollama für lokale LLMs

Nach der GPU-Konfiguration kannst du Ollama einfach installieren:

# Ollama installieren
curl -fsSL https://ollama.com/install.sh | sh

# Modell herunterladen und starten
ollama run llama3.2

# GPU-Nutzung überprüfen
nvidia-smi  # sollte Ollama-Prozess zeigen

Plex Media Server mit Hardware-Transcoding

# Nach Plex-Installation Hardware-Transcoding aktivieren:
# 1. Plex Web-Interface öffnen
# 2. Einstellungen → Transcoder
# 3. "Use hardware acceleration when available" aktivieren

Jellyfin mit GPU-Beschleunigung

Jellyfin ist besonders beliebt für GPU-Transcoding in LXC-Containern:

# Jellyfin Installation
apt update
apt install jellyfin

# In Jellyfin Settings → Playback:
# Hardware acceleration: VAAPI (Intel/AMD) oder NVENC (NVIDIA)

Frigate für Videoüberwachung

In der Frigate-Konfiguration config.yml:

ffmpeg:
  hwaccel_args: preset-nvidia-h264  # für NVIDIA
  # oder
  hwaccel_args: preset-vaapi  # für Intel/AMD

Häufige Probleme und Lösungen

Problem: „NVIDIA-SMI has failed“

Lösung: Stelle sicher, dass die Treiberversionen auf Host und Container identisch sind!

Problem: Permission denied beim GPU-Zugriff

Lösung: Bei unprivilegierten Containern: Verwende die Web-UI und setze die GID auf 104 (render group).

Problem: HDR Tone Mapping funktioniert nicht (Intel)

Bekanntes Problem: Bei Intel GPUs in LXC-Containern kann HDR Tone Mapping in Plex problematisch sein. Hardware-Transcoding funktioniert aber weiterhin.

Problem: Container startet nicht nach GPU-Konfiguration

Lösung: Prüfe die Syntax in der Container-Config. Ein fehlendes Komma oder Leerzeichen kann den Start verhindern.

Proxmox VE 9.0 – Was ist neu?

Die im August 2025 veröffentlichte Version 9.0 bringt einige Verbesserungen für Container:

  • LXC 6.0.4: Verbesserte Ressourcenverwaltung und Sicherheitsisolation
  • Cgroup v2: Bessere Integration für moderne Container-Workloads
  • Kernel 6.14.8-2: Verbesserte GPU-Treiberunterstützung
  • SDN Fabric Support: Komplexere Netzwerkarchitekturen für Container-Cluster

Die Web-UI Device Passthrough Funktion wurde bereits in 8.2.7 eingeführt und ist in 9.0 weiter optimiert worden.

Wichtige Überlegungen zur Sicherheit

LXC-Container mit GPU-Zugriff haben erweiterte Rechte. Beachte folgende Punkte:

  • Unprivilegierte Container (empfohlen): Mit der Web-UI Device Passthrough Methode jetzt einfach umsetzbar
  • Privilegierte Container: Nur verwenden, wenn absolut notwendig
  • Verwende GPU-Sharing nur für vertrauenswürdige Workloads
  • Isoliere kritische Dienste in separaten Containern
  • Nutze die GID-Einstellungen für granulare Zugriffskontrolle

Performance-Tipps

  • Mehrere Container können die GPU gleichzeitig nutzen, aber die Performance wird geteilt
  • Für maximale Performance bei einzelnen Workloads: GPU-Passthrough zu einer VM verwenden
  • Überwache die GPU-Auslastung mit nvidia-smi, rocm-smi oder intel_gpu_top
  • Plane GPU-intensive Tasks zeitversetzt, wenn mehrere Dienste die GPU nutzen
  • Nutze die erweiterten Cgroup v2 Features in Proxmox 9.0 für bessere Ressourcenkontrolle

Fazit

GPU-Sharing mit LXC-Containern in Proxmox ist eine elegante Lösung, um Hardware-Beschleunigung für mehrere Dienste gleichzeitig bereitzustellen. Mit den Verbesserungen in Proxmox 8.2.7+ und besonders in Version 9.0 ist die Einrichtung deutlich einfacher geworden – besonders durch die Web-UI Device Passthrough Funktion.

Der große Vorteil gegenüber VM-Passthrough: Du bist nicht auf einen einzigen Dienst beschränkt und kannst die GPU-Ressourcen flexibel zwischen verschiedenen Anwendungen teilen. Mit der Unterstützung für unprivilegierte Container ist dies jetzt auch sicher möglich.

Weiterführende Ressourcen

Hast du Fragen oder eigene Erfahrungen mit GPU-Sharing in Proxmox? Teile sie gerne in den Kommentaren!

OPNsense VM Platte voll?

Auf einer meiner OPNsense VMs war die zugewiesene Platte voll. Das lässt sich ganz einfach beheben, wie in folgendem Video beschrieben:

Hier habe ich dir noch schnell die passenden Befehle rausgeschrieben.

Zum Anzeigen der Plattenbelegung:

gpart show

Nach dem Vergrößern der Platte musst du zuerst die Partitionstabelle fixen:

gpart recover da0

Setze dabei für da0 die Bezeichnung deiner Patte ein.

Jetzt kannst du die Partition vergrößern:

gpart resize -i 4 da0

Passe dabei auf, die richtige Partitionsnummer einzusetzen.

Überprüfe die erfolgreiche Vergrößerung:

gpart show

Jetzt musst du noch das root-Filesystem vergrößern, dazu musst du unterscheiden, ob du ein UFS oder ZFS hast.

Für UFS:

growfs /dev/gpt/rootfs

Und für ZFS:

zpool online -e zroot da0p4

Hierbei auch wieder aufpassen wegen der Platte und Partition. da0p4 in meinem Fall heißt einfach Platte da0 und Partition 4

Das war’s auch schon 🙂

Falls du noch passende Hardware suchst um deine OPNsense aus der Virtualisierung zu befreien, dann schau doch mal meine Amazon-Links an. Falls etwas für dich dabei ist, würde ich mich freuen wenn du es über meinen Link bestellst, dir entstehen dabei keinerlei Mehrkosten und ich erhalte einen kleinen Anteil von Amazon.

Keine Produkte gefunden.