mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-11-02 19:02:31 +00:00
docs: review GPU and Coral guides in all seven translations
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Coral TPU zu LXC hinzufügen | ProxMenux-Dokumentation",
|
||||
"description": "Google Coral TPU per USB oder M.2 / PCIe in einem Proxmox-LXC nutzen. ProxMenux konfiguriert Geräte, Berechtigungen und Einhängepunkte, startet den Container und installiert die Edge-TPU-Laufzeit auf unterstützten Distributionen."
|
||||
},
|
||||
"header": {
|
||||
"title": "Coral TPU zu LXC hinzufügen",
|
||||
"description": "Coral USB Accelerator oder M.2 / Mini-PCIe in einem LXC nutzen. ProxMenux übernimmt Container-Konfiguration und Edge-TPU-Laufzeit. Diese Option betrifft nur die TPU; für Quick Sync, VA-API oder NVENC führen Sie zusätzlich GPU zu LXC hinzufügen aus.",
|
||||
"section": "Hardware: GPUs und Coral-TPU"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Funktionsweise",
|
||||
"body": "Schreibt die Konfiguration für <strong>USB Accelerator</strong>, <strong>M.2 / PCIe Coral</strong> oder beide in <code>/etc/pve/lxc/<ctid>.conf</code>. Startet den Container und installiert Googles <code>libedgetpu</code>-Laufzeit. GPU-Zugriff wird getrennt über <lxcGpuLink>GPU zu LXC hinzufügen</lxcGpuLink> eingerichtet."
|
||||
},
|
||||
"whenUse": {
|
||||
"heading": "Anwendungsfälle",
|
||||
"body": "Für <frigateLink>Frigate</frigateLink> oder andere kompatible Linux-Erkennungssoftware im LXC. Coral übernimmt unterstützte ML-Inferenz statt der CPU. Die Leistung hängt von Modell und Hardware ab; Videodekodierung und weitere Aufgaben benötigen weiterhin Ressourcen."
|
||||
},
|
||||
"prereqs": {
|
||||
"title": "Vorbereitung",
|
||||
"drivers": "<strong>Coral auf dem Host vorbereiten</strong>. M.2 / PCIe benötigt den geladenen Host-Treiber, USB den Gerätezugriff mit passenden Berechtigungen. Siehe <hostLink>Coral TPU auf dem Host installieren</hostLink>. Die Anwendungslaufzeit muss im Container vorhanden sein.",
|
||||
"driversCheck": "ls /dev/apex_* 2>/dev/null ; lsusb | grep -E '1a6e:089a|18d1:9302'",
|
||||
"container": "<strong>Vorhandener LXC-Container</strong>, vorzugsweise auf Basis von <strong>Debian / Ubuntu</strong>: Die Installation nutzt <code>apt-get</code>. <strong>Container anderer Distributionen</strong> können den <strong>reinen Passthrough-Modus</strong> nutzen, der die APT-Installation von <code>libedgetpu</code> überspringt. Geeignet, wenn die Anwendung die Laufzeit bereits mitbringt, etwa das Frigate-Docker-Image.",
|
||||
"downtime": "<strong>Kurze Ausfallzeit einplanen</strong>. Das Skript stoppt den Container für die Konfiguration und startet ihn zur Laufzeitinstallation. Für diese Änderungen ist kein Host-Neustart nötig."
|
||||
},
|
||||
"hostPrep": {
|
||||
"title": "Host muss zuerst vorbereitet werden",
|
||||
"body": "M.2 / PCIe benötigt <code>gasket</code>/<code>apex</code> auf dem Host und einen funktionierenden Geräteknoten. USB benötigt das angeschlossene Gerät und Berechtigungen; die App muss nicht auf dem Host laufen. <code>libedgetpu</code> muss am Ausführungsort der App vorhanden sein. Reihenfolge: <strong>Host vorbereiten → LXC-Gerätezugriff → App einrichten</strong>."
|
||||
},
|
||||
"running": {
|
||||
"heading": "Skript ausführen",
|
||||
"body": "Öffnen Sie in ProxMenux <strong>Hardware: GPUs und Coral-TPU → Coral TPU zu LXC hinzufügen</strong>.",
|
||||
"imageAlt": "Menüpunkt Coral TPU zu LXC hinzufügen im Hardware-Menü"
|
||||
},
|
||||
"howRuns": {
|
||||
"heading": "Ablauf des Skripts",
|
||||
"body": "Wählen Sie den Container. Das Skript richtet USB-Zugriff auch ohne angeschlossene USB-Coral ein und ergänzt M.2 / PCIe bei erkannter Hardware."
|
||||
},
|
||||
"walkthrough": {
|
||||
"heading": "Schritt für Schritt",
|
||||
"pick": {
|
||||
"title": "LXC-Container auswählen",
|
||||
"body": "Die Auswahl zeigt geeignete Container aus <code>pct list</code>; OCI-Container werden ausgeblendet und über Apps im OCI-Manager verwaltet. Wählen Sie einen laufenden oder gestoppten Container. Das Skript stoppt ihn bei Bedarf, konfiguriert ihn und startet die Laufzeitinstallation."
|
||||
},
|
||||
"gpuHint": {
|
||||
"title": "Optionaler Hinweis zum GPU-Zugriff",
|
||||
"body": "Wird eine GPU ohne Container-Zuordnung erkannt, empfiehlt ein Dialog <lxcGpuLink>GPU zu LXC hinzufügen</lxcGpuLink> für Videodekodierung, etwa Quick Sync, VA-API oder NVDEC. Die Frage lautet, ob nur Coral eingerichtet werden soll: Ja setzt fort, Nein beendet den Ablauf für die vorherige GPU-Einrichtung."
|
||||
},
|
||||
"usb": {
|
||||
"title": "USB-Zugriff im LXC konfigurieren",
|
||||
"body": "Erstellt auf dem Host eine udev-Regel für <code>/dev/coral</code> und bindet den <strong>gesamten</strong> Baum <code>/dev/bus/usb</code> in den Container ein. Diese Konfiguration wird auch ohne angeschlossene USB-Coral geschrieben und stellt mehr als nur dieses Gerät bereit.",
|
||||
"whyTitle": "Warum /dev/bus/usb statt /dev/coral?",
|
||||
"whyBody": "Der USB-Pfad, etwa <code>/dev/bus/usb/001/005</code>, ändert sich beim Umstecken. Ältere Versionen banden den Link <code>/dev/coral</code> ein und konnten dadurch einen veralteten Pfad behalten. Der gesamte USB-Baum macht den aktuellen Geräteknoten sichtbar. Die Anwendung muss es gegebenenfalls erneut öffnen."
|
||||
},
|
||||
"pcie": {
|
||||
"title": "M.2-/PCIe-Zugriff im LXC konfigurieren",
|
||||
"body1": "Bei erkannter M.2-/PCIe-Coral und vorhandenem <code>/dev/apex_0</code> nutzt das Skript die Proxmox-API <code>dev</code> für cgroup2-Berechtigungen in privilegierten und unprivilegierten LXC:",
|
||||
"body2": "Wenn nach <hostLink>Coral auf dem Host installieren</hostLink> noch kein <code>/dev/apex_0</code> existiert, wird die klassische cgroup2-Konfiguration mit optionalem Bind-Mount und <code>create=file</code> verwendet. Das erzeugt allein noch kein funktionsfähiges Gerät:",
|
||||
"rebootTitle": "Starten Sie den Host zuerst neu, wenn Sie gerade Coral-Treiber installiert haben",
|
||||
"rebootBody": "Der Ersatz-Mount lädt den Host-Treiber <code>apex</code> nicht. Laden Sie ihn oder starten Sie nach der Installation neu und prüfen Sie das Gerät. Führen Sie das Skript danach erneut für den modernen Geräteeintrag aus und starten Sie den Container neu."
|
||||
},
|
||||
"drivers": {
|
||||
"title": "LXC starten und Coral-Laufzeit installieren",
|
||||
"body": "Startet den Container und wartet bis zu 15 Sekunden auf den Status running. Anschließend führt es den Installer über <code>pct exec</code> im Container aus. Dieser:",
|
||||
"items": [
|
||||
"Führt <code>apt-get update</code> aus.",
|
||||
"Installiert die Voraussetzungen für das Coral-Repository: <code>gnupg</code>, <code>curl</code>, <code>ca-certificates</code>.",
|
||||
"Importiert Googles Coral GPG-Schlüssel in <code>/etc/apt/keyrings/coral-edgetpu.gpg</code> (moderner Pfad, wie er vom Host-Installationsprogramm verwendet wird) und fügt das <code>coral-edgetpu-stable</code> APT-Repository mit <code>signed-by=</code> hinzu.",
|
||||
"Installiert standardmäßig <code>libedgetpu1-std</code>. Bei erkannter M.2-Coral stehen <code>libedgetpu1-std</code> und <code>libedgetpu1-max</code> zur Wahl. Die Paketauswahl richtet die Erkennung in der Anwendung nicht automatisch ein."
|
||||
],
|
||||
"noIgpuTitle": "Warum werden hier keine iGPU-Treiber installiert?",
|
||||
"noIgpuBody": "Früher installierte es zusätzlich <code>va-driver-all</code>, <code>intel-opencl-icd</code> und weitere Intel-Pakete für Quick Sync neben Coral. Das führte zu verwirrenden Fehlern bei reiner Coral-Nutzung. Die iGPU richtet nun <lxcGpuLink>GPU zu LXC hinzufügen</lxcGpuLink> ein; führen Sie dies für Hardware-Videodekodierung zuerst aus.",
|
||||
"debianTitle": "Andere Distributionen: nur Gerätezugriff",
|
||||
"debianBody": "Nutzt <code>apt-get</code> unter Debian/Ubuntu. Bei <strong>Alpine, Arch, RHEL oder SUSE</strong>, erkannt über <code>/etc/os-release</code>, stehen <em>nur Gerätezugriff einrichten</em> und <em>abbrechen</em> zur Wahl. Ersteres schreibt <code>/etc/pve/lxc/<ctid>.conf</code>, ohne <code>libedgetpu</code> zu installieren. Bringt die App die Laufzeit mit, wie Frigate Docker, genügt dieser Modus. Sonst installieren Sie <code>libedgetpu</code> nach <coralLink>Googles offizieller Anleitung</coralLink>."
|
||||
},
|
||||
"summary": {
|
||||
"title": "Zusammenfassung",
|
||||
"body": "Am Ende zeigt eine Checkliste Coral USB und M.2 mit ✓ oder ⚠ je nach Hardware-Erkennung. Der Container läuft weiter, damit Sie Frigate, CodeProject.AI oder Ihre Anwendung konfigurieren können."
|
||||
}
|
||||
},
|
||||
"manual": {
|
||||
"heading": "Manuelle Vorgehensweise",
|
||||
"body": "Wenn Sie genau sehen möchten, was in die LXC-Konfiguration geht, oder es von Hand anwenden:",
|
||||
"usbHeading": "USB Coral",
|
||||
"pcieHeading": "M.2 / PCIe Coral",
|
||||
"runtimeHeading": "Im Container: Coral-Laufzeit"
|
||||
},
|
||||
"verification": {
|
||||
"heading": "Überprüfung",
|
||||
"body": "Öffnen Sie eine Shell im Container und prüfen Sie, ob Coral sichtbar ist:"
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Fehlerbehebung",
|
||||
"apexTitle": "LXC gestartet, aber /dev/apex_0 fehlt",
|
||||
"apexBody": "Host-Treiber prüfen: <code>lsmod | grep apex</code>. Falls nicht geladen, versuchen Sie <code>modprobe apex</code> oder starten nach der Treiberinstallation neu. Sobald <code>/dev/apex_0</code> auf dem Host existiert, prüfen Sie den LXC-Geräteeintrag und starten mit <code>pct stop <ctid> && pct start <ctid></code> neu.",
|
||||
"replugTitle": "USB-Coral verschwindet nach Anschluss an einen anderen Port",
|
||||
"replugBody": "Prüfen Sie, ob der LXC <code>/dev/bus/usb</code> statt des Links <code>/dev/coral</code> einbindet. Die Konfiguration sollte <code>lxc.mount.entry: /dev/bus/usb dev/bus/usb ...</code> enthalten und nicht direkt von <code>/dev/coral</code> abhängen. Führen Sie bei alten Konfigurationen das Skript erneut aus.",
|
||||
"alpineTitle": "Alpine / Arch / RHEL / SUSE: Laufzeit nicht installiert",
|
||||
"alpineBody": "Im <em>reinen Passthrough-Modus</em> wird das Gerät konfiguriert, aber <code>libedgetpu</code> nicht installiert. Nutzen Sie ein kompatibles Community-Paket oder bauen Sie aus dem Quellcode; prüfen Sie vor Befehlen wie Alpines <code>apk add</code> die Paketverfügbarkeit. Frigate kann die Laufzeit mitbringen. Bei Docker im LXC zusätzlich M.2 mit <code>--device /dev/apex_0:/dev/apex_0</code> durchreichen oder den USB-Baum in Docker einbinden; der LXC-Mount allein reicht nicht.",
|
||||
"frigateTitle": "Frigate meldet „Coral EdgeTPU detected but not available“",
|
||||
"frigateBody": "Prüfen Sie Laufzeit, Gerätesichtbarkeit und Lese-/Schreibrechte des tatsächlichen App-Prozesses. Bei USB Berechtigungen und gegebenenfalls <code>plugdev</code>-Mitgliedschaft prüfen. Bei M.2 <code>/dev/apex_0</code> mit <code>ls -l /dev/apex_0</code> prüfen. Ein Name wie <code>apex</code> in <code>/etc/group</code> genügt nicht: Numerische GIDs und LXC-Zuordnungen müssen stimmen. Prüfen Sie auch eine Belegung durch andere Prozesse; wechseln Sie nicht zuerst in den privilegierten Modus.",
|
||||
"logsTitle": "Überprüfen Sie sowohl Host- als auch Containerprotokolle",
|
||||
"logsBody": "Auf dem Host Gerätemeldungen mit <code>journalctl -k | grep -i -e apex -e gasket -e usb</code> prüfen. Im LXC die App-Protokolle lesen; bei verschachteltem Docker <code>docker logs <container></code> nutzen. Ursachen können Berechtigungen, fehlende Laufzeit, USB-Verbindung oder ein anderer TPU-Prozess sein."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Verwandte Themen",
|
||||
"items": [
|
||||
{
|
||||
"label": "Coral TPU auf dem Host installieren",
|
||||
"href": "/docs/hardware/install-coral-tpu-host",
|
||||
"tail": " — Voraussetzung für M.2-/PCIe-Coral-Karten vor der Nutzung im CT."
|
||||
},
|
||||
{
|
||||
"label": "GPU zu LXC hinzufügen",
|
||||
"href": "/docs/hardware/igpu-acceleration-lxc",
|
||||
"tail": " — GPU-Zugriff, der bei Frigate häufig mit Coral kombiniert wird."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,178 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "GPU zu VM hinzufügen | ProxMenux-Dokumentation",
|
||||
"description": "Physische GPU einer Proxmox-VM zuweisen. ProxMenux prüft IOMMU, konfiguriert VFIO und VM-Geräte und erkennt Konflikte mit anderen VMs oder LXC."
|
||||
},
|
||||
"header": {
|
||||
"title": "GPU zu VM hinzufügen (Passthrough)",
|
||||
"description": "Erkennt Intel-, AMD- oder NVIDIA-GPUs und bereitet direkten VM-Zugriff vor. Prüft IOMMU und zugehörige Geräte, konfiguriert VFIO und VM und wendet Kompatibilitätsregeln an. Alle betroffenen Geräte prüfen.",
|
||||
"section": "Hardware: GPUs und Coral-TPU"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Funktionsweise",
|
||||
"body": "Automatisiert Host- und <code>hostpci</code>-Schritte der <pveLink>Proxmox-PCI-Passthrough-Dokumentation</pveLink>. Prüft Zuweisungen in <em>anderen</em> Gästen und bietet Konfliktlösungen. Garantiert keine Unterstützung jeder GPU, Resetmethode oder jedes Gasttreibers."
|
||||
},
|
||||
"who": {
|
||||
"heading": "Für wen ist das?",
|
||||
"body": "Für direkten GPU-Zugriff einer <strong>virtuellen Maschine</strong> über VFIO. Solange die GPU an VFIO gebunden ist, kann der Host-Treiber sie auch bei gestoppter VM nicht nutzen. Für <em>LXC</em>-Freigabe siehe <lxcLink>GPU zu LXC hinzufügen</lxcLink>."
|
||||
},
|
||||
"prereqs": {
|
||||
"title": "Vorbereitung",
|
||||
"gpu": "Physisch installierte <strong>kompatible GPU</strong>. Das Skript erkennt Intel, AMD und NVIDIA mit <code>lspci</code>.",
|
||||
"gpuCheck": "lspci | grep -iE 'VGA|3D|Display'",
|
||||
"iommu": "<strong>IOMMU-Unterstützung</strong> in Hardware und gegebenenfalls Firmware nötig (Intel VT-d oder AMD-Vi). Prüft das laufende System und kann Linux-Bootparameter setzen; ändert kein BIOS/UEFI und beweist bei inaktivem IOMMU keinen Firmwarefehler.",
|
||||
"q35": "Dieser Assistent verlangt <strong>q35</strong> und lehnt <code>i440fx</code> ab. Maschinentyp und BIOS/UEFI-Firmware sind getrennte Einstellungen. Chipsetwechsel bestehender VMs muss geplant werden und erfolgt nicht automatisch.",
|
||||
"q35Check": "qm config VMID | grep machine",
|
||||
"moreGpus": "<strong>Zweite GPU oder alternativen Zugang</strong> über SSH, IPMI oder seriell vorbereiten. Die Haupt-GPU-Zuweisung kann die lokale Anzeige abschalten. Bei <em>NVIDIA</em> kann eine Karte außerhalb der betroffenen IOMMU-Gruppe auf dem Host bleiben.",
|
||||
"nvidiaInstalled": "Nach <nvidiaLink>NVIDIA-Treiberinstallation auf dem Host</nvidiaLink> werden ausgewählte Funktionen für <code>vfio-pci</code> statt <code>nvidia</code> reserviert. Das Modul <code>nvidia</code> kann für <strong>andere</strong> Karten außerhalb der betroffenen IOMMU-Gruppe verfügbar bleiben. Mit <code>nvidia-smi</code> prüfen."
|
||||
},
|
||||
"pickOne": {
|
||||
"title": "Exklusive VM-Zuweisung oder LXC-Freigabe",
|
||||
"body": "Ein GPU, der an <code>vfio-pci</code> für den VM-Durchgang gebunden ist, kann nicht gleichzeitig vom Host oder einem LXC verwendet werden. Wenn Sie zwei GPUs haben, können Sie jedem Pfad eine widmen. Wenn Sie nur eine haben, wählen Sie:",
|
||||
"vmItem": "<strong>VM:</strong> direkter, exklusiver Zugriff für diese VM.",
|
||||
"lxcItem": "<strong>LXC (<lxcLink>GPU zu LXC hinzufügen</lxcLink>):</strong> teilt das Gerät über den nativen Treiber mit Host und anderen Containern."
|
||||
},
|
||||
"running": {
|
||||
"heading": "Installationsprogramm ausführen",
|
||||
"body": "Öffnen Sie ProxMenux und wählen Sie <strong>Hardware: GPUs und Coral-TPU → GPU zu VM hinzufügen</strong>.",
|
||||
"imageAlt": "Menüeintrag zum Hinzufügen einer GPU zur VM"
|
||||
},
|
||||
"howRuns": {
|
||||
"heading": "Ablauf des Skripts",
|
||||
"body": "Erkennung und Auswahl gehen den Hauptänderungen voraus; eine Zusammenfassung bestätigt den Plan. IOMMU-Aktivierung hat zuvor eine eigene Bestätigung und kann bereits Bootdateien ändern. Spätere Audiobereinigung kann ebenfalls eine Auswahl verlangen."
|
||||
},
|
||||
"walkthrough": {
|
||||
"heading": "Schritt für Schritt",
|
||||
"detect": {
|
||||
"title": "GPUs erkennen und IOMMU überprüfen",
|
||||
"body": "Prüft aktives IOMMU, nicht nur Parameter. Separat bestätigt kann <code>intel_iommu=on</code> oder <code>amd_iommu=on</code> mit <code>iommu=pt</code> ergänzt werden. Nutzt <code>/etc/kernel/cmdline</code> bei ZFS-Marker wie <code>root=ZFS=</code>, sonst <code>/etc/default/grub</code>. Dies ist eine Heuristik, kein Bootloadernachweis. Änderung nach Neustart aktiv; tatsächliche Gruppen prüfen.",
|
||||
"tipTitle": "Nachinstallation bereits eingerichtet?",
|
||||
"tipBody": "Bei bereits konfiguriertem und aktivem <postLink>VFIO-IOMMU-Support</postLink> besteht die Prüfung. Eine Einstellung für den nächsten Start allein beweist keinen aktiven Zustand.",
|
||||
"imageAlt": "Liste der erkannten GPUs mit Hersteller- und PCI-Adresse"
|
||||
},
|
||||
"preflight": {
|
||||
"title": "GPU auswählen und Vorabprüfungen ausführen",
|
||||
"intro": "Sobald Sie den GPU ausgewählt haben, führt das Skript eine Reihe von Überprüfungen aus, die jeden weiteren Fortschritt blockieren können:",
|
||||
"items": [
|
||||
"<strong>SR-IOV-Prüfung.</strong> Verweigert VFs und PFs mit aktiven VFs, da dieser Ablauf vollständige Geräte statt SR-IOV einrichtet. SR-IOV auf unterstützter Hardware separat konfigurieren.",
|
||||
"<strong>Nur eine GPU.</strong> Die lokale Konsole kann durch VFIO ihre Ausgabe verlieren. Zuvor SSH- oder Webzugriff von einem anderen Rechner prüfen.",
|
||||
"<strong>AMD-Reset-Richtlinie.</strong> Liest <code>/sys/bus/pci/devices/<pci>/reset_method</code>. APU oder dedizierte Karte ohne FLR wird <em>durch die Assistentenrichtlinie blockiert</em>; unbekannter Untertyp ohne FLR verlangt Bestätigung. Dies beweist keine generelle technische Unmöglichkeit.",
|
||||
"<strong>D3cold-Zustand.</strong> AMD-Karten mit gemeldetem <code>D3cold</code> werden wegen möglicher Aktivierungsfehler blockiert. Stromversorgung und Firmware prüfen.",
|
||||
"<strong>IOMMU-Gruppe.</strong> Liest <code>/sys/kernel/iommu_groups/</code> und plant <em>alle Nicht-Brücken-Geräte</em> ein, auch Netzwerk- oder Speichercontroller. Vor Bestätigung prüfen. Bei ausstehendem IOMMU-Neustart wird zunächst nur die GPU-Funktion eingeplant; Isolation danach prüfen."
|
||||
],
|
||||
"audioIntro": "<strong>Zugehöriges Audio.</strong> Zwei Fälle je nach Controllerposition:",
|
||||
"audioDgpu": "<strong>Dedizierte GPU:</strong> HDMI-Audio liegt oft auf Funktion <code>.1</code> desselben PCI-Slots und wird bei Erkennung aufgenommen. Nutzt der Host es bisher, verliert er durch die VM-Reservierung den Zugriff.",
|
||||
"audioIgpu": "<strong>Ohne Audiofunktion <code>.1</code>:</strong> kann Audio auf einem anderen Gerät wie <code>00:1f.3</code> liegen. Controller mit Treibern wie <code>snd_hda_intel</code> werden gelistet. Standardmäßig <strong>keiner</strong> ausgewählt; nur benötigte wählen."
|
||||
},
|
||||
"pickVm": {
|
||||
"title": "Ziel-VM auswählen",
|
||||
"body": "VM aus der Liste wählen. Der Assistent verlangt q35 und verwendet vorhandene GPU-Einträge soweit möglich weiter. BIOS/UEFI ist eine separate Einstellung, kein Maschinentyp. Chipset und Bootmodus werden nicht automatisch geändert.",
|
||||
"imageAlt": "VM-Auswahl nach Name, ID und Status"
|
||||
},
|
||||
"switchMode": {
|
||||
"title": "Vorhandene Zuweisungen behandeln",
|
||||
"intro": "Das Skript scannt jede VM-Konfiguration und jede LXC-Konfiguration auf dem Host, der nach dem von Ihnen ausgewählten GPU sucht. Drei mögliche Ergebnisse:",
|
||||
"items": [
|
||||
"<strong>GPU verfügbar.</strong> Fortfahren ohne alte Zuweisung zu entfernen.",
|
||||
"<strong>Anderer VM zugewiesen.</strong> Quell-VM zuerst stoppen. Entweder <em>Einträge behalten und Autostart deaktivieren</em> oder <em>Einträge entfernen und Autostart behalten</em>. Bei bestehendem <code>vfio-pci</code> ohne nötige Hoständerungen kann VM→VM ohne Host-Neustart erfolgen.",
|
||||
"<strong>Von LXC genutzt.</strong> Bei normalen Containern <em>Konfiguration behalten und Autostart deaktivieren</em> oder <em>Geräte und alte <code>lxc.cgroup2.devices.allow</code>/<code>lxc.mount.entry</code>-Regeln entfernen, Autostart behalten</em>. OCI behält die Konfiguration und wird ohne Autostart gestoppt; GPU unter Apps entfernen. Familienbasierte Erkennung kann weitere Karten erfassen."
|
||||
],
|
||||
"imageAlt": "Dialogangebot zum Entfernen des GPU aus einem LXC, bevor es dem VM zugewiesen wird",
|
||||
"smartTitle": "Zugehöriges Audio beim Entfernen prüfen",
|
||||
"smartBody": "Danach kann eine Liste <strong>möglicherweise nicht mehr benötigter Audiogeräte</strong> erscheinen. Weiter benötigte abwählen. Beispielsweise bleibt <code>02:00.1</code>, während <code>00:1f.3</code> zur Entfernung angeboten wird. Die Auswahl bestimmt die Entfernung; keine universelle Audio-/Bildzuordnung ist garantiert."
|
||||
},
|
||||
"audioPick": {
|
||||
"title": "Ohne .1-Audio benötigte Controller auswählen",
|
||||
"body": "Dies gilt nur für Intel iGPU und ähnliche Split-Audio-Setups. Eine Checkliste zeigt jeden PCI-Audiocontroller auf dem Host (mit Ausnahme eines bereits in der IOMMU-Gruppe von GPU) mit seinem aktuellen Treiber. Wählen Sie die gewünschten aus - oder keine, wenn der VM kein Audio von der Host-Hardware benötigt.",
|
||||
"imageAlt": "Checklistendialog mit jedem Host-PCI-Audiocontroller (BDF + Treiber), wenn der GPU kein .1-Geschwister-Audio hat",
|
||||
"warnTitle": "Kein vom Host benötigtes Audio auswählen",
|
||||
"warnBody": "Audiozuweisung kann dem Host den Zugriff nehmen; derselbe Controller kann nicht gleichzeitig einer anderen laufenden VM gehören. Unnötiges Audio nicht wählen und Zuweisungen prüfen. Der Konsolenpiep kommt nicht zwingend von PCI-Audio."
|
||||
},
|
||||
"summary": {
|
||||
"title": "Überprüfung der Bestätigungszusammenfassung",
|
||||
"body": "Endplan und besonders alle IOMMU-Mitglieder prüfen; bei Fehlern abbrechen. Das verhindert die Hauptänderungen, macht aber eine zuvor bestätigte IOMMU-Bootänderung nicht rückgängig.",
|
||||
"imageAlt": "Übersicht geplanter Änderungen an Host und VM"
|
||||
},
|
||||
"hostApply": {
|
||||
"title": "Host Änderungen werden angewendet",
|
||||
"intro": "Die Anwendung ändert Host und VM. Zugehörige Audiobereinigung kann weiterhin eine Auswahl verlangen. Mögliche Hoständerungen:",
|
||||
"items": [
|
||||
"<code>/etc/modules</code> — fügt <code>vfio</code>, <code>vfio_iommu_type1</code>, <code>vfio_pci</code> hinzu (plus <code>vfio_virqfd</code> auf Kernen < 6.2).",
|
||||
"<code>/etc/modprobe.d/vfio.conf</code> — AMD/Intel: <code>options vfio-pci ids=<vendor:device,...> disable_vga=1</code>. NVIDIA: <code>softdep nvidia pre: vfio-pci</code> (<code>_drm</code>/<code>_modeset</code>/<code>_uvm</code>); die eigentliche Bindung erfolgt pro BDF. AMD ergänzt die Ladereihenfolge <code>softdep</code>: <code>vfio-pci</code> → <code>radeon</code>/<code>amdgpu</code>.",
|
||||
"Schreibt <code>/etc/modprobe.d/iommu_unsafe_interrupts.conf</code> und <code>kvm.conf</code> mit <code>allow_unsafe_interrupts=1</code> und <code>ignore_msrs=1</code>. Kompatibilitätseinstellungen des Skripts, keine allgemeinen Windows/macOS-Anforderungen; unsichere Interrupts schwächen den Interrupt-Remapping-Schutz.",
|
||||
"<code>/etc/modprobe.d/blacklist.conf</code>: NVIDIA — <code>nouveau</code>/<code>lbm-nouveau</code>; AMD — <code>radeon</code> + <code>amdgpu</code>; Intel — <code>i915</code>. Diese herstellerweiten Regeln können andere Karten mit demselben Treiber betreffen. Das Modul <code>nvidia</code> wird <strong>nur</strong> über <code>/etc/modprobe.d/proxmenux-nvidia-vfio-blacklist.conf</code> blockiert, wenn <em>alle</em> NVIDIA-Karten für VFIO erfasst sind.",
|
||||
"<code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> + <code>/etc/proxmenux/vfio-bind.bdfs</code> — <strong>Nur NVIDIA.</strong> Setzt <code>ATTR'{'driver_override'}'=\"vfio-pci\"</code> bei PCI ADD für erfasste BDFs einschließlich betroffener IOMMU-Gruppenfunktionen. Außerhalb kann <code>nvidia</code> erhalten bleiben. BDF-Regeln teilen keine Hardware-IOMMU-Gruppe.",
|
||||
"<strong>Nur AMD.</strong> Versucht ROM aus <code>/sys/bus/pci/.../rom</code> oder ACPI VFCT nach <code>/usr/share/kvm/vbios_<card>.bin</code> zu sichern. Bei Erfolg nutzt die VM <code>romfile=</code>. Ein gültiges ROM garantiert keine Initialisierung.",
|
||||
"<strong>Nur NVIDIA.</strong> Stoppt und deaktiviert <code>nvidia-persistenced</code>, <code>nvidia-powerd</code>, <code>nvidia-fabricmanager</code> nur, wenn alle NVIDIA-Karten VFIO zugeordnet sind. Im Mischbetrieb bleiben Dienste und <code>nvidia</code> für native Karten erhalten.",
|
||||
"<code>update-initramfs -u -k all</code> — läuft nur, wenn einer der oben genannten tatsächlich geändert."
|
||||
]
|
||||
},
|
||||
"vmApply": {
|
||||
"title": "VM config wird über qm set angewendet",
|
||||
"body": "Die VM-Konfiguration bei <code>/etc/pve/qemu-server/<vmid>.conf</code> wird über <code>qm set</code> aktualisiert (nie direkt über <code>sed</code>):",
|
||||
"after1": "Setzt <code>x-vga=1</code> für AMD und NVIDIA, <strong>nicht</strong> Intel. Dies ist die Skriptrichtlinie und kein Beleg, dass jeder Intel-iGPU Firmware fehlt oder das Flag immer Hänger verursacht.",
|
||||
"after2": "Zusätzliche <code>hostpciN</code>-Leitungen werden angehängt, wenn die IOMMU-Gruppe des GPU andere Geräte enthält, die Sie zusammen übergeben müssen."
|
||||
},
|
||||
"reboot": {
|
||||
"title": "Bei erforderlicher Hoständerung neu starten",
|
||||
"body": "Neustarthinweise bei Boot- oder Treiberänderungen befolgen und aktive GPU-Bindung vor VM-Start prüfen. Gespeicherte Konfiguration beweist keine aktive Anwendung. VM→VM mit korrektem VFIO kann ohne Host-Neustart erfolgen.",
|
||||
"imageAlt": "Zusammenfassungsbildschirm zeigt, was geändert wurde, gefolgt von einer Neustartaufforderung"
|
||||
}
|
||||
},
|
||||
"vendors": {
|
||||
"heading": "Herstellerspezifische Hinweise",
|
||||
"nvidiaHeading": "NVIDIA",
|
||||
"nvidiaBody": "Behält einen älteren <em>Code-43</em>-Workaround: <code>hidden=1</code>, ID <code>NV43FIX</code> in <code>args</code> und <code>kvm=off</code>. Kein allgemeines Erfordernis aktueller GeForce-Treiber: NVIDIA aktivierte Windows-VM-Passthrough ab R465. Der Fehler kann andere Ursachen haben; Kombination prüfen.",
|
||||
"nvidiaMultiHeading": "Multi-GPU NVIDIA Unterstützung",
|
||||
"nvidiaMultiBody": "Gemischte NVIDIA-Nutzung <strong>pro BDF</strong>. Erfasst Funktionen für <code>vfio-pci</code> nach Adresse statt nur <code>vendor:device</code>. Außerhalb betroffener Gruppen kann <code>nvidia</code> bleiben; mit <code>nvidia-smi</code> prüfen. Karten derselben Gruppe werden dadurch nicht isoliert.",
|
||||
"amdHeading": "AMD",
|
||||
"amdBody": "Manche AMD-GPUs lassen sich nach VM-Stopp nicht zurücksetzen. Der Assistent prüft gemeldete Fähigkeiten, nicht alle realen Zyklen. <vendorResetLink>vendor-reset</vendorResetLink> unterstützt begrenzte Geräte, kompatible Kernel und frühes Laden; wird nicht installiert. <em>RadeonResetBugFix</em> unter Windows ist ebenfalls hardwareabhängig, keine allgemeine Lösung.",
|
||||
"intelHeading": "Intel iGPU",
|
||||
"intelBody": "Vollständiges Intel-iGPU-Passthrough und SR-IOV sind getrennte Abläufe. Dieser Assistent reserviert das Gerät für eine VM ohne <code>x-vga=1</code>. <sriovLink>i915-sriov-dkms</sriovLink> verlangt unterstützte Hardware/Kernel; „UHD 630+“ ist keine Kompatibilitätsregel. Alternativen Host-Zugang planen."
|
||||
},
|
||||
"verification": {
|
||||
"heading": "Überprüfung"
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Fehlerbehebung",
|
||||
"code43Title": "Code 43 in Windows (NVIDIA)",
|
||||
"code43Body": "Code 43 beweist keinen KVM-Versteckfehler. <code>qm config VMID | grep -E \"cpu|args\"</code> mit echter VMID prüfen, ebenso <code>hidden=1</code> und <code>hv_vendor_id=NV43FIX</code>. Auch Gasttreiber, Firmware und Zuweisung prüfen. Erneutes Ausführen kann bei vorhandener Zuweisung sofort enden.",
|
||||
"amdResetTitle": "AMD GPU funktioniert einmal, schlägt beim Neustart von VM fehl",
|
||||
"amdResetBody": "Resetfehler sind eine mögliche Ursache. Host-Neustart oder Aus-/Einschalten kann vorübergehend helfen. Unterstützung und frühes Laden von <code>vendor-reset</code> prüfen; <code>softdep amdgpu pre: vendor-reset</code> allein garantiert kein Laden vor VFIO. Auch <em>RadeonResetBugFix</em> unter Windows benötigt kompatible Hardware.",
|
||||
"stuckBootTitle": "VM hängengebliebenes Booten / GPU nicht erkannt",
|
||||
"stuckBootBody": "Reale Adresse mit <code>lspci -nnk -s PCI_ADDRESS</code> prüfen; erwartet <code>Kernel driver in use: vfio-pci</code>. PCI_ADDRESS ersetzen. Bei nativem Treiber Bindungspolitik prüfen, nicht nur <code>/etc/modprobe.d/blacklist.conf</code>; NVIDIA nutzt BDF-Status. <code>dmesg | grep vfio</code> lesen. Nach Korrektur <code>update-initramfs -u -k all</code> und Neustartplan befolgen.",
|
||||
"darkTitle": "Host-Konsole wird nach dem Neustart dunkel und ich kann SSH nicht in",
|
||||
"darkBody": "Schwarzes Bild bedeutet nicht, dass der Host ausgefallen ist. Bei SSH-Ausfall Netzwerk und Controller in der IOMMU-Gruppe prüfen. Über IPMI, seriell oder Rettungsumgebung zugreifen; <code>/etc/pve/qemu-server/<vmid>.conf</code> prüfen und nur relevante Zuweisungen/Bindungen zurücknehmen. Keine fremde Konfiguration löschen.",
|
||||
"logTitle": "Überprüfen Sie das Installationsprotokoll",
|
||||
"logBody": "Jeder Durchlauf schreibt <code>/tmp/add_gpu_vm.log</code>. Bei Hilfsanfragen beifügen."
|
||||
},
|
||||
"revert": {
|
||||
"heading": "Änderungen manuell zurücknehmen",
|
||||
"intro": "VM stoppen und nur relevante PCI-Zuweisungen unter Hardware oder mit dem gezeigten Index entfernen. Das gibt die GPU noch nicht dem nativen Host-Treiber zurück. Dafür GPU-Modus wechseln verwenden und betroffene Gäste vor Bestätigung prüfen."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Verwandte Themen",
|
||||
"items": [
|
||||
{
|
||||
"label": "Installieren Sie NVIDIA Treiber (Host)",
|
||||
"href": "/docs/hardware/nvidia-host",
|
||||
"tail": " — Host-Treiber für nativ verbleibende Karten vorbereiten; eine VFIO-GPU kann ihn nicht gleichzeitig nutzen."
|
||||
},
|
||||
{
|
||||
"label": "GPU zu LXC hinzufügen",
|
||||
"href": "/docs/hardware/igpu-acceleration-lxc",
|
||||
"tail": "Alternatives Modell: Teilen Sie den GPU mit mehreren Containern, anstatt ihn einem VM zu widmen."
|
||||
},
|
||||
{
|
||||
"label": "GPU-Modus wechseln (VM ↔ LXC)",
|
||||
"href": "/docs/hardware/switch-gpu-mode",
|
||||
"tail": " — dieselbe GPU zwischen Freigabe und exklusiver Zuweisung wechseln."
|
||||
},
|
||||
{
|
||||
"label": "GPU Durchgangsbefehle",
|
||||
"href": "/docs/help-info/gpu-commands",
|
||||
"tail": " — lspci, IOMMU-Prüfung und Referenz zu qm set hostpci."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,185 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "GPU zu LXC hinzufügen | ProxMenux-Dokumentation",
|
||||
"description": "Intel-, AMD- oder NVIDIA-GPU mit LXC teilen. ProxMenux richtet Geräte, Gruppen und Bibliotheken passend zur Distribution ein; die App muss Beschleunigung unterstützen und entsprechend eingerichtet sein."
|
||||
},
|
||||
"header": {
|
||||
"title": "GPU zu LXC hinzufügen",
|
||||
"description": "GPU-Zugriff über Host-Geräteknoten mit LXC teilen. Der Treiber bleibt auf dem Host; Anwendungen brauchen kompatible Bibliotheken und eigene Einstellungen.",
|
||||
"section": "Hardware: GPUs und Coral-TPU"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Funktionsweise",
|
||||
"body": "Fügt <code>dev<N></code> zu <code>/etc/pve/lxc/<ctid>.conf</code> für passende <code>/dev/dri/*</code>-, <code>/dev/kfd</code>- oder <code>/dev/nvidia*</code>-Geräte hinzu. Startet den Container, installiert distributionsabhängige Bibliotheken und gleicht <code>video</code> und <code>render</code> ab. Beschleunigung erfordert kompatible Hardware, Bibliotheken und App-Einstellungen."
|
||||
},
|
||||
"compare": {
|
||||
"heading": "LXC-Freigabe und VM-Passthrough im Vergleich",
|
||||
"intro": "LXC teilt den Kernel und kann die GPU zwischen Host und Containern <em>teilen</em>. Bei <vmLink>vollständigem VM-Passthrough</vmLink> gehört das Gerät exklusiv zur VM und steht dem Host-Treiber nicht zur Verfügung.",
|
||||
"headerFeature": "Merkmal",
|
||||
"headerLxc": "LXC (diese Seite)",
|
||||
"headerVm": "VM",
|
||||
"rows": [
|
||||
{
|
||||
"feature": "Kann der Host die GPU weiter nutzen?",
|
||||
"lxc": "Ja",
|
||||
"vm": "Nein — ausschließlich für VM"
|
||||
},
|
||||
{
|
||||
"feature": "Mehrere Container teilen sich einen GPU?",
|
||||
"lxc": "Ja",
|
||||
"vm": "Nein"
|
||||
},
|
||||
{
|
||||
"feature": "Benötigt IOMMU / VFIO auf dem Host?",
|
||||
"lxc": "Nein",
|
||||
"vm": "Ja"
|
||||
},
|
||||
{
|
||||
"feature": "Reboot erforderlich?",
|
||||
"lxc": "Normalerweise nein (neustarten Sie einfach den CT)",
|
||||
"vm": "Bei Änderungen am Host-Treiber oder IOMMU; nicht bei jeder Zuweisung"
|
||||
},
|
||||
{
|
||||
"feature": "Gastbetriebssysteme",
|
||||
"lxc": "Nur Linux (LXC ist nur Linux)",
|
||||
"vm": "Unterstütztes Gastsystem mit kompatiblem GPU-Treiber"
|
||||
}
|
||||
]
|
||||
},
|
||||
"prereqs": {
|
||||
"title": "Vorbereitung",
|
||||
"gpu": "<strong>GPU auf dem Host</strong> von Intel, AMD oder NVIDIA, erkannt mit <code>lspci</code>.",
|
||||
"gpuCheck": "lspci | grep -iE 'VGA|3D|Display'",
|
||||
"vfio": "<strong>Die GPU darf nicht an vfio-pci gebunden sein.</strong> Sie benötigt den nativen Host-Treiber. Bei VM-Zuweisung bietet das Skript <switchLink>GPU-Modus wechseln</switchLink> an.",
|
||||
"nvidia": "<strong>Für NVIDIA:</strong> zuerst den Host-Treiber installieren. Die Containerbibliotheken müssen zur Version passen. Siehe <nvidiaLink>NVIDIA-Treiber auf dem Host installieren</nvidiaLink>.",
|
||||
"nvidiaCheck": "nvidia-smi",
|
||||
"container": "<strong>Vorhandener LXC-Container.</strong> Das Skript erstellt keinen. Beide Modi werden unterstützt; <strong>privilegiert</strong> ist nicht grundsätzlich nötig. Geräteeinträge und numerische App-Gruppenrechte müssen passen."
|
||||
},
|
||||
"unpriv": {
|
||||
"title": "Unterstützt privilegierte und unprivilegierte Container",
|
||||
"body": "Das Skript schreibt <code>dev<N></code>-Einträge in die LXC-Konfiguration und richtet auf unprivilegierten Containern die <code>video</code>- und <code>render</code>-GIDs zwischen Host und Container so aus, dass die GPU-Geräteknoten von innen erreichbar sind, ohne dass Sie <code>lxc.idmap</code> von Hand bearbeiten müssen."
|
||||
},
|
||||
"running": {
|
||||
"heading": "Installationsprogramm ausführen",
|
||||
"body": "Öffnen Sie ProxMenux und wählen Sie <strong>Hardware: GPUs und Coral-TPU → GPU zu LXC hinzufügen</strong>.",
|
||||
"imageAlt": "Menüeintrag zum Hinzufügen einer GPU zu LXC"
|
||||
},
|
||||
"howRuns": {
|
||||
"heading": "Ablauf des Skripts",
|
||||
"body": "Container und GPU-Familien auswählen und Prüfungen durchlaufen. Danach wird der Container ohne weitere Abschlussbestätigung gestoppt und geändert. Optionale VFIO-Bereinigung wird separat bestätigt und kann den Host vorher ändern."
|
||||
},
|
||||
"walkthrough": {
|
||||
"heading": "Schritt für Schritt",
|
||||
"detect": {
|
||||
"title": "Host-GPUs erkennen",
|
||||
"body": "Sucht GPU-Controller mit <code>lspci</code>. Prüft für NVIDIA das Modul <code>nvidia</code> und <code>nvidia-smi</code>; die erkannte Version bestimmt den <code>.run</code>-Installer für den Container.",
|
||||
"tipTitle": "NVIDIA nicht bereit?",
|
||||
"tipBody": "Wenn Modul oder NVIDIA-Funktion auf dem Host fehlen, zuerst <nvidiaLink>NVIDIA-Treiber auf dem Host installieren</nvidiaLink> und den Treiber prüfen."
|
||||
},
|
||||
"pickCt": {
|
||||
"title": "LXC-Container auswählen",
|
||||
"body": "Listet geeignete LXC-Container mit ID und Name. OCI-Container fehlen bewusst; ihre Geräte werden unter Apps im OCI-Manager geändert. Der Container wird zur Konfiguration gestoppt, zur Installation gestartet und normalerweise in den Ausgangszustand zurückversetzt.",
|
||||
"imageAlt": "Auswahl eines vorhandenen LXC-Containers"
|
||||
},
|
||||
"selectGpu": {
|
||||
"title": "GPU-Familien auswählen",
|
||||
"body": "Die Liste wählt Herstellerfamilien, kein isoliertes PCI-Gerät. Intel/AMD fügen die vorgesehenen DRI-Knoten hinzu; NVIDIA seine verfügbaren Geräteknoten, möglicherweise für mehrere Karten. Eine einzelne Familie wird automatisch gewählt. Ergebnis besonders bei mehreren GPUs prüfen.",
|
||||
"imageAlt": "Liste erkannter GPU-Familien mit Name und PCI-Adresse"
|
||||
},
|
||||
"preflight": {
|
||||
"title": "Vorabprüfungen",
|
||||
"imageAlt": "Angebot zum Moduswechsel einer an vfio-pci gebundenen GPU",
|
||||
"intro": "Drei Prüfungen können den Ablauf stoppen oder umleiten:",
|
||||
"items": [
|
||||
"<strong>SR-IOV-Prüfung.</strong> Der Assistent blockiert eine VF oder PF mit aktiven VFs. Das liegt an seiner breiten Geräteauswahl und ist kein generelles LXC-Verbot. Solche Geräte separat konfigurieren.",
|
||||
"<strong>An vfio-pci gebunden.</strong> Der native Treiber kann keine <code>/dev/dri/*</code>- oder <code>/dev/nvidia*</code>-Geräte anlegen. <switchLink>GPU-Modus wechseln</switchLink> wird angeboten; Neustarthinweise befolgen und erneut starten.",
|
||||
"<strong>Bereits eingerichtet.</strong> Sind alle Geräte vorhanden, beendet das Skript sich ohne Bibliotheks-Neuinstallation. Fehlende ausgewählte Familien werden weiter bearbeitet."
|
||||
]
|
||||
},
|
||||
"applyConfig": {
|
||||
"title": "Anwenden der LXC-Konfigurationsänderungen",
|
||||
"body1": "Stoppt den Container und bearbeitet <code>/etc/pve/lxc/<ctid>.conf</code>. <code>dev<N></code>-Einträge enthalten die gewählten GIDs. Der <code>dev:</code>-Mechanismus ersetzt hier manuelle <code>lxc.mount.entry</code>-Regeln. Ergebnis und Rechte prüfen.",
|
||||
"body2": "Beispiel nach Intel + NVIDIA auf demselben Container:"
|
||||
},
|
||||
"installDrivers": {
|
||||
"title": "Starten Sie den Container und installieren Sie Treiber im Inneren",
|
||||
"body": "Startet den Container und wartet bis zu etwa 30 Sekunden auf <code>pct exec</code>. Erkennt die Distribution aus <code>/etc/os-release</code> und installiert passende Pakete.",
|
||||
"headerDistro": "Distribution",
|
||||
"headerInt": "Intel / AMD",
|
||||
"headerNvidia": "NVIDIA",
|
||||
"rows": [
|
||||
{
|
||||
"distro": "Alpine",
|
||||
"intel": "apk add mesa-va-gallium intel-media-driver libva-utils",
|
||||
"nvidia": "apk add nvidia-utils"
|
||||
},
|
||||
{
|
||||
"distro": "Arch / Manjaro",
|
||||
"intel": "pacman -Sy intel-media-driver mesa libva-utils",
|
||||
"nvidia": "pacman -Sy nvidia-utils"
|
||||
}
|
||||
],
|
||||
"debianDistro": "Debian / Ubuntu / andere",
|
||||
"debianIntel": "apt-get install va-driver-all intel-opencl-icd vainfo",
|
||||
"debianNvidia": "<code>.run</code> auf dem Host entpacken → <code>pct push</code> → mit <code>--no-kernel-modules --no-dkms</code> installieren.",
|
||||
"whyTitle": "Warum Debian den NVIDIA-.run-Installer nutzt",
|
||||
"whyBody": "Repository-Pakete passen möglicherweise nicht zum Host. Bibliotheken <strong>müssen zum geladenen Host-Modul passen</strong>, etwa für <code>nvidia-smi</code>. Debian/glibc nutzt den zwischengespeicherten <code>.run</code>-Installer der Host-Version, entpackt und archiviert ihn auf dem Host, überträgt mit <code>pct push</code> und installiert mit <code>--no-kernel-modules --no-dkms</code>. Alpine und Arch nutzen Repository-Pakete; Versionen prüfen."
|
||||
},
|
||||
"alignGids": {
|
||||
"title": "GIDs ausrichten und Zustand wiederherstellen",
|
||||
"body1": "Liest die Host-GIDs von <code>video</code> und <code>render</code>; 44/104 sind nur Ersatzwerte. Passt <code>/etc/group</code> im Container an. <code>video:44</code> und <code>render:104</code> sind Beispiele, keine universellen IDs. App-Mitgliedschaft und wirksame Rechte prüfen.",
|
||||
"body2": "Bei normalem Abschluss wird ein ursprünglich gestoppter Container erneut gestoppt; ein laufender bleibt aktiv. Bei Start- oder Installationsfehlern Endzustand und Protokoll prüfen."
|
||||
}
|
||||
},
|
||||
"vendors": {
|
||||
"heading": "Herstellerspezifische Hinweise",
|
||||
"intelHeading": "Intel iGPU",
|
||||
"intelBody": "Intel-Beschleunigung mit <em>Quick Sync</em> hängt von Generation, Codecs und App-Einstellungen ab. Teilt vorhandene Knoten wie <code>/dev/dri/card0</code> und <code>/dev/dri/renderD128</code>; Nummern können abweichen. Der native Host-Treiber, etwa <code>i915</code>, muss sie bereitstellen.",
|
||||
"amdHeading": "AMD",
|
||||
"amdBody": "AMD nutzt DRI für Mesa/VA-API. Vorhandenes <code>/dev/kfd</code> wird ebenfalls geteilt. ROCm/OpenCL benötigt unterstützte Hardware und passende Bibliotheken; die Gerätefreigabe installiert keinen vollständigen ROCm-Stack.",
|
||||
"nvidiaHeading": "NVIDIA",
|
||||
"nvidiaBody": "Teilt verfügbare <code>/dev/nvidia*</code>-Geräte. <strong>Passende Treiberversionen</strong> sind für <code>nvidia-smi</code> entscheidend. Debian/glibc nutzt den <code>.run</code>-Installer der Host-Version, Alpine/Arch Repository-Pakete. Unter 2048 MiB konfiguriertem RAM bietet der Debian-Pfad eine vorübergehende Erhöhung mit Wiederherstellung; benötigt außerdem 1500 MiB freien Plattenplatz.",
|
||||
"updateTitle": "Nach Host-NVIDIA-Update Containerbibliotheken prüfen",
|
||||
"updateBody": "Alte Bibliotheken können in <code>nvidia-smi</code> Versionsfehler verursachen. Der <nvidiaLink>NVIDIA-Host-Installer</nvidiaLink> bietet Containerupdates. Erneutes Hinzufügen kann bei vorhandenen Geräten sofort enden und garantiert kein Bibliotheksupdate. Versionen prüfen und passende Pakete oder Userspace-Installation aktualisieren."
|
||||
},
|
||||
"verification": {
|
||||
"heading": "Überprüfung",
|
||||
"body": "Im Container prüfen, ob die GPU sichtbar und nutzbar ist."
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Fehlerbehebung",
|
||||
"mismatchTitle": "nvidia-smi: Failed to initialize NVML: Driver/library version mismatch",
|
||||
"mismatchBody": "Bibliotheken passen nicht zum geladenen Host-Modul. Versionen prüfen und Container-Userspace aktualisieren. Der zwischengespeicherte <code>.run</code>-Installer gilt für Debian/glibc; bei vorhandenen Geräteeinträgen kann das Hinzufügen vorher enden.",
|
||||
"denyTitle": "Genehmigung verweigert auf /dev/dri/renderD128 im Container",
|
||||
"denyBody": "Geräteeintrag und numerische Rechte der Gruppe <code>render</code> prüfen; App-Benutzer muss zu <code>render</code> gehören. Falls verfügbar, mit <code>usermod -aG render <user></code> zu <code>render</code> hinzufügen; Platzhalter durch Kontonamen ersetzen. Sitzung neu starten. Privilegmoduswechsel ist keine allgemeine Lösung.",
|
||||
"vainfoTitle": "vainfo sagt: VA-API Version 1.xx; konnte nicht initialisiert werden",
|
||||
"vainfoBody": "Gerätezugriff und VA-API-Treiber prüfen. Paketnamen hängen von der Distribution ab: etwa <code>intel-media-driver</code> für unterstützte neuere Intel-GPUs, <code>i965-va-driver</code> für ältere und <code>mesa-va-drivers</code> für AMD. Die Meldung allein beweist kein fehlendes Paket.",
|
||||
"logTitle": "Installationsprotokoll",
|
||||
"logBody": "Jeder Durchlauf schreibt <code>/tmp/add_gpu_lxc.log</code> auf dem Host. Bei Hilfsanfragen beifügen."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Verwandte Themen",
|
||||
"items": [
|
||||
{
|
||||
"label": "Installieren Sie NVIDIA Treiber (Host)",
|
||||
"href": "/docs/hardware/nvidia-host",
|
||||
"tail": " — Host-Treiber vor der NVIDIA-Freigabe installieren."
|
||||
},
|
||||
{
|
||||
"label": "GPU zu VM hinzufügen (Passthrough)",
|
||||
"href": "/docs/hardware/gpu-vm-passthrough",
|
||||
"tail": " — Alternative für eine exklusiv zugewiesene VM-GPU."
|
||||
},
|
||||
{
|
||||
"label": "GPU-Modus wechseln (VM ↔ LXC)",
|
||||
"href": "/docs/hardware/switch-gpu-mode",
|
||||
"tail": " — GPU zwischen LXC-Freigabe und VM-Zuweisung wechseln."
|
||||
},
|
||||
{
|
||||
"label": "GPU Durchgangsbefehle",
|
||||
"href": "/docs/help-info/gpu-commands",
|
||||
"tail": "Schnellreferenz für verwandte Shell-Befehle."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,203 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Coral TPU auf dem Host installieren | ProxMenux-Dokumentation",
|
||||
"description": "Installiert Coral-Komponenten auf Proxmox VE nach erkannter Hardware: gasket/apex mit DKMS für M.2 / Mini-PCIe und libedgetpu1-std für USB. Bei beiden Gerätetypen werden beide Abläufe ausgeführt."
|
||||
},
|
||||
"header": {
|
||||
"title": "Coral TPU auf dem Host installieren",
|
||||
"description": "Proxmox-Host für Coral und spätere LXC-Nutzung vorbereiten. Erkennt M.2 / Mini-PCIe, USB oder beide und führt passende Abläufe aus: DKMS-Module für PCIe und Google-Edge-TPU-Laufzeit für USB.",
|
||||
"section": "Hardware: GPUs und Coral-TPU"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Funktionsweise",
|
||||
"body": "Ein <strong>gemeinsamer Installer mit Hardware-Erkennung</strong>. PCIe nutzt <code>gasket</code> und <code>apex</code> mit DKMS; spätere Builds brauchen kompatible Quellen und Headers. USB nutzt <code>libedgetpu1-std</code>. Bei beiden Gerätetypen laufen beide Pfade. Die USB-Laufzeit gehört zum Ausführungsort der App; für reine LXC-Nutzung ist sie auf dem Host nicht grundsätzlich nötig."
|
||||
},
|
||||
"which": {
|
||||
"heading": "Welche Coral habe ich?",
|
||||
"body": "PCIe- und USB-Modelle unterscheiden sich in Bauform und Anforderungen. Das Skript unterstützt beide; identifizieren Sie Ihr Gerät vor dem Start.",
|
||||
"headerForm": "Formfaktor",
|
||||
"headerDetect": "Detektion",
|
||||
"headerInstall": "Art der Installation",
|
||||
"headerReboot": "Neu starten?",
|
||||
"pcieForm": "M.2 / Mini-PCIe",
|
||||
"pcieFormSub": "(M.2-Karten gibt es mit einer oder zwei Edge TPUs)",
|
||||
"pcieDetect": "PCI-Herstellerkennung <code>1ac1</code>",
|
||||
"pcieInstall": "Kernel-Modul (gasket + apex) über DKMS",
|
||||
"pcieReboot": "Ja",
|
||||
"usbForm": "USB-Beschleuniger",
|
||||
"usbFormSub": "(kleiner Kunststoff-Dongle)",
|
||||
"usbDetect": "USB <code>1a6e:089a</code> (unprogrammiert) / <code>18d1:9302</code> (programmiert)",
|
||||
"usbInstall": "Userspace-Laufzeit <code>libedgetpu1-std</code> aus Googles APT-Repository",
|
||||
"usbReboot": "Nein"
|
||||
},
|
||||
"prereqs": {
|
||||
"title": "Vorbereitung",
|
||||
"coral": "<strong>Angeschlossene Coral TPU</strong> (M.2, Mini-PCIe oder USB) für die Installation. Ohne erkannte Hardware kann das Skript vorhandene Komponenten bereinigen oder entfernen, installiert aber keinen neuen Hardwarepfad.",
|
||||
"coralCheck": "lspci -d 1ac1: ; lsusb | grep -E '1a6e:089a|18d1:9302'",
|
||||
"internet": "<strong>Internetzugang</strong> auf dem Host zum Klonen des PCIe-Treibers von GitHub oder zum Herunterladen von <code>libedgetpu1-std</code> aus Googles APT-Repository für USB.",
|
||||
"headers": "<strong>Über APT verfügbare Kernel-Header</strong>: <code>proxmox-headers-$(uname -r)</code>. Nur für PCIe/M.2 nötig; das Skript installiert sie.",
|
||||
"reboot": "<strong>Neustart für PCIe einplanen</strong>. Das Skript versucht, die gebauten Module zu laden; ein Neustart prüft auch das automatische Laden."
|
||||
},
|
||||
"hostPrepTip": {
|
||||
"title": "Dies bereitet nur den Host vor",
|
||||
"body": "Bereitet den Host für den <em>Gerätezugriff</em> vor; Anwendungen werden weder eingerichtet noch getestet. Um Coral etwa mit Frigate zu <em>nutzen</em>, folgen Sie <lxcLink>Coral TPU zu einem LXC hinzufügen</lxcLink>."
|
||||
},
|
||||
"running": {
|
||||
"heading": "Installationsprogramm ausführen",
|
||||
"body": "Öffnen Sie ProxMenux auf dem Host und wählen Sie <strong>Hardware: GPUs und Coral-TPU → Coral TPU auf dem Host installieren/aktualisieren</strong>.",
|
||||
"imageAlt": "Menüeintrag zur Installation oder Aktualisierung von Coral TPU auf dem Host"
|
||||
},
|
||||
"howRuns": {
|
||||
"heading": "Ablauf des Skripts",
|
||||
"body": "Zuerst werden Hardware und Installationsplan ermittelt. Die Installation erfordert eine Bestätigung."
|
||||
},
|
||||
"walkthrough": {
|
||||
"heading": "Schritt für Schritt",
|
||||
"detect": {
|
||||
"title": "Hardwareerkennung",
|
||||
"body": "Sucht in <code>/sys/bus/pci/devices/*/vendor</code> nach Hersteller <code>0x1ac1</code> und erkennt USB-Geräte mit <code>lsusb</code>. Es gibt <strong>zwei</strong> USB-IDs, abhängig vom Firmwarezustand:",
|
||||
"items": [
|
||||
"<code>1a6e:089a</code> — Global Unichip, <em>unprogrammiert</em>, bevor die Laufzeit die Firmware lädt.",
|
||||
"<code>18d1:9302</code> — Google, <em>programmiert</em>, nach dem Laden der Firmware."
|
||||
],
|
||||
"outro": "Ohne erkannte Coral und vorhandene Installation endet das Skript mit einem Hinweis. Vorhandene Komponenten können weiterhin das Bereinigungs- oder Entfernungsmenü auslösen."
|
||||
},
|
||||
"prompt": {
|
||||
"title": "Installationsbestätigung",
|
||||
"body": "Vor der Installation zeigt ein Dialog Geräte und geplante Komponenten. Abbrechen überspringt die Installation. Die optionale Altbereinigung hat zuvor eine eigene Bestätigung.",
|
||||
"imageAlt": "Übersicht erkannter Coral-Geräte und Installationsschritte"
|
||||
},
|
||||
"pcie": {
|
||||
"title": "PCIe: Kernelmodule gasket und apex über DKMS",
|
||||
"body": "Läuft nur bei erkannter PCIe-/M.2-Coral. Die Module werden für den aktuell laufenden Host-Kernel gebaut.",
|
||||
"items": [
|
||||
"<strong>Bereinigung.</strong> Bei einem fehlerhaften Paketstatus einer früheren <code>gasket-dkms</code>-Installation versucht das Skript, sie vor dem Neubau zu entfernen.",
|
||||
"<strong>Build-Abhängigkeiten:</strong> <code>git</code>, <code>dkms</code>, <code>build-essential</code>, <code>proxmox-headers-$(uname -r)</code>."
|
||||
],
|
||||
"cloneIntro": "<strong>Treiberquellen klonen.</strong> Bevorzugt <feranickLink>feranick/gasket-driver</feranickLink>, ersatzweise <googleLink>google/gasket-driver</googleLink>. Ein erfolgreicher Build setzt Kernelkompatibilität voraus. Die Google-Quellen erhalten folgende versionsabhängige Patches:",
|
||||
"kernelPatches": [
|
||||
"Ab Kernel 6.5 ersetzt der Fallback-Patch <code>no_llseek</code> durch <code>noop_llseek</code>.",
|
||||
"Ab Kernel 6.13: Argument von <code>MODULE_IMPORT_NS(DMA_BUF)</code> in ein Zeichenkettenliteral umwandeln."
|
||||
],
|
||||
"afterItems": [
|
||||
"<strong>Quellen nach <code>/usr/src/gasket-1.0/</code> kopieren,</strong> <code>dkms.conf</code> erzeugen und mit <code>dkms add</code> registrieren.",
|
||||
"<strong>Bauen und installieren:</strong> <code>dkms build</code>, danach <code>dkms install</code>. Bei Fehlern zeigt das Skript die letzten 50 Zeilen von <code>make.log</code>, sofern vorhanden.",
|
||||
"<strong>Gruppe <code>apex</code> und udev-Regeln erstellen</strong> (<code>/etc/udev/rules.d/99-coral-apex.rules</code>), um <code>/dev/apex_*</code> der Gruppe zuzuordnen.",
|
||||
"<strong>Module zu laden versuchen:</strong> <code>modprobe gasket</code> und <code>modprobe apex</code>."
|
||||
],
|
||||
"imageAlt": "DKMS-Build und Laden der gasket/apex-Module"
|
||||
},
|
||||
"usb": {
|
||||
"title": "USB: Edge-TPU-Laufzeit von Google",
|
||||
"body": "Läuft nur, wenn ein USB-Beschleuniger erkannt wurde. Viel einfacher:",
|
||||
"items": [
|
||||
"<strong>Googles GPG-Schlüssel hinzufügen</strong>: <code>/etc/apt/keyrings/coral-edgetpu.gpg</code>.",
|
||||
"<strong>APT-Repository hinzufügen</strong> in <code>/etc/apt/sources.list.d/coral-edgetpu.list</code>; <code>signed-by=</code> beschränkt die Prüfung auf dessen Schlüsselbund. Dies ist einzeilige .list-Syntax, keine deb822-.sources-Syntax.",
|
||||
"<strong><code>libedgetpu1-std</code> installieren</strong>, die Edge-TPU-Laufzeit mit Standardleistung.",
|
||||
"<strong>udev neu laden</strong> und die Paketregeln auf das USB-Gerät anwenden."
|
||||
],
|
||||
"stdTitle": "Warum libedgetpu1-std und nicht libedgetpu1-max?",
|
||||
"stdBody": "Das Paket <code>max</code> aktiviert den maximal unterstützten Takt mit höherer Leistung, Stromaufnahme und Wärme. Vor dem Wechsel Kühlung und Betriebsbedingungen prüfen. Die Pakete schließen sich gegenseitig aus; wechseln mit <code>apt install libedgetpu1-max</code>."
|
||||
},
|
||||
"reboot": {
|
||||
"title": "Optionaler Neustart nach PCIe-Installation",
|
||||
"body": "Nach PCIe wird ein Neustart angeboten. <code>modprobe</code> wurde versucht; prüfen Sie geladene Module und <code>/dev/apex_0</code> mit Gruppe <code>apex</code>. Ein geplanter Neustart prüft automatisches Laden. Bei reiner USB-Installation wird kein Host-Neustart angeboten.",
|
||||
"imageAlt": "Zusammenfassung und Neustartangebot nach PCIe-Installation"
|
||||
}
|
||||
},
|
||||
"legacyCleanup": {
|
||||
"heading": "Altes gasket-dkms auf reinen USB-Hosts bereinigen",
|
||||
"intro": "Wenn <strong>keine PCIe-/M.2-Coral erkannt wird</strong>, aber eine alte <code>gasket-dkms</code>-Installation existiert, wird eine optionale Bereinigung angeboten. Sie erfordert eine Bestätigung.",
|
||||
"items": [
|
||||
"Bei erkannter PCIe-/M.2-Coral wird stattdessen der normale DKMS-Neubau verwendet; diese Bereinigung wird nicht angeboten.",
|
||||
"Entfernt <code>gasket-dkms</code>, alte gasket-DKMS-Einträge und Quellen und repariert ausstehende <code>dpkg</code>-/APT-Vorgänge.",
|
||||
"Die USB-Pakete <code>libedgetpu1-std</code> und <code>libedgetpu1-max</code> bleiben erhalten, sodass die USB-Coral ihre Laufzeit behält.",
|
||||
"Das Skript überprüft, ob das Legacy-Paket verschwunden ist und dass das Paketmanagement gesund ist, bevor der Erfolg gemeldet wird."
|
||||
],
|
||||
"warningTitle": "Bestätigen Sie zuerst die Hardware",
|
||||
"warningBody": "Wenn eine erwartete PCIe-/M.2-Coral fehlt, Bereinigung abbrechen und Karte, Steckplatz sowie Firmware prüfen."
|
||||
},
|
||||
"reinstallUninstall": {
|
||||
"heading": "Neuinstallieren oder Deinstallieren",
|
||||
"intro": "Bei erkannter PCIe-Installation mit <code>gasket-dkms</code>, USB mit <code>libedgetpu1-std</code>/<code>libedgetpu1-max</code> oder beiden erscheint ein Aktionsmenü.",
|
||||
"imageAlt": "Menü zum Neuinstallieren, Aktualisieren oder Entfernen von Coral",
|
||||
"imageCaption": "Das Menü erscheint bei vorhandenen Komponenten: gasket-DKMS-Eintrag, Paket <code>libedgetpu1-*</code> oder Geräte <code>/dev/apex_*</code>.",
|
||||
"reinstallHeading": "Neuinstallation / Update",
|
||||
"reinstallBody": "Führt die normale Installation aus: Neubau nach Kernelwechsel oder Aktualisierung von <code>libedgetpu1-*</code> aus Googles Repository. Bereinigt zuvor alten DKMS-Status, damit ein fehlgeschlagener Versuch den Build nicht blockiert.",
|
||||
"uninstallHeading": "Deinstallieren – Was entfernt wird",
|
||||
"uninstallIntro": "Erfordert eine Bestätigung. LXC-Apps mit <code>/dev/apex_*</code> können während der Entfernung oder nach dem nächsten Neustart den Zugriff verlieren. Ablauf:",
|
||||
"uninstallItems": [
|
||||
"Versucht, <code>apex</code> und <code>gasket</code> zu entladen; aktive Nutzung kann dies verhindern.",
|
||||
"Entfernt jeden DKMS-registrierten <code>gasket/<version></code>-Eintrag, damit die Module nicht bei der nächsten Kernel-Installation zurückkommen.",
|
||||
"Entfernt <code>gasket-dkms</code>, <code>libedgetpu1-std</code> und <code>libedgetpu1-max</code> vollständig und führt <code>apt-get autoremove --purge</code> aus.",
|
||||
"Löscht <code>/etc/udev/rules.d/99-coral-apex.rules</code> und stellt die Standardgruppe in <code>60-gasket-dkms.rules</code> wieder her, falls vorhanden.",
|
||||
"Prüft die zusätzlichen Mitglieder von <code>apex</code>. <strong>Bei leerer Liste</strong> wird die Gruppe zu entfernen versucht, sonst bleibt <code>apex</code> mit Mitgliederhinweis erhalten. Benutzer mit dieser primären Gruppe werden nicht vollständig geprüft.",
|
||||
"Entfernt alte Repository-Einträge wie <code>/etc/apt/sources.list.d/coral-edgetpu.list</code> und Schlüsselbunde namens <code>coral-edgetpu-archive-keyring.gpg</code>. Der aktuelle Schlüsselbund /etc/apt/keyrings/coral-edgetpu.gpg bleibt erhalten.",
|
||||
"Bietet einen Neustart <strong>nur bei zuvor installiertem PCIe-Pfad</strong> an, um noch aktive Module zu entladen. Reine USB-Entfernung braucht keinen Neustart."
|
||||
],
|
||||
"lxcWarnTitle": "LXC Container mit apex Passthrough",
|
||||
"lxcWarnBody": "Das Entfernen der Host-Komponenten kann den LXC-Gerätezugriff unterbrechen. Wartung einplanen, wenn kompatible Anwendungen wie Frigate diese Coral benötigen."
|
||||
},
|
||||
"updates": {
|
||||
"heading": "Update-Benachrichtigungen",
|
||||
"intro": "ProxMenux erfasst installierte Coral-Komponenten und prüft PCIe/M.2 und USB getrennt. Sind beide vorhanden, nutzt jede Variante ihre eigene Versionsquelle:",
|
||||
"headerVariant": "Variante",
|
||||
"headerTracked": "Erfasste Version",
|
||||
"headerUpstream": "Versionsquelle",
|
||||
"pcieVariant": "PCIe / M.2",
|
||||
"pcieTracked": "Zuerst das nach erfolgreicher Installation erfasste Release-Tag, dann die Version eines intakten <code>gasket-dkms</code>-Pakets, ersatzweise die DKMS-Modulversion. Diese allein gibt den Patchstand des Forks nicht an.",
|
||||
"pcieUpstream": "Neuestes GitHub-Tag von <code>feranick/gasket-driver</code>; sieben Tage Cache und Vergleich der Buildnummer.",
|
||||
"usbVariant": "USB",
|
||||
"usbTracked": "<code>libedgetpu1-std</code> oder <code>libedgetpu1-max</code> apt Version",
|
||||
"usbUpstream": "Lokaler <code>apt-cache policy</code>-Kandidat (Google Coral apt repo)",
|
||||
"outro": "Bei einer neueren Version sendet Monitor <code>coral_driver_update_available</code> über aktivierte Kanäle. Der Hinweis führt zum Installer: <strong>Neu installieren / aktualisieren</strong> auswählen.",
|
||||
"antiTitle": "Keine wiederholten Hinweise",
|
||||
"antiBody": "Ein Hinweis je Variante bei neuer verfügbarer Version. Keine Wiederholung bei jeder täglichen Prüfung; erst eine weitere Version löst den nächsten Hinweis aus.",
|
||||
"rebootTitle": "PCIe-Updates: Neustart einplanen",
|
||||
"rebootBody": "Ein neu gebautes PCIe-Modul muss geladen werden; ein geplanter Neustart prüft auch automatisches Laden. Das USB-Bibliotheksupdate braucht keinen Host-Neustart, aber Anwendungen mit der alten Bibliothek müssen gegebenenfalls neu starten."
|
||||
},
|
||||
"manual": {
|
||||
"heading": "Manuelle Vorgehensweise",
|
||||
"intro": "Diese Befehle zeigen die wichtigsten Schritte beider Pfade zum Nachlesen oder manuellen Ausführen.",
|
||||
"pcieHeading": "PCIe / M.2 (gasket + apex über DKMS)",
|
||||
"usbHeading": "USB (libedgetpu-Laufzeit)"
|
||||
},
|
||||
"verification": {
|
||||
"heading": "Überprüfung",
|
||||
"pcieHeading": "PCIe / M.2",
|
||||
"usbHeading": "USB"
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Fehlerbehebung",
|
||||
"dkmsFailTitle": "DKMS-Build schlägt nach Kernelupdate fehl",
|
||||
"dkmsFailBody": "Fehlende Header sind eine mögliche Ursache. <code>proxmox-headers-$(uname -r)</code> mit <code>dpkg -l proxmox-headers-$(uname -r)</code> prüfen und gegebenenfalls installieren. Im Buildprotokoll nach Quellcode-/Kernelproblemen suchen. Erneutes Ausführen ruft <code>cleanup_broken_gasket_dkms</code> auf, garantiert aber keine Kernelkompatibilität.",
|
||||
"apexMissTitle": "/dev/apex_0 fehlt nach dem Neustart",
|
||||
"apexMissBody": "PCIe-Erkennung und Modul für den laufenden Kernel prüfen. <code>modprobe apex</code> versuchen und <code>dmesg | grep -iE \"apex|gasket\"</code> prüfen. Build-, Lade- oder Steckplatz-/Firmwareprobleme können das Gerät verhindern.",
|
||||
"lxcMissTitle": "Host sieht /dev/apex_0, LXC jedoch nicht",
|
||||
"lxcMissBody": "Ein sichtbarer Geräteknoten beweist noch keine Funktion. Erst Host-Zugriff, dann LXC-Mount, cgroup-Regeln und numerische UID/GID-Rechte prüfen. Siehe <lxcLink>Coral TPU zu einem LXC hinzufügen</lxcLink>.",
|
||||
"usbUnreachTitle": "USB Accelerator erkannt, aber Frigate / TFLite kann es nicht erreichen",
|
||||
"usbUnreachBody": "Regeln von <code>libedgetpu1-std</code> und Rechte mit <code>ls -l /dev/bus/usb/*/*</code> prüfen. Gemappte App-Benutzer/-Gruppen brauchen Lese-/Schreibzugriff; root als Eigentümer allein ist kein Fehler. Nach Regeländerungen <code>udevadm control --reload-rules && udevadm trigger</code> ausführen und bei Bedarf neu verbinden.",
|
||||
"logTitle": "Installationsprotokoll",
|
||||
"logBody": "Jeder Lauf schreibt <code>/tmp/coral_install.log</code>. Bei DKMS-Fehlern werden, sofern vorhanden, die letzten 50 Zeilen von <code>/var/lib/dkms/gasket/1.0/build/make.log</code> ergänzt. Das Protokoll bei Supportanfragen beifügen."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Verwandte Themen",
|
||||
"items": [
|
||||
{
|
||||
"label": "Coral TPU zu LXC hinzufügen",
|
||||
"href": "/docs/hardware/coral-tpu-lxc",
|
||||
"tail": " — Coral vom Host einem Container mit kompatibler App bereitstellen."
|
||||
},
|
||||
{
|
||||
"label": "Installieren Sie NVIDIA Treiber (Host)",
|
||||
"href": "/docs/hardware/nvidia-host",
|
||||
"tail": "— die gleiche Idee für NVIDIA GPUs."
|
||||
},
|
||||
{
|
||||
"label": "ProxMenux Monitor — Register Hardware",
|
||||
"href": "/docs/monitor/dashboard/hardware",
|
||||
"tail": " — das Coral-Fenster zeigt Treiber, Module, Geräte und Laufzeitstatus sowie Temperatur bei vorhandenem unterstütztem Sensor."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,175 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "NVIDIA auf dem Host installieren | ProxMenux-Dokumentation",
|
||||
"description": "Proprietäre NVIDIA-Treiber mit ProxMenux auf Proxmox VE installieren: GPU-Filterung, Build- und DKMS-Prüfungen, Persistenzdienst, optionaler NVENC-Patch und Bibliotheksaktualisierung in LXC."
|
||||
},
|
||||
"header": {
|
||||
"title": "NVIDIA-Treiber auf dem Host installieren",
|
||||
"description": "NVIDIA auf dem Proxmox-VE-Host installieren. Filtert gepflegte Zweige nach GPU-PCI-ID, prüft den Build, nutzt DKMS, verwaltet nouveau und installiert den Persistenzdienst. Kann außerdem Bibliotheken in LXC mit NVIDIA-Zugriff aktualisieren.",
|
||||
"section": "Hardware: GPUs und Coral-TPU"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Funktionsweise",
|
||||
"body": "Erkennt die GPU und bietet gepflegte Zweige mit ihrer PCI-ID. Sperrt <code>nouveau</code>, lädt den offiziellen <code>.run</code>-Installer, nutzt DKMS und installiert <code>nvidia-persistenced</code> sowie udev-Regeln; NVENC-Patch optional. Build-Prüfungen beziehen sich auf den laufenden Kernel; erfolgreiche Kompilierung garantiert nicht jede App. NVIDIA-LXC können passende Userspace-Bibliotheken erhalten."
|
||||
},
|
||||
"who": {
|
||||
"heading": "Für wen ist das?",
|
||||
"body": "Für GPU-beschleunigte Video- oder Rechenanwendungen wie Plex, Jellyfin, Frigate, Immich oder Stable Diffusion <strong>in LXC</strong> zuerst den NVIDIA-Treiber auf dem Proxmox-<em>Host</em> installieren. Die direkte Zuweisung an eine <strong>VM</strong> nutzt den separaten VFIO-Ablauf."
|
||||
},
|
||||
"prereqs": {
|
||||
"title": "Vorbereitung",
|
||||
"gpu": "<strong>Eine NVIDIA-GPU</strong> im Host. Sie wird automatisch erkannt; AMD und Intel werden hier nicht verwaltet.",
|
||||
"gpuCheck": "lspci | grep -i nvidia",
|
||||
"notVm": "Die GPU <strong>darf nicht per VFIO für eine VM reserviert sein</strong>. Der Installer verweigert diesen Fall, um die Zuweisung nicht zu beeinträchtigen.",
|
||||
"internet": "Internetzugang auf dem Host. Der Installer lädt den Treiber von <code>download.nvidia.com</code> herunter und klont optional <code>nvidia-persistenced</code> und <code>nvidia-patch</code> von GitHub.",
|
||||
"space": "Platz in <code>/opt/nvidia</code> für <code>.run</code> und RAM für die Kompilierung einplanen. Der Nicht-Arch-LXC-Pfad prüft auf 1500 MiB freien Platz und kann bei geringerem RAM eine temporäre Erhöhung auf 2048 MiB anfragen; danach wird das alte Limit wiederhergestellt. Host-Neustart einplanen."
|
||||
},
|
||||
"vmWarn": {
|
||||
"title": "GPU für VM reserviert? Hier stoppen",
|
||||
"body": "Ist ein NVIDIA-Gerät an <code>vfio-pci</code> gebunden, beendet sich der Installer auch bei gestoppter VM. Eine Reservierung bedeutet nicht zwingend aktive VM-Nutzung. Planen Sie die Rückkehr zum Host-Treiber und entfernen Sie alte VM-/VFIO-Zuweisungen vor Neustart und Installation."
|
||||
},
|
||||
"running": {
|
||||
"heading": "Ausführen des Installateurs",
|
||||
"body": "Öffnen Sie <strong>Hardware Graphics → NVIDIA GPU Driver Installer</strong> in ProxMenux. Das Menü hängt davon ab, ob bereits ein Treiber aktiv ist.",
|
||||
"imageAlt": "Hardware-Menü mit markiertem NVIDIA-Installer"
|
||||
},
|
||||
"howRuns": {
|
||||
"heading": "Ablauf des Skripts",
|
||||
"body": "Erkennt Geräte, wählt eine Version und installiert. Vor der Übersicht kann eine separat bestätigte VFIO-Bereinigung erfolgen. Repository-/Header-Vorbereitung und Download gehen dem Treiberaustausch voraus; nicht alle Änderungen beginnen erst nach einer einzigen Abschlussbestätigung."
|
||||
},
|
||||
"walkthrough": {
|
||||
"detect": {
|
||||
"title": "GPU Erkennung und Übersicht",
|
||||
"body1": "Zeigt NVIDIA-Grafikcontroller, Treiberstatus oder <em>„Kein NVIDIA-Treiber installiert“</em> sowie LXC mit konfiguriertem NVIDIA-Zugriff und deren Treiberversion.",
|
||||
"body2": "GPU sowie Host-/Container-Versionen prüfen. Bei unerwarteter Auswahl in der Übersicht abbrechen; eine zuvor separat bestätigte VFIO-Bereinigung wurde bereits angewendet.",
|
||||
"imageAlt": "Installationsübersicht mit GPUs, Treiberstatus und NVIDIA-LXC"
|
||||
},
|
||||
"version": {
|
||||
"title": "Wählen Sie die Treiberversion",
|
||||
"body1": "Filtert Versionen von <code>nvidia.com</code>, die <strong>die GPU-PCI-ID in der Liste unterstützter Chips enthalten</strong>, und sortiert Beta-/Entwicklerversionen heuristisch aus. <em><Version> — Empfohlen</em> bevorzugt den neuesten Stand des installierten Zweigs, danach den Production Branch und zuletzt die höchste unterstützte Versionsnummer.",
|
||||
"body2": "Ist der Treiber als mit keylase gepatcht erfasst, beschränkt die Auswahl sich auf die NVENC-Patch-Tabelle. <em>Neu installieren / aktualisieren</em> enthält weiterhin Bestätigungen und Patch-Abfragen; Ergebnis prüfen.",
|
||||
"whyTitle": "Wie die Kernel-Kompatibilität validiert wird",
|
||||
"whyBody": "Filtert nach gepflegten Zweigen und GPU-PCI-Unterstützung statt einer festen Kernel-/Treiber-Matrix. Ein Vorab-Build prüft den laufenden Kernel. Bestätigtes Scheitern führt zur Auswahl zurück; ein nicht verfügbarer Vorabtest kann nur warnen und fortfahren. Abschließende Installation und Laufzeitprüfung bleiben nötig.",
|
||||
"imageAlt": "Auswahl GPU-kompatibler Zweige mit Empfehlung oben"
|
||||
},
|
||||
"uninstall": {
|
||||
"title": "Vorhandenen Treiber vor Neuinstallation entfernen",
|
||||
"body": "Nach Download und Prüfung des gewählten Installers wird der vorhandene Treiber entfernt. Stoppt NVIDIA-Dienste, entlädt Module, entfernt DKMS-Einträge und bereinigt <code>nvidia-*</code> / <code>libnvidia-*</code> / <code>cuda-*</code>. Gilt auch bei bestätigter Neuinstallation derselben Version."
|
||||
},
|
||||
"prepare": {
|
||||
"title": "System vorbereiten",
|
||||
"body": "Während der Vorbereitung führt das Skript Folgendes aus:",
|
||||
"items": [
|
||||
"Prüft Paketquellen vor Entfernung oder Installation. Ohne Abonnement und mit ausschließlich Enterprise-Repository fragt es nach dem Wechsel zu no-subscription; bei Ablehnung stoppt die Installation.",
|
||||
"Installiert <code>pve-headers-$(uname -r)</code> (oder <code>proxmox-headers-$(uname -r)</code>), <code>build-essential</code> und <code>dkms</code>.",
|
||||
"Erstellt die von ProxMenux verwaltete Datei <code>/etc/modprobe.d/proxmenux-nouveau-blacklist.conf</code> mit <code>blacklist nouveau</code> und <code>options nouveau modeset=0</code>. Erfasst eine zusätzlich eingefügte Zeile in <code>blacklist.conf</code> und versucht, nouveau zu entladen.",
|
||||
"Schreibt <code>/etc/modules-load.d/nvidia-vfio.conf</code> mit <code>nvidia</code> und <code>nvidia_uvm</code>, so dass die Module beim Booten früh geladen werden."
|
||||
]
|
||||
},
|
||||
"download": {
|
||||
"title": "Download und Ausführen des NVIDIA-Installationsprogramms",
|
||||
"body": "Lädt <code>NVIDIA-Linux-x86_64-<version>.run</code> nach <code>/opt/nvidia</code> und prüft Dateigröße und ausführbaren Dateityp. Das ist keine kryptografische Signaturprüfung. Registriert DKMS für Neubauten bei Kerneländerungen; kompatibler Quellcode und Kernel bleiben nötig.",
|
||||
"imageAlt": "Download-Fortschritt und DKMS-Build des NVIDIA-Installers"
|
||||
},
|
||||
"persist": {
|
||||
"title": "Persistenzdienst und Udev-Regeln",
|
||||
"body": "Installiert <persistLink>nvidia-persistenced</persistLink> und schreibt <code>/etc/udev/rules.d/70-nvidia.rules</code> zur Erstellung von <code>/dev/nvidia*</code> beim Start. Das hilft, LXC-Zugriffe vor Bereitstellung der Gerätedateien zu vermeiden."
|
||||
},
|
||||
"nvenc": {
|
||||
"title": "Optional: NVENC-Patch anwenden",
|
||||
"body": "NVENC-Sitzungsgrenzen hängen von GPU und Treiber ab. <patchLink>keylase/nvidia-patch</patchLink> kann die Treibergrenze für unterstützte Versionen entfernen. Wählen Sie <strong>Ja</strong>, wenn Sie diese Encoding-Änderung benötigen und Ihre Version unterstützt wird. Dekodierung und Hardwarekapazität werden dadurch nicht verbessert.",
|
||||
"supportTitle": "Patch-Unterstützung prüfen",
|
||||
"supportBody": "Exakte Version in der <patchTableLink>Patch-Tabelle</patchTableLink> prüfen. Fehlt sie, den Treiber ungepatcht nutzen oder eine andere gepflegte Version wählen, die GPU, Kernel und Patch unterstützt; nicht allein nach Nähe in der Liste auswählen."
|
||||
},
|
||||
"propagate": {
|
||||
"title": "Optional: NVIDIA-Bibliotheken in LXC aktualisieren",
|
||||
"body1": "Bietet passende Treiberbibliotheken für erkannte LXC an. Sie und das Host-Modul <strong>müssen übereinstimmende Versionen haben</strong>; andernfalls kann <code>nvidia-smi</code> „version mismatch“ melden.",
|
||||
"body2": "Debian / Ubuntu und andere glibc-Container erhalten den entpackten <code>.run</code>-Installer mit <code>--no-kernel-modules --no-dkms --no-install-compat32-libs</code>; RAM kann vorübergehend auf 2 GiB erhöht und danach zurückgesetzt werden. <strong>Arch, Manjaro und EndeavourOS</strong> nutzen <code>pacman -Syu nvidia-utils</code> aus ihren Paketquellen, ohne Bindung an die Host-Version: Ergebnis prüfen. <strong>Alpine</strong> erhält entpackte <code>.run</code>-Dateien per <code>pct push</code>, installiert <code>gcompat</code> und <code>binutils</code> mit <code>apk</code> und erstellt SONAME-Links per <code>readelf</code>. Funktion prüfen; die Kompatibilitätsschicht garantiert nicht alle Bibliotheken auf musl.",
|
||||
"imageAlt": "Dialog mit NVIDIA-LXC und Versionen zur Bestätigung des Updates"
|
||||
},
|
||||
"reboot": {
|
||||
"title": "Neustart",
|
||||
"body": "Erstellt <code>initramfs</code> für alle Kernel neu und bietet den Neustart an. <strong>Diesen Neustart einplanen</strong>, um Module und nouveau-Konfiguration beim Start zu prüfen, auch wenn der Treiber vorher bereits antwortet."
|
||||
}
|
||||
},
|
||||
"reinstallUninstall": {
|
||||
"heading": "Neuinstallieren oder Deinstallieren",
|
||||
"intro": "Sind <code>nvidia</code> geladen und eine Version über <code>nvidia-smi</code> verfügbar, erscheint ein Aktionsmenü. Das erkennt einen aktiven Treiber; installierte Dateien können auch ohne geladenes Modul vorhanden sein.",
|
||||
"imageAlt": "Das Aktionsmenü NVIDIA wird angeboten, wenn ein Treiber bereits installiert ist – zwei Möglichkeiten: Treiber neu installieren / aktualisieren oder den Treiber NVIDIA vollständig deinstallieren",
|
||||
"imageCaption": "Das Aktionsmenü erscheint nur, wenn ein NVIDIA-Treiber derzeit auf dem Host aktiv ist.",
|
||||
"reinstallHeading": "Neuinstallation / Update",
|
||||
"reinstallBody": "Wählt eine Version, bereitet Paketquellen/Headers vor, lädt herunter und prüft den Build vor dem Treiberaustausch. Ermöglicht Updates innerhalb eines gepflegten Zweigs oder einen unterstützten Zweigwechsel. Danach erscheinen erneut Abfragen zu LXC-Bibliotheken und NVENC-Patch.",
|
||||
"uninstallHeading": "Deinstallieren – Was entfernt wird",
|
||||
"uninstallIntro": "Nach einer Ja/Nein-Bestätigung werden folgende Komponenten entfernt:",
|
||||
"uninstallItems": [
|
||||
"Führt <code>nvidia-uninstall --silent</code> für die <code>.run</code>-Installation aus, stoppt und deaktiviert <code>nvidia-persistenced</code> und <code>nvidia-powerd</code> und versucht, <code>nvidia_uvm</code>, <code>nvidia_drm</code>, <code>nvidia_modeset</code> und <code>nvidia</code> zu entladen. NVIDIA-LXC sind betroffen; aktive Clients können das Entladen verhindern.",
|
||||
"Führt <code>apt purge</code> auf <code>nvidia-*</code>, <code>libnvidia-*</code>, <code>cuda-*</code> und <code>libcudnn*</code> aus, entfernt den DKMS-Quellbaum und den <code>/opt/nvidia</code>-.run-Installer-Cache.",
|
||||
"Entfernt die Module-Load Config (<code>/etc/modules-load.d/nvidia-vfio.conf</code>) und die Nouveau Blacklist-Einträge von ProxMenux. Legacy zweizeilige ProxMenux-Blacklist-Dateien werden migriert und entfernt; modifizierte oder nicht verwandte Administratordateien bleiben erhalten.",
|
||||
"Entfernt <code>/etc/udev/rules.d/70-nvidia.rules</code> und setzt den NVENC-Status im verwalteten Installationsverzeichnis auf <em>removed</em>; es gibt keine separate Statusdatei.",
|
||||
"Erstellt <code>initramfs</code> für alle Kernel neu, führt passend zur Bootkonfiguration <code>proxmox-boot-tool refresh</code> aus und fragt nach einem Neustart."
|
||||
],
|
||||
"lxcWarnTitle": "LXC mit NVIDIA-Zugriff",
|
||||
"lxcWarnBody": "Das Entfernen des Host-Treibers unterbricht NVIDIA-abhängige LXC-Anwendungen, auch wenn ihre Bibliotheken installiert bleiben. Wartungszeit für Frigate, Plex, Jellyfin, Ollama und andere GPU-Apps einplanen."
|
||||
},
|
||||
"updates": {
|
||||
"heading": "Update-Benachrichtigungen",
|
||||
"body": "Der installierte NVIDIA-Treiber wird im Verzeichnis der von ProxMenux verwalteten Installationen erfasst. Beim Start und alle 24 Stunden vergleicht der Monitor die unter <code>download.nvidia.com/XFree86/Linux-x86_64/</code> verfügbaren Versionen mit der von <code>nvidia-smi</code> gemeldeten Version. Er benachrichtigt nur, wenn im installierten Versionszweig ein neueres Wartungsrelease verfügbar ist.",
|
||||
"kindsHeading": "Update-Meldung",
|
||||
"kindsItems": [
|
||||
"<strong>Wartungsupdate im gleichen Zweig.</strong> Beispiel: installiert 580.65.06 → verfügbar 580.105.08. Monitor leitet daraus keine Kernel-Kompatibilität anderer Zweige ab."
|
||||
],
|
||||
"antiTitle": "Wiederholte Meldungen vermeiden",
|
||||
"antiBody": "Eine Meldung pro neuer Version statt bei jeder täglichen Prüfung. Ohne neuere Version im installierten Zweig bleibt die Meldung aus.",
|
||||
"applyTitle": "Anwendung der Aktualisierung",
|
||||
"applyBody": "Monitor meldet Updates ohne automatische Installation. Im Installer <strong>Neu installieren / aktualisieren</strong> und eine unterstützte Version wählen, dann Build und Installation abschließen. Der Ablauf endet mit einer Neustartabfrage; Neustart einplanen und danach Host sowie LXC-Bibliotheken prüfen."
|
||||
},
|
||||
"verify": {
|
||||
"heading": "Installation überprüfen",
|
||||
"intro": "Nach dem Host-Neustart per SSH oder Proxmox-Shell anmelden und ausführen:",
|
||||
"after": "GPU und erwartete Treiberversion prüfen. Prozesse können bereits erscheinen, wenn Host-Dienste oder automatisch gestartete Container die GPU nutzen. Danach den Persistenzdienst prüfen:",
|
||||
"imageAlt": "Ausgabe von nvidia-smi auf dem Host mit der erkannten GPU und der installierten Treiberversion"
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Fehlerbehebung",
|
||||
"smiFailTitle": "nvidia-smi meldet „NVIDIA-SMI has failed“",
|
||||
"smiFailBody": "Mögliche Ursachen sind <strong>nouveau</strong>, <strong>fehlende oder unpassende Kernel-Header</strong>, inkompatibler Treiberquellcode oder andere Ladefehler. <code>lsmod | grep nouveau</code>, <code>dmesg | grep -i nvidia</code> und Installer-/DKMS-Protokolle prüfen. Bei fehlerhafter nouveau-Regel zuerst <code>/etc/modprobe.d/proxmenux-nouveau-blacklist.conf</code> prüfen, dann <code>update-initramfs -u -k all</code> und Neustart. Nicht jeder Buildfehler betrifft Headers.",
|
||||
"lxcMissTitle": "LXC Container kann GPU nach dem Host-Update nicht sehen",
|
||||
"lxcMissBody": "Vor Neuinstallation Host-Geräte, LXC-Berechtigungen und Bibliotheksversion prüfen. Bei Versionskonflikten passende Userspace-Treiber über den unterstützten Distributionsweg installieren; auf glibc mit <code>--no-kernel-modules</code>. Bibliotheksinstallation repariert keine fehlenden Mounts oder Berechtigungen.",
|
||||
"logTitle": "Überprüfen Sie das Installationsprotokoll",
|
||||
"logBody": "Die Installation protokolliert in <code>/tmp/nvidia_install.log</code>. Bei Fehlern Download, DKMS-Build und Dienste prüfen. Fügen Sie das Protokoll dem GitHub-Fehlerbericht bei."
|
||||
},
|
||||
"manualSteps": {
|
||||
"heading": "Suchen Sie die manuellen Schritte?",
|
||||
"body": "Unter <guideLink>Anleitungen → NVIDIA</guideLink> stehen manuelle Grundlagen mit <code>wget</code> und <code>./NVIDIA-Linux-...run</code>. Sie erklären Komponenten, bilden den Installer aber nicht exakt ab. Der gepflegte ProxMenux-Ablauf bietet GPU-Filterung, Build-Prüfung, LXC-Updates und VFIO-Prüfungen."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Verwandte Themen",
|
||||
"items": [
|
||||
{
|
||||
"label": "GPU zu VM hinzufügen (Passthrough)",
|
||||
"href": "/docs/hardware/gpu-vm-passthrough",
|
||||
"tail": " — NVIDIA direkt per VFIO einer VM zuweisen."
|
||||
},
|
||||
{
|
||||
"label": "GPU zu LXC hinzufügen",
|
||||
"href": "/docs/hardware/igpu-acceleration-lxc",
|
||||
"tail": " — NVIDIA mit einem oder mehreren Containern teilen."
|
||||
},
|
||||
{
|
||||
"label": "GPU-Modus wechseln (VM ↔ LXC)",
|
||||
"href": "/docs/hardware/switch-gpu-mode",
|
||||
"tail": " — zwischen VM-Passthrough und gemeinsamer LXC-Nutzung wechseln."
|
||||
},
|
||||
{
|
||||
"label": "ProxMenux Monitor — Register Hardware",
|
||||
"href": "/docs/monitor/dashboard/hardware",
|
||||
"tail": " — GPU-Dialog zum Öffnen dieses Installers und zur Live-Überwachung."
|
||||
},
|
||||
{
|
||||
"label": "Befehle für GPU-Passthrough",
|
||||
"href": "/docs/help-info/gpu-commands",
|
||||
"tail": "— lspci / dmesg / IOMMU / nvidia-smi-Referenz."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,172 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "GPU-Modus wechseln (VM ↔ LXC) | ProxMenux-Dokumentation",
|
||||
"description": "GPU zwischen VFIO für VMs und nativem Treiber für LXC umschalten. ProxMenux erkennt den Treiber, fragt nach dem Umgang mit betroffenen Gästen, entfernt zugehörige Audiozuweisungen und erstellt bei Host-Konfigurationsänderungen initramfs neu."
|
||||
},
|
||||
"header": {
|
||||
"title": "GPU-Modus wechseln (VM ↔ LXC)",
|
||||
"description": "Zugewiesene GPU zwischen VM-Passthrough und LXC-Nutzung umschalten. ProxMenux verwaltet Treiberbindung, VFIO, Module und initramfs und fragt nach dem Umgang mit betroffenen Gästen. Prüfen Sie die Auswahl und nach dem Neustart die Konfiguration.",
|
||||
"section": "Hardware: GPUs und Coral-TPU"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Funktionsweise",
|
||||
"body": "Mit <code>vfio-pci</code> ist die GPU für eine VM reserviert. Mit nativem Treiber <em>(i915 / amdgpu / nvidia)</em> können Host und LXC sie teilen. <strong>GPU-Modus wechseln</strong> verwaltet <code>vfio.conf</code>, Treibersperren und Gastzuweisungen und meldet verbleibende Verweise."
|
||||
},
|
||||
"graphics": {
|
||||
"lxcTitle": "Bereit für LXC-Container",
|
||||
"lxcDesc": "Nativer Treiber aktiv",
|
||||
"vmTitle": "Bereit für VM-Passthrough",
|
||||
"vmDesc": "VFIO-PCI-Treiber aktiv"
|
||||
},
|
||||
"when": {
|
||||
"heading": "Wann sollte ich das verwenden?",
|
||||
"intro": "Verwenden Sie dies, wenn die GPU <strong>bereits zugewiesen</strong> ist und anders genutzt werden soll:",
|
||||
"headerSituation": "Lage",
|
||||
"headerUse": "Nutzen Sie diese Seite?",
|
||||
"rows": [
|
||||
{
|
||||
"situation": "GPU frei und noch nie zugewiesen: einer VM zuweisen.",
|
||||
"useRich": "Nein — <vmLink>GPU zu VM hinzufügen</vmLink> verwenden"
|
||||
},
|
||||
{
|
||||
"situation": "GPU frei und noch nie zugewiesen: einem LXC zuweisen.",
|
||||
"useRich": "Nein — <lxcLink>GPU zu LXC hinzufügen</lxcLink> verwenden"
|
||||
},
|
||||
{
|
||||
"situationRich": "Die GPU ist einer VM über <code>vfio-pci</code> zugewiesen; ich möchte sie stattdessen in einem LXC nutzen.",
|
||||
"useRich": "<strong>Ja — diese Seite.</strong>"
|
||||
},
|
||||
{
|
||||
"situation": "Die GPU wird mit einem LXC geteilt; ich möchte sie exklusiv einer VM zuweisen.",
|
||||
"useRich": "<strong>Ja — diese Seite.</strong>"
|
||||
},
|
||||
{
|
||||
"situation": "Ich möchte alle Gastzuweisungen dieser GPU entfernen.",
|
||||
"use": "Der LXC-Modus gibt die GPU an den Host-Treiber zurück; entfernen Sie Gastzuweisungen über die jeweiligen Konfliktoptionen. Die GPU bleibt dabei an einen Treiber gebunden."
|
||||
}
|
||||
]
|
||||
},
|
||||
"prereqs": {
|
||||
"title": "Vorbereitung",
|
||||
"assigned": "<strong>Bereits zugewiesene GPU</strong> in einer VM über VFIO oder in einem LXC. Für die erste Zuweisung GPU zu VM / LXC hinzufügen verwenden.",
|
||||
"iommu": "<strong>IOMMU muss auf dem Host aktiv sein</strong> beim Wechsel <em>in</em> den VM-Modus. Firmware und Kernel-Unterstützung sind entscheidend; explizite Parameter sind nicht immer nötig. Bei Bedarf versucht das Skript <code>intel_iommu=on iommu=pt</code> oder <code>amd_iommu=on</code> über den aktiven Bootweg mit <code>proxmox-boot-tool refresh</code> oder <code>update-grub</code>. Warnungen prüfen und bei Aufforderung neu starten.",
|
||||
"iommuCheck": "dmesg | grep -i 'IOMMU enabled' | head -1",
|
||||
"reboot": "<strong>Neustart einplanen.</strong> Dauerhafte Treiber- und Bootänderungen können ein neues initramfs und einen Neustart erfordern. Das Skript fragt am Ende danach.",
|
||||
"knowList": "<strong>Betroffene VMs und LXC kennen.</strong> Das Skript erkennt Verweise und fragt nach dem Umgang mit jedem Gast; eine bekannte Liste erleichtert die Prüfung."
|
||||
},
|
||||
"blocklist": {
|
||||
"title": "Nicht alle GPUs können sicher an einen VM übergeben werden",
|
||||
"body": "Das Skript sperrt den VM-Modus für bestimmte Geräte-IDs, darunter <code>8086:5a84</code> und <code>8086:5a85</code>, gemäß seiner Kompatibilitätsrichtlinie. Bei Übereinstimmung erscheint eine Warnung. Die Liste verhindert nicht den Wechsel <em>in</em> den LXC-Modus; andere Prüfungen gelten weiterhin."
|
||||
},
|
||||
"running": {
|
||||
"heading": "Skript ausführen",
|
||||
"body": "Öffnen Sie <strong>Hardware: GPUs und Coral-TPU → GPU-Modus wechseln (VM ↔ LXC)</strong> in ProxMenux.",
|
||||
"imageAlt": "Menüpunkt GPU-Modus wechseln (VM ↔ LXC) im Hardware-Menü"
|
||||
},
|
||||
"howRuns": {
|
||||
"heading": "Ablauf des Skripts",
|
||||
"body": "GPU-Auswahl und Richtung werden vor dem Hauptwechsel geprüft. Eine separate Bereinigung veralteter VFIO-Einträge kann schon vorher fragen; betroffene Gäste haben eigene Konfliktdialoge. Jede Bestätigung lesen: Nicht alle Änderungen sind durch eine einzige Abschlussbestätigung abgedeckt."
|
||||
},
|
||||
"walkthrough": {
|
||||
"heading": "Schritt für Schritt",
|
||||
"detect": {
|
||||
"title": "GPUs und aktuellen Treiber erkennen",
|
||||
"body": "Erfasst VGA-, 3D- und Display-Controller des Hosts und prüft <code>/sys/bus/pci/devices/*/driver</code>. Zeigt Name, PCI-Adresse und aktuellen Treiber jeder GPU zur Erkennung des Modus.",
|
||||
"imageAlt": "GPU Checkliste mit jedem erkannten GPU mit seinem aktuellen Treiber (vfio-pci / nvidia / amdgpu / i915) und PCI-Slot"
|
||||
},
|
||||
"pickGpu": {
|
||||
"title": "GPUs zum Umschalten auswählen",
|
||||
"body": "Eine GPU wird automatisch gewählt. Bei mehreren können Sie mehrere markieren, sofern alle im <em>gleichen</em> Modus sind. Bei gemischten Modi müssen Sie die Auswahl eingrenzen.",
|
||||
"tipTitle": "Mehrere GPUs gemeinsam umschalten",
|
||||
"tipBody": "Beispiel: drei NVIDIA-GPUs in den VM-Modus schalten, danach die iGPU in den LXC-Modus zurückgeben. Zwei Durchläufe mit jeweils gemeinsamem Ziel statt einzelner Aufrufe pro Karte."
|
||||
},
|
||||
"direction": {
|
||||
"title": "Überprüfung der vorgeschlagenen Richtung",
|
||||
"intro": "Basierend auf dem aktuellen Modus schlägt das Skript das Gegenteil als Ziel vor:",
|
||||
"items": [
|
||||
"<strong>VM → LXC:</strong> Entfernt die Bindung an <code>vfio-pci</code>, damit der native Treiber (<code>nvidia</code>, <code>amdgpu</code>, <code>i915</code>) die GPU nutzen kann. Bei NVIDIA werden die betreffenden BDF-Einträge aus <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> für den nächsten Start entfernt.",
|
||||
"<strong>LXC → VM:</strong> bereitet die Bindung an <code>vfio-pci</code> vor. AMD / Intel sperrt den nativen Treiber und nutzt <code>options vfio-pci ids=…</code>. Bei NVIDIA wird <code>nvidia</code> <strong>nicht</strong> global gesperrt: BDF-Regeln setzen <code>driver_override=vfio-pci</code> für Geräte der betroffenen IOMMU-Gruppen. NVIDIA-GPUs außerhalb dieser Gruppen können <code>nvidia</code> behalten. Alle Gruppenmitglieder prüfen."
|
||||
],
|
||||
"outro": "Bestätigen Sie die Richtung oder brechen Sie ab."
|
||||
},
|
||||
"conflict": {
|
||||
"title": "Umgang mit betroffenen VMs und LXC",
|
||||
"body": "Prüft <code>/etc/pve/lxc/*.conf</code> auf Geräteverweise nach Treiberfamilie und <code>/etc/pve/qemu-server/*.conf</code> auf PCI-Zuweisungen. Die LXC-Erkennung ordnet nicht jede Karte exakt per BDF zu. Prüfen Sie die erkannten Gäste und wählen Sie den Umgang mit jedem:",
|
||||
"headerPolicy": "Richtlinie",
|
||||
"headerEffect": "Wirkung",
|
||||
"headerWhen": "Wann zu wählen",
|
||||
"keepPolicy": "Konfiguration behalten, Autostart deaktivieren",
|
||||
"keepEffect": "<code>pct set CTID -onboot 0</code> oder <code>qm set VMID -onboot 0</code>. Die GPU-Einträge bleiben erhalten.",
|
||||
"keepWhen": "Wenn der Gast nach Rückkehr zum ursprünglichen GPU-Modus wieder genutzt werden soll. Konservative Standardwahl.",
|
||||
"removePolicy": "GPU aus config entfernen",
|
||||
"removeEffect": "Entfernt die erkannten <code>hostpci</code>- / <code>dev</code>-Einträge und unterstützte ältere Verweise.",
|
||||
"removeWhen": "Wenn der Gast ohne GPU arbeiten soll. Zuerst App-Einstellungen prüfen: CPU-Ersatzbetrieb hängt von der Anwendung ab; das Entfernen des Geräts konfiguriert sie nicht automatisch um.",
|
||||
"imageAlt": "Dialog zum Umgang mit betroffenen VMs oder LXC"
|
||||
},
|
||||
"audio": {
|
||||
"title": "Zugehörige Audiozuweisungen beim Verlassen des VM-Modus entfernen",
|
||||
"body1": "Viele dedizierte NVIDIA-/AMD-GPUs bieten HDMI-Audio als Funktion <code>.1</code> desselben Slots; weitere Audiogeräte können zugewiesen sein. Nach Entfernen der GPU können veraltete Audioeinträge vom Typ <code>hostpci</code> bleiben. Prüfen Sie, welche Zuweisungen erhalten bleiben sollen.",
|
||||
"body2": "Erkennt die Audio-BDF-Adressen und zeigt eine Auswahlliste zum Entfernen. Zugehörige Vendor:Device-IDs werden nur aus <code>/etc/modprobe.d/vfio.conf</code> entfernt, wenn keine andere VM sie nutzt."
|
||||
},
|
||||
"apply": {
|
||||
"title": "Änderungen an Host und Gästen anwenden",
|
||||
"body": "Sobald Sie bestätigen, schreibt das Skript die hostseitigen Änderungen - <code>vfio.conf</code>, Blacklist, Module und (für NVIDIA) die Per-BDF-Udev-Regel bei <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code> plus den BDF-Status bei <code>/etc/proxmenux/vfio-bind.bdfs</code>. Es wendet auch die gewählte Konfliktpolitik auf jeden betroffenen VM/LXC an. Wenn sich die Host-Konfiguration tatsächlich geändert hat, läuft <code>update-initramfs -u -k all</code> gefolgt von <code>proxmox-boot-tool refresh</code>; ansonsten werden beide übersprungen."
|
||||
},
|
||||
"reboot": {
|
||||
"title": "Neustart",
|
||||
"body": "Starten Sie den Host neu, um die neue dauerhafte Bindung anzuwenden. Sie können dies verschieben, müssen aber vor dem Start des Zielgasts den aktiven Treiber prüfen: Bis zum Neustart kann noch der vorherige aktiv sein.",
|
||||
"imageAlt": "Zusammenfassungsdialog, der auflistet, was sich geändert hat, gefolgt von der Neustartaufforderung"
|
||||
}
|
||||
},
|
||||
"manual": {
|
||||
"heading": "Manuelle Prüfung",
|
||||
"intro": "Prüfen Sie vor <strong>VM → LXC</strong> Treiber und BDF-Richtlinie. Das NVIDIA-Beispiel nutzt <code>10de:2204</code>; passen Sie es an Ihre Karte an. Die Befehle lesen den Zustand; das Skript verwaltet außerdem Gäste und IOMMU-Gruppenmitglieder.",
|
||||
"lxcToVm": "Vor <strong>LXC → VM</strong> PCI-Adresse und IOMMU-Gruppe prüfen. Ersetzen Sie die Beispieladresse und prüfen Sie vor der Zuweisung alle Gruppenmitglieder.",
|
||||
"oneVmTitle": "Eine physische VFIO-GPU kann nur eine VM gleichzeitig nutzen",
|
||||
"oneVmBody": "Das Setzen mehrerer <code>hostpci</code>-Einträge mit demselben PCI-Slot in zwei VMs ist eine gültige Konfiguration, aber nur eine der VMs kann mit dem GPU beginnen - die zweite wird fehlschlagen. Beim ProxMenux-Konfliktpolitikschritt geht es genau darum, diese Falle zu vermeiden."
|
||||
},
|
||||
"verification": {
|
||||
"heading": "Überprüfung nach dem Neustart"
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Fehlerbehebung",
|
||||
"stillVfioTitle": "GPU zeigt immer noch vfio-pci nach dem Umschalten auf LXC Modus",
|
||||
"stillVfioBody": "Ein geladenes VFIO-Modul zeigt nicht, welcher Treiber diese GPU besitzt. Kartenbindung sowie Abschluss von <code>update-initramfs</code> und Neustart prüfen. <code>lsmod | grep vfio</code> listet nur Module. Bei AMD / Intel <code>vfio.conf</code> prüfen; bei NVIDIA <code>/etc/proxmenux/vfio-bind.bdfs</code> und <code>/etc/udev/rules.d/10-proxmenux-vfio-bind.rules</code>. Alte Richtlinien vor <code>update-initramfs -u -k all</code> und Neustart korrigieren.",
|
||||
"vmFailTitle": "VM startet nach Wechsel der GPU in den LXC-Modus nicht",
|
||||
"vmFailBody": "Prüfen Sie verbliebene veraltete <code>hostpci</code>-Verweise. Die Richtlinie <em>GPU aus Konfiguration entfernen</em> kann sie beim geplanten Wechsel entfernen. Prüfen Sie vor erneutem Skriptaufruf die Richtung, um den Modus nicht versehentlich umzukehren. Alternativ die alte Zuweisung in Proxmox bei gestoppter VM entfernen.",
|
||||
"smiFailTitle": "nvidia-smi meldet „Driver/library version mismatch“ nach Rückkehr zu LXC",
|
||||
"smiFailBody": "Vergleichen Sie das geladene NVIDIA-Modul mit installierten Bibliotheken, auch in LXC. Versionen zuerst abgleichen: Ein Neustart lädt das installierte Modul, repariert aber keine unpassenden Pakete. Neuladen mit <code>modprobe -r nvidia</code> und <code>modprobe nvidia</code> erfordert gestoppte GPU-Clients und kann bei genutzten abhängigen Modulen scheitern.",
|
||||
"logTitle": "Ausführungsprotokoll",
|
||||
"logBody": "Jeder Aufruf schreibt in <code>/tmp/proxmenux_gpu_switch_mode.log</code> auf dem Host. Fügen Sie das Protokoll Ihrer GitHub-Hilfeanfrage bei."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Verwandte Themen",
|
||||
"items": [
|
||||
{
|
||||
"label": "GPU zu VM hinzufügen (Passthrough)",
|
||||
"href": "/docs/hardware/gpu-vm-passthrough",
|
||||
"tail": " — erstmalige Einrichtung des VM-Modus."
|
||||
},
|
||||
{
|
||||
"label": "GPU zu LXC hinzufügen",
|
||||
"href": "/docs/hardware/igpu-acceleration-lxc",
|
||||
"tail": " — erstmalige Einrichtung des LXC-Modus."
|
||||
},
|
||||
{
|
||||
"label": "Installieren Sie NVIDIA Treiber (Host)",
|
||||
"href": "/docs/hardware/nvidia-host",
|
||||
"tail": "— erforderlich für den LXC-Modus auf NVIDIA-GPUs."
|
||||
},
|
||||
{
|
||||
"label": "ProxMenux Monitor — Register Hardware",
|
||||
"href": "/docs/monitor/dashboard/hardware",
|
||||
"tail": " — Bereich Grafikkarten mit aktuellem Modus und Umschaltfunktion."
|
||||
},
|
||||
{
|
||||
"label": "Befehle für GPU-Passthrough",
|
||||
"href": "/docs/help-info/gpu-commands",
|
||||
"tail": " — kurze Befehlsreferenz."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user