mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-11-02 02:42:08 +00:00
166 lines
16 KiB
JSON
166 lines
16 KiB
JSON
{
|
|
"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: <strong>NVIDIA-Treiber installieren (Host)</strong> unter <em>GPUs und Coral-TPU</em> sowie <strong>GPU zu LXC hinzufügen</strong> oder <strong>GPU zu VM hinzufügen</strong> 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 <strong>Proxmox VE 9</strong> (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-<code>nouveau</code>-Treiber bereits auf der schwarzen Liste steht:",
|
|
"blacklistCheckCode": "cat /etc/modprobe.d/blacklist.conf",
|
|
"blacklistAdd": "Wenn <code>blacklist nouveau</code> 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 <code>/etc/apt/sources.list.d/debian.sources</code>:",
|
|
"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: <patchLink>github.com/keylase/nvidia-patch</patchLink>",
|
|
"nvencCalloutTitle": "Hinweis",
|
|
"pickReplace": "Ersetzen Sie <code>latest.txt</code> in der URL durch die Versionsnummer, um den Installer mit der Endung <code>.run</code> zu finden. Die vollständige Treiberliste steht unter:",
|
|
"pickListCode": "https://download.nvidia.com/XFree86/Linux-x86_64/",
|
|
"pickImageAlt": "NVIDIA Treiber herunterladen",
|
|
"pickVersionNote": "Ersetzen Sie <code>'<'VERSION'>'</code> durch die aktuelle Version (z. B. <code>580.95.05</code>).",
|
|
"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 <code>nouveau</code> 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 <code>Ctrl+X</code> 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 <code>/dev/nvidia*</code> 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 (<code>Ctrl+X</code>)."
|
|
},
|
|
"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 <code>patch-fbc.sh</code> 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": "<code>/dev/nvidia0</code>, <code>/dev/nvidiactl</code>",
|
|
"major": "195"
|
|
},
|
|
{
|
|
"device": "<code>/dev/nvidia-uvm</code>, <code>/dev/nvidia-uvm-tools</code>",
|
|
"major": "509 (variiert)"
|
|
},
|
|
{
|
|
"device": "<code>/dev/dri/*</code>",
|
|
"major": "226"
|
|
},
|
|
{
|
|
"device": "<code>/dev/nvidia-modeset</code>",
|
|
"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 <code>'<'CTID'>'</code> durch die Container-ID:",
|
|
"editCode": "nano /etc/pve/lxc/CTID.conf",
|
|
"editConfigBody": "Kommentieren Sie nur tatsächlich widersprüchliche Zeilen zu <code>lxc.cgroup2.devices.allow</code> oder <code>/dev/dri</code> aus. Ergänzen Sie die NVIDIA-Gerätekonfiguration und passen Sie die Major-Nummern an die NVIDIA-Geräte an, die <code>ls -l /dev/nv*</code> auf <strong>Ihrem</strong> 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 (<code>Ctrl+X</code>) und starten Sie den Container.",
|
|
"installCtHeading": "5.3 Installieren Sie den Treiber im Container",
|
|
"installCtCalloutTitle": "Wichtig",
|
|
"installCtCalloutBody": "Dieser Teil wird <strong>im Container</strong> 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 <strong>Abschnitt 5</strong> 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 <code>nvidia-container-toolkit</code> 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": [
|
|
"<strong><code>nvidia-smi</code> funktioniert auf dem Host, meldet im Container aber „No devices found“:</strong> Prüfen Sie Gerätemounts, Berechtigungen und passende Treiberbibliotheken. Bei abweichenden Versionen installieren Sie die Hostversion <code>'<'VERSION'>'</code> im Container mit <code>--no-kernel-module</code>.",
|
|
"<strong>Die Treiberkompilierung schlägt fehl:</strong> Prüfen Sie das Bauprotokoll. „No precompiled kernel interface was found“ kann nur bedeuten, dass lokal kompiliert werden muss. Installieren Sie zu <code>uname -r</code> passende Header mit <code>apt-get install pve-headers-$(uname -r)</code> oder dem entsprechenden proxmox-headers-Paket.",
|
|
"<strong>NVENC-Sitzungen bleiben begrenzt:</strong> Prüfen Sie die Unterstützung des aktiven Treibers durch den Patch. Ein Treiberupdate kann ihn überschreiben. Wenden Sie bei unterstützter Version <code>./patch.sh</code> aus <code>/opt/nvidia/nvidia-patch</code> erneut an und prüfen Sie die Ausgabe.",
|
|
"<strong>Die GPU reagiert nach Leerlauf nicht mehr:</strong> Prüfen Sie <code>systemctl status nvidia-persistenced</code> und aktivieren Sie den Dienst bei Bedarf. Prüfen Sie auch Kernel- und Treiberprotokolle; ein gestoppter Persistenzdienst ist nicht die einzig mögliche Ursache.",
|
|
"<strong>Der Container startet, aber <code>ls /dev/nv*</code> zeigt keine NVIDIA-Geräte:</strong> Prüfen Sie Bind-Mounts und Gerätepfade auf dem Host. Ermitteln Sie mit <code>ls -l /dev/nv*</code> die NVIDIA-Major-Nummern und prüfen Sie Regeln für <code>lxc.cgroup2.devices.allow</code> sowie Dateirechte."
|
|
]
|
|
}
|
|
}
|