{ "meta": { "title": "NVIDIA Treiber auf Proxmox VE 9 installieren (manuelles Verfahren) | ProxMenux Guides", "description": "NVIDIA-Treiber auf einem Proxmox-VE-9-Host manuell installieren und konfigurieren sowie die GPU einem oder mehreren LXC-Containern zugänglich machen. Behandelt Treiberinstallation, Persistenzdienst, optionalen NVENC-Patch und die Konfiguration je Container.", "ogTitle": "NVIDIA-Treiber auf Proxmox VE 9 installieren (manuelles Verfahren)", "ogDescription": "NVIDIA-Treiber auf PVE 9 manuell einrichten: Hosttreiber, Persistenzdienst, optionaler NVENC-Patch und GPU-Zugriff für einzelne LXC-Container." }, "header": { "title": "NVIDIA Grafikkartentreiber auf Proxmox VE 9 installieren (manuelles Verfahren)", "description": "NVIDIA-Treiber auf einem Proxmox-VE-9-Host manuell installieren und konfigurieren sowie die GPU einem oder mehreren LXC-Containern zugänglich machen. Behandelt Treiberinstallation, Persistenzdienst, optionalen NVENC-Patch und die Konfiguration je Container.", "section": "Leitfäden" }, "intro": { "calloutTitle": "Notiz", "calloutBody": "Diese Anleitung beschreibt die manuellen Schritte als Referenz. Für die meisten Nutzer empfiehlt sich der ProxMenux-Assistent: NVIDIA-Treiber installieren (Host) unter GPUs und Coral-TPU sowie GPU zu LXC hinzufügen oder GPU zu VM hinzufügen für die jeweilige Gastkonfiguration. Der Assistent erledigt diese Schritte mit zusätzlichen Prüfungen für Kernel-Header, IOMMU und VFIO-Konflikte. Die manuelle Anleitung hilft, einzelne Befehle zu verstehen oder abweichende Konfigurationen einzurichten.", "targetNote": "Gezielt auf Proxmox VE 9 (Debian Trixie). PVE 7 (Bullseye) und PVE 8 (Bookworm) sind nicht mehr abgedeckt.", "stepsTitle": "Was Sie einrichten", "steps": [ "Proxmox-VE-9-Host vorbereiten: nouveau sperren, Paketquellen und Voraussetzungen prüfen.", "Installieren Sie den NVIDIA Treiber auf dem Host.", "Installieren Sie den NVIDIA Persistenzdienst.", "Optional: Mit dem keylase-Patch das Limit gleichzeitiger NVENC-Sitzungen bei Consumer-GPUs aufheben.", "Die GPU einem oder mehreren LXC-Containern zugänglich machen und jeweils die passende Treiberversion installieren." ] }, "prepareHost": { "heading": "1. Bereiten Sie den Host vor (PVE 9)", "blacklistHeading": "1.1 nouveau sperren", "blacklistBody": "Überprüfen Sie, ob der Open-Source-nouveau-Treiber bereits auf der schwarzen Liste steht:", "blacklistCheckCode": "cat /etc/modprobe.d/blacklist.conf", "blacklistAdd": "Wenn blacklist nouveau nicht angezeigt wird, fügen Sie es hinzu und starten Sie neu:", "blacklistAddCode": "echo \"blacklist nouveau\" >> /etc/modprobe.d/blacklist.conf\nupdate-initramfs -u -k all\nreboot", "blacklistImageAlt": "Blacklist-Prüfung", "reposHeading": "1.2 Paketquellen prüfen (PVE 9 / Trixie)", "reposBody": "Post-Install-Werkzeuge haben die Paketquellen möglicherweise schon eingerichtet. Prüfen Sie zuerst die vorhandenen Quellen und überspringen Sie bereits erledigte Änderungen. Vermeiden Sie doppelte Einträge.", "reposOtherwise": "Andernfalls für eine unveränderte PVE-9-Installation ohne Enterprise-Abonnement:", "reposEditCode": "nano /etc/apt/sources.list.d/proxmox.sources", "reposPveBody": "Stellen Sie sicher, dass es die No-Abonnement-Quelle für Trixie enthält:", "reposPveCode": "Types: deb\nURIs: http://download.proxmox.com/debian/pve\nSuites: trixie\nComponents: pve-no-subscription\nSigned-By: /usr/share/keyrings/proxmox-archive-keyring.gpg", "reposDebianBody": "Und die Debian-Quellen bei /etc/apt/sources.list.d/debian.sources:", "reposDebianCode": "Types: deb\nURIs: http://deb.debian.org/debian/\nSuites: trixie trixie-updates\nComponents: main contrib non-free non-free-firmware\nSigned-By: /usr/share/keyrings/debian-archive-keyring.gpg\n\nTypes: deb\nURIs: http://security.debian.org/debian-security/\nSuites: trixie-security\nComponents: main contrib non-free non-free-firmware\nSigned-By: /usr/share/keyrings/debian-archive-keyring.gpg", "updateHeading": "1.3 Aktualisieren Sie das System und installieren Sie die Voraussetzungen", "updateCode": "apt update && apt dist-upgrade -y", "buildToolsBody": "Installieren Sie die Build-Tools und Kernel-Header, die zum Kompilieren des Kernel-Moduls NVIDIA erforderlich sind:", "buildToolsCode": "apt-get install -y git\napt-get install -qqy pve-headers-$(uname -r) gcc make" }, "installDriver": { "heading": "2. Installieren Sie den NVIDIA-Treiber auf dem Host", "pickHeading": "2.1 Wählen Sie eine Treiberversion", "pickBody": "Wählen Sie einen Treiberzweig, der GPU und laufenden Kernel unterstützt. Der neueste Zweig unterstützt ältere GPUs möglicherweise nicht. Prüfen Sie die Produktliste der gewählten NVIDIA-Version:", "pickUrlCode": "https://download.nvidia.com/XFree86/Linux-x86_64/latest.txt", "nvencCallout": "Wenn Sie den NVENC-Patch anwenden möchten (Schritt 4), überprüfen Sie zuerst, ob der Patch die von Ihnen gewählte Treiberversion unterstützt: github.com/keylase/nvidia-patch", "nvencCalloutTitle": "Hinweis", "pickReplace": "Ersetzen Sie latest.txt in der URL durch die Versionsnummer, um den Installer mit der Endung .run zu finden. Die vollständige Treiberliste steht unter:", "pickListCode": "https://download.nvidia.com/XFree86/Linux-x86_64/", "pickImageAlt": "NVIDIA Treiber herunterladen", "pickVersionNote": "Ersetzen Sie '<'VERSION'>' durch die aktuelle Version (z. B. 580.95.05).", "downloadHeading": "2.2 Download und Ausführen des Installationsprogramms", "downloadCode": "mkdir -p /opt/nvidia\ncd /opt/nvidia\nwget https://download.nvidia.com/XFree86/Linux-x86_64/VERSION/NVIDIA-Linux-x86_64-VERSION.run\nchmod +x NVIDIA-Linux-x86_64-VERSION.run", "firstPassBody": "Starten Sie den Installer. Die folgende Option kann nouveau bei Bedarf deaktivieren; vor Abschluss kann ein Neustart nötig sein:", "firstPassCode": "./NVIDIA-Linux-x86_64-VERSION.run --no-questions --ui=none --disable-nouveau\nreboot", "secondPassBody": "Nachdem der Host zurückgekommen ist, führen Sie das Installationsprogramm erneut aus, um das Kernelmodul zu kompilieren und zu installieren:", "secondPassCode": "/opt/nvidia/NVIDIA-Linux-x86_64-VERSION.run --no-questions --ui=none", "modulesHeading": "2.3 NVIDIA-Module beim Booten laden", "modulesBody": "Bearbeiten Sie die Konfiguration zum Laden der Module:", "modulesEditCode": "nano /etc/modules-load.d/modules.conf", "modulesAddBody": "Fügen Sie die NVIDIA-Module für Host und LXC hinzu. VFIO-Module sind für VM-Durchreichung vorgesehen und werden hier nicht benötigt:", "modulesAddCode": "nvidia\nnvidia_uvm", "modulesSaveBody": "Speichern Sie die Datei, beenden Sie den Editor mit Ctrl+X und erstellen Sie initramfs neu:", "modulesSaveCode": "update-initramfs -u -k all", "udevHeading": "2.4 Udev-Regeln erstellen", "udevBody": "Damit beim Laden der Module die Geräteknoten /dev/nvidia* erstellt werden:", "udevEditCode": "nano /etc/udev/rules.d/70-nvidia.rules", "udevRulesCode": "# /etc/udev/rules.d/70-nvidia.rules\nKERNEL==\"nvidia\", RUN+=\"/bin/bash -c '/usr/bin/nvidia-smi -L'\"\nKERNEL==\"nvidia_uvm\", RUN+=\"/bin/bash -c '/usr/bin/nvidia-modprobe -c0 -u'\"", "udevSaveBody": "Speichern (Ctrl+X)." }, "persistence": { "heading": "3. NVIDIA-Persistenzdienst", "body": "Der Persistenzdienst hält die GPU initialisiert, wenn keine andere Anwendung sie nutzt. Das reduziert wiederholte Initialisierungslatenz und erhält den Initialisierungszustand zwischen Clients:", "installCode": "cd /opt/nvidia\ngit clone https://github.com/NVIDIA/nvidia-persistenced.git\ncd nvidia-persistenced/init\n./install.sh\nreboot", "verifyBody": "Prüfen Sie nach dem Neustart, ob der Treiber geladen ist und der Dienst läuft:", "verifySmiCode": "nvidia-smi", "smiImageAlt": "Ausgabe von NVIDIA SMI", "verifyServiceCode": "systemctl status nvidia-persistenced", "serviceImageAlt": "Status des NVIDIA-Persistenzdienstes" }, "nvenc": { "heading": "4. Optional: Limit gleichzeitiger NVENC-Sitzungen aufheben", "body": "NVENC-Sitzungslimits hängen von GPU-Modell und Treiberversion ab. Prüfen Sie die NVIDIA-Matrix statt eines pauschalen Limits je Generation. Der keylase-Patch entfernt das Softwarelimit bei unterstützten Treiberversionen und kann Kodierungsaufgaben wie Plex- oder Jellyfin-Transkodierung helfen.", "code": "cd /opt/nvidia\ngit clone https://github.com/keylase/nvidia-patch.git\ncd nvidia-patch\n./patch.sh", "imageAlt": "NVIDIA Patch-Anwendung", "after": "Wenden Sie den Patch nach jedem Treiberupdate erneut an. Das keylase-Repository enthält bei Bedarf auch patch-fbc.sh für FBC, die Erfassung des Bildpuffers." }, "lxcSetup": { "heading": "5. GPU-Zugriff für einen LXC-Container einrichten", "identifyHeading": "5.1 Gerätenummern angeben", "identifyBody": "Auf dem Host:", "identifyCode": "ls -l /dev/nv*", "identifyImageAlt": "NVIDIA Geräteliste", "identifyNote": "Notieren Sie die Major-Gerätenummern. Sie können sich je nach System unterscheiden. Typische Werte:", "tableHeaders": { "device": "Gerät", "major": "Typische Major-Nummer" }, "tableRows": [ { "device": "/dev/nvidia0, /dev/nvidiactl", "major": "195" }, { "device": "/dev/nvidia-uvm, /dev/nvidia-uvm-tools", "major": "509 (variiert)" }, { "device": "/dev/dri/*", "major": "226" }, { "device": "/dev/nvidia-modeset", "major": "195 (mit nvidia geteilt)" } ], "editHeading": "5.2 Bearbeiten der LXC-Konfiguration", "editBody": "Stoppen Sie den Container, falls er läuft. Öffnen Sie seine Konfiguration und ersetzen Sie '<'CTID'>' durch die Container-ID:", "editCode": "nano /etc/pve/lxc/CTID.conf", "editConfigBody": "Kommentieren Sie nur tatsächlich widersprüchliche Zeilen zu lxc.cgroup2.devices.allow oder /dev/dri aus. Ergänzen Sie die NVIDIA-Gerätekonfiguration und passen Sie die Major-Nummern an die NVIDIA-Geräte an, die ls -l /dev/nv* auf Ihrem Host zeigt:", "editConfigCode": "lxc.cgroup2.devices.allow: c 195:* rwm\nlxc.cgroup2.devices.allow: c 509:* rwm\nlxc.mount.entry: /dev/nvidia0 dev/nvidia0 none bind,optional,create=file\nlxc.mount.entry: /dev/nvidiactl dev/nvidiactl none bind,optional,create=file\nlxc.mount.entry: /dev/nvidia-uvm dev/nvidia-uvm none bind,optional,create=file\nlxc.mount.entry: /dev/nvidia-modeset dev/nvidia-modeset none bind,optional,create=file\nlxc.mount.entry: /dev/nvidia-uvm-tools dev/nvidia-uvm-tools none bind,optional,create=file", "editConfigImageAlt": "LXC Konfiguration", "editSave": "Speichern (Ctrl+X) und starten Sie den Container.", "installCtHeading": "5.3 Installieren Sie den Treiber im Container", "installCtCalloutTitle": "Wichtig", "installCtCalloutBody": "Dieser Teil wird im Container ausgeführt, nicht auf dem Host.", "installCtBody": "Das Kernelmodul ist bereits auf dem Host geladen. Der Container benötigt nur die Bibliotheken im Benutzerbereich mit derselben Treiberversion:", "installCtCode": "mkdir -p /opt/nvidia\ncd /opt/nvidia\nwget https://download.nvidia.com/XFree86/Linux-x86_64/VERSION/NVIDIA-Linux-x86_64-VERSION.run\nchmod +x NVIDIA-Linux-x86_64-VERSION.run\n./NVIDIA-Linux-x86_64-VERSION.run --no-kernel-module", "installCtAfter": "Prüfen Sie die Abfragen und installieren Sie hier nur Bibliotheken im Benutzerbereich. Kompilieren oder installieren Sie kein Kernelmodul im LXC-Container.", "installCtImageAlt": "NVIDIA Treiberinstallation", "verifyCtHeading": "5.4 Verifizieren im Container", "verifyCtSmiCode": "nvidia-smi", "verifyCtSmiImageAlt": "NVIDIA SMI in LXC", "verifyCtLsCode": "ls -l /dev/nv*", "verifyCtLsImageAlt": "NVIDIA Geräte in LXC", "verifyCtAfter": "Die GPU sollte aufgelistet sein und ihre Geräteknoten sollten im Containerdateisystem erscheinen.", "workloadHeading": "5.5 GPU-Nutzung mit einer echten Arbeitslast prüfen", "workloadBody": "Aktivieren Sie NVIDIA-Hardwarebeschleunigung in Plex oder Jellyfin, starten Sie eine Videotranskodierung und prüfen Sie im Dashboard oder Protokoll die tatsächliche GPU-Nutzung. Die Treiberinstallation allein aktiviert sie nicht in der Anwendung.", "workloadImage1Alt": "Plex mit NVIDIA GPU", "workloadImage2Alt": "Plex mit NVIDIA GPU - aktive Sitzung", "repeatNote": "Wiederholen Sie Abschnitt 5 für jeden weiteren Container mit GPU-Zugriff. Aktualisieren Sie bei Hosttreiber-Updates auch die Bibliotheken im Benutzerbereich aller Container auf die passende Version." }, "docker": { "heading": "6. (Optional) NVIDIA Docker in einem LXC", "body": "Wenn Docker bereits im LXC-Container läuft, installieren Sie dort nvidia-container-toolkit für den GPU-Zugriff seiner Docker-Container. Zuerst muss die GPU im LXC funktionieren. Die folgenden Befehle gelten für Docker als Root-Dienst:", "code": "apt-get update\napt-get install -y ca-certificates curl gnupg\ncurl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | gpg --dearmor --yes -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg\ncurl -fsSL https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' > /etc/apt/sources.list.d/nvidia-container-toolkit.list\napt-get update\napt-get install -y nvidia-container-toolkit\nnvidia-ctk runtime configure --runtime=docker\nsystemctl restart docker", "after": "Die Befehle richten das NVIDIA-Repository ein, installieren das Toolkit, konfigurieren die Docker-Laufzeit und starten Docker neu. Geräteberechtigungen und cgroup-Beschränkungen des LXC gelten weiterhin. Prüfen Sie die GPU mit einer Testlast." }, "troubleshoot": { "heading": "Fehlerbehebung", "items": [ "nvidia-smi funktioniert auf dem Host, meldet im Container aber „No devices found“: Prüfen Sie Gerätemounts, Berechtigungen und passende Treiberbibliotheken. Bei abweichenden Versionen installieren Sie die Hostversion '<'VERSION'>' im Container mit --no-kernel-module.", "Die Treiberkompilierung schlägt fehl: Prüfen Sie das Bauprotokoll. „No precompiled kernel interface was found“ kann nur bedeuten, dass lokal kompiliert werden muss. Installieren Sie zu uname -r passende Header mit apt-get install pve-headers-$(uname -r) oder dem entsprechenden proxmox-headers-Paket.", "NVENC-Sitzungen bleiben begrenzt: Prüfen Sie die Unterstützung des aktiven Treibers durch den Patch. Ein Treiberupdate kann ihn überschreiben. Wenden Sie bei unterstützter Version ./patch.sh aus /opt/nvidia/nvidia-patch erneut an und prüfen Sie die Ausgabe.", "Die GPU reagiert nach Leerlauf nicht mehr: Prüfen Sie systemctl status nvidia-persistenced und aktivieren Sie den Dienst bei Bedarf. Prüfen Sie auch Kernel- und Treiberprotokolle; ein gestoppter Persistenzdienst ist nicht die einzig mögliche Ursache.", "Der Container startet, aber ls /dev/nv* zeigt keine NVIDIA-Geräte: Prüfen Sie Bind-Mounts und Gerätepfade auf dem Host. Ermitteln Sie mit ls -l /dev/nv* die NVIDIA-Major-Nummern und prüfen Sie Regeln für lxc.cgroup2.devices.allow sowie Dateirechte." ] } }