Bastelecke > Proxmox VE > Knowledge Base > GPU-Passthrough
Proxmox bietet die Möglichkeit am PC angeschlossene Geräte direkt in die virtuelle Maschine durchzureichen. Möchtet ihr beispielsweise einen USB-Port eures Servers an eure virtuelle Maschine weiter reiche, damit ihr dort beispielsweise USB-Sticks anschließen und in eurem virtuellen System auslesen könnt, genügt es in der Sektion "Hardware" eurer virtuellen Maschine ein neues USB-Gerät hinzuzufügen. Hier müsst ihr nun nur noch den Port auswählen, der durchgereicht werden soll, und fertig.
Das selbe geht auch mit einer Grafikkarte. So könnt ihr beispielsweise die 3D-Leistung einer Grafikkarte für Spiele und 3D-Anwendungen nutzen, KI-Modelle und Berechnungen darauf laufen lassen, oder das Bild der virtuellen Maschine auf einem angeschlossenen Bildschirm ausgeben.
Damit dieses bei einer über PCI-Express angeschlossenen Grafikkarte funktioniert, muss man jedoch ein paar Kleinigkeiten anpassen. Öffnet hierzu die Shell-Konsole eures entsprechenden Nodes.
Beachtet das die virtuelle Maschine immer nur auf Geräte des Rechners zugreifen kann, auf welchem sie läuft. Verschiebt ihr die Maschine auf einen anderen Node, sind die angeschlossenen Geräte nich mehr verfügbar. Ein Durchreichen über das Netzwerk ist (leider) nicht möglich.
IOMMU im Bootloader aktivieren
Bearbeitet hierzu die Konfigurationsdatei des GRUB-Bootloaders mit einem Editor eurer Wahl. Ich empfehle hier VIM, ihr könnt aber auch Nano verwenden.
Nutzt ihr VIM zum ersten Mal, müsst ihr den Editor erst noch installieren. Dieses geschieht mit folgenden zwei Befehlen:
apt update && apt upgrade -y
apt install vim -y
Bei VIM lautet der Befehl zum editieren der Konfigurationsdatei nun:
vim /etc/default/grub
Sucht nun folgende Zeile:
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
Durch drücken der Einfügen-Taste eurer Tastatur wechselt ihr in den Bearbeitungsmodus. Nun könnt ihr die Zeile entsprechend abändern.
Werkelt in eurem PC ein AMD Prozessor, ändert ihr die Zeile zu:
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on"
Steckt in eurem Server eine Intel CPU, dann schreibt ihr:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on"
Wichtig, es ist immer nur der CPU-Hersteller gefragt, nicht der Hersteller der Grafikkarte!
Ihr beendet den Bearbeitungsmodus in VIM durch drücken der ESC-Taste. Speichern und beenden könnt ihr VIM nun durch schreiben des Befehls ":wq!" (Erläuterung: Doppelpunkt leitet einen Befehl ein, "w" steht für write, "q" für quit und "!" sagt das der Schreibschutz der Datei ignoriert werden soll.)
Anschließend schreibt ihr euren Bootloader anhand der Konfigurationsdatei mit folgendem Befehl neu:
update-grub
Nun müsst ihr noch die erforderlichen Module hinzu fügen:
vim /etc/modules
Ihr bekommt wahrscheinlich eine leere Datei angezeigt. Wechselt wieder mit der Einfügen-Taste in den Bearbeitungsmodus und fügt folgende Zeilen ein:
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
Nun wieder "ESC", gefolgt von ":wq" zum beenden.
Startet den Node nun neu um das alles zu aktivieren, durch Eingabe des Befehls:
reboot
Nun sollte die Grafikkarte zur Verwendung in der virtuellen Maschine grundsätzlich zur Verfügung stehen.
Grafikkarte in virtuelle Maschine einbinden
Dieses funktioniert nur bei virtuellen Maschinen, Container haben keinen exclusiven Zugriff auf angeschlossene Geräte.
In den Hardware-Einstellungen eurer Maschine muss "Maschine" auf "q35" gestellt sein, als BIOS muss "OVMF (UEFI)" ausgewählt werden.
Am einfachsten ist es, wenn ihr eine neue virtuelle Maschine direkt mit den Parametern erstellt. Ist dieses nicht möglich, da ihr das virtuelle System nicht neu einrichten möchtet/könnt, könnt ihr hier auch die Parameter ändern. Ihr müsst dann jedoch noch eine "EFI Disk" über "Add" hinzufügen. Sollte euer System nun keinen Datenträger mehr zum booten finden, müsst ihr über ein Widerherstellungsmedium eine Reperatur des Bootloaders euer virtuellen Maschine vornehmen, da dieser nun auf die EFI-Disk geschrieben werden muss.
Nun könnt ihr die Grafikkarte als PCI-Gerät hinzufügen und sie verwenden.
Abhängig davon welche Grafikkarte ihr verwendet, kann es sein das hier noch weitere Konfigurationsschritte erforderlich sind, auf die ich hier aber nicht weiter eingehen werde, da diese für jede Grafikkarte individuell sind. Funktioniert es an dieser Stelle noch nicht, bleibt euch nichts weiter übrig als Foren zu wälzen oder die Idee zu verwerfen.
Das GPU-Passthrough funktioniert auch längst nicht mit jeder Grafikkarte. Mein Versuch mit einer Nvidia RTX 3070ti erwies sich als sehr instabil und wenig performant, wohingegen eine ältere ATI HD7950 sofort problemlos lief. Dahingegen wurde die etwas kleinere HD7650 von ATI zwar einwandfrei erkannt und verwendet, jedoch lieferten weder DVI, noch HDMI, ein Bild nach draußen. Die intigrierte Radeon eines AMD Ryzen 7 5700G ließ sich nicht verwenden und führte zum kompletten Systemabsturz, egal was ich versuchte, wohingegen die interne Grafikeinheit einer Intel Core i5-4460 CPU einwandfrei funktioniert.
Hier gilt leider, Versuch macht klug. Hat man noch eine Grafikkarte rumliegen, spricht nichts dagegen zu veruschen diese als Rechenbeschleuniger für KI, etc. in eine virtuelle Maschine einzubinden. Ich würde jedoch davon abraten eine teure High-End-Karte extra dafür zu kaufen, oder gar die Absicht zu haben, darüber dann Blockbuster-Games zu zocken. Wollt ihr einen guten Gaming-PC, vergesst die Virtualisierung mit Proxmox. Da verschenkt ihr nur unnötig Leistung.