Wenn auf Ihrem Proxmox VE-Server eine NVIDIA-GPU installiert ist, können Sie diese an einen Proxmox VE LXC-Container übergeben und im Container für die CUDA/AI-Beschleunigung (z. B. TensorFlow, PyTorch) verwenden. Sie können die NVIDIA-GPU auch für Medientranskodierung, Videostreaming usw. in einem Proxmox VE LXC-Container mit installiertem Plex Media Server oder NextCloud (z. B.) verwenden.
In diesem Artikel zeigen wir Ihnen, wie Sie eine NVIDIA-GPU an einen Proxmox VE 8 LXC-Container weiterleiten, damit Sie ihn für CUDA/AI-Beschleunigung, Medientranskodierung oder andere Aufgaben verwenden können, die eine NVIDIA-GPU erfordern.
Inhaltsthema:
Installieren der NVIDIA GPU-Treiber auf Proxmox VE 8
Um eine NVIDIA-GPU an einen Proxmox VE LXC-Container weiterzuleiten, müssen die NVIDIA-GPU-Treiber auf Ihrem Proxmox VE 8-Server installiert sein. Wenn Sie Hilfe bei der Installation der neuesten Version der offiziellen NVIDIA-GPU-Treiber auf Ihrem Proxmox VE 8-Server benötigen, wenden Sie sich an uns. Lesen Sie diesen Artikel .
Sicherstellen, dass die NVIDIA GPU-Kernelmodule automatisch in Proxmox VE 8 geladen werden
Sobald Sie die NVIDIA-GPU-Treiber auf Ihrem Proxmox VE 8-Server installiert haben, müssen Sie sicherstellen, dass die NVIDIA-GPU-Kernelmodule beim Booten automatisch geladen werden.
Erstellen Sie zunächst eine neue Datei wie „nvidia.conf“ im Verzeichnis „/etc/modules-load.d/“ und öffnen Sie sie mit dem Nano-Texteditor.
$ Nano / usw / module-load.d / nvidia.conf
Fügen Sie die folgenden Zeilen hinzu und drücken Sie
NVIDIA
nvidia_uvm
Damit die Änderungen wirksam werden, aktualisieren Sie die Datei „initramfs“ mit dem folgenden Befehl:
$ update-initramfs -In
Aus irgendeinem Grund erstellt Proxmox VE 8 nicht die erforderlichen NVIDIA GPU-Gerätedateien im Verzeichnis „/dev/“. Ohne diese Gerätedateien können die Promox VE 8 LXC-Container die NVIDIA-GPU nicht verwenden.
Um sicherzustellen, dass Proxmox VE 8 beim Booten die NVIDIA-GPU-Gerätedateien im Verzeichnis „/dev/“ erstellt, erstellen Sie eine udev-Regeldatei „70-nvidia.rules“ im Verzeichnis „/etc/udev/rules.d/“. Verzeichnis und öffnen Sie es mit dem Nano-Texteditor wie folgt:
$ Nano / usw / udev / Regeln.d / 70 -nvidia.rules
Geben Sie die folgenden Zeilen in die Datei „70-nvidia.rules“ ein und drücken Sie
KERN == „nvidia“ , RUN+= „/bin/bash -c '/usr/bin/nvidia-smi -L && /bin/chmod 0666 /dev/nvidia*'“
KERN == „nvidia_uvm“ , RUN+= '/bin/bash -c '/usr/bin/nvidia-modtest -c0 -u && /bin/chmod 0666 /dev/nvidia-uvm*''
Damit die Änderungen wirksam werden, starten Sie Ihren Proxmox VE 8 Server wie folgt neu:
$ neu starten
Sobald Ihr Proxmox VE 8-Server startet, sollten die NVIDIA-Kernelmodule automatisch geladen werden, wie Sie im folgenden Screenshot sehen können:
$ lsmod | Griff NVIDIA
Die erforderlichen NVIDIA-Gerätedateien sollten auch im Verzeichnis „/dev“ Ihres Proxmox VE 8-Servers abgelegt werden. Notieren Sie sich die CGroup-IDs der NVIDIA-Gerätedateien. Sie müssen diese CGroup-IDs auf dem LXC-Container zulassen, durch den Sie die NVIDIA-GPUs von Ihrem Proxmox VE 8-Server weiterleiten möchten. In unserem Fall lauten die CGroup-IDs 195, 237 und 226.
$ ls -lh / Entwickler / NVIDIA *$ ls -lh / Entwickler / dri
Erstellen eines Proxmox VE 8 LXC-Containers für NVIDIA GPU Passthrough
Wir haben in diesem Artikel für die Demonstration einen Ubuntu 22.04 LTS Proxmox VE 8 LXC-Container verwendet, da die NVIDIA CUDA- und NVIDIA cuDNN-Bibliotheken aus den Ubuntu-Paket-Repositories einfach auf Ubuntu 22.04 LTS installiert werden können und es einfacher ist zu testen, ob die NVIDIA CUDA-Beschleunigung funktioniert . Wenn Sie möchten, können Sie auch andere Linux-Distributionen verwenden. In diesem Fall variieren die Installationsbefehle für NVIDIA CUDA und NVIDIA cuDNN. Befolgen Sie unbedingt die Installationsanweisungen für NVIDIA CUDA und NVIDIA cuDNN für Ihre gewünschte Linux-Distribution.
Wenn Sie Hilfe beim Erstellen eines Proxmox VE 8 LXC-Containers benötigen, Lesen Sie diesen Artikel .
Konfigurieren eines LXC-Containers für NVIDIA GPU Passthrough auf Promox VE 8
Um einen LXC-Container (z. B. Container 102) für NVIDIA GPU-Passthrough zu konfigurieren, öffnen Sie die LXC-Container-Konfigurationsdatei aus der Proxmox VE-Shell mit dem Nano-Texteditor wie folgt:
$ Nano / usw / pve / lxc / 102 .conf
Geben Sie am Ende der LXC-Container-Konfigurationsdatei die folgenden Zeilen ein:
lxc.cgroup.devices.allow: c 195 : * rwmlxc.cgroup.devices.allow: c 237 : * rwm
lxc.cgroup.devices.allow: c 226 : * rwm
lxc.mount.entry: / Entwickler / nvidia0 dev / nvidia0 keine binden ,Optional, erstellen = Datei
lxc.mount.entry: / Entwickler / nvidiactl dev / nvidiactl keine binden ,Optional, erstellen = Datei
lxc.mount.entry: / Entwickler / nvidia-modeset dev / nvidia-modeset none binden ,Optional, erstellen = Datei
lxc.mount.entry: / Entwickler / nvidia-uvm dev / nvidia-uvm keine binden ,Optional, erstellen = Datei
lxc.mount.entry: / Entwickler / nvidia-uvm-tools dev / nvidia-uvm-tools keine binden ,Optional, erstellen = Datei
lxc.mount.entry: / Entwickler / dri dev / dri keine binden ,Optional, erstellen = Du
Stellen Sie sicher, dass Sie die CGroup-IDs in den „lxc.cgroup.devices.allow“-Zeilen der LXC-Container-Konfigurationsdatei ersetzen. Wenn Sie fertig sind, drücken Sie
Starten Sie nun den LXC-Container über das Proxmox VE 8-Dashboard.
Wenn der NVIDIA-GPU-Passthrough erfolgreich ist, sollte der LXC-Container ohne Fehler starten und Sie sollten die NVIDIA-Gerätedateien im Verzeichnis „/dev“ des Containers sehen.
$ ls -lh / Entwickler / NVIDIA *$ ls -lh / Entwickler / dri
Installieren der NVIDIA GPU-Treiber auf dem Proxmox VE 8 LXC Container
Zur Demonstration verwenden wir einen Ubuntu 22.04 LTS LXC-Container auf unserem Proxmox VE 8 Server. Wenn Sie eine andere Linux-Distribution im LXC-Container verwenden, weichen Ihre Befehle geringfügig von unseren ab. Stellen Sie daher sicher, dass Sie die Befehle an die Linux-Distribution anpassen, die Sie im Container verwenden.
Mit dem Befehl „nvidia-smi“ können Sie die NVIDIA-GPU-Treiberversion finden, die Sie auf Ihrem Proxmox VE 8-Server installiert haben. Wie Sie sehen können, haben wir die NVIDIA-GPU-Treiberversion 535.146.02 auf unserem Proxmox VE 8-Server installiert. Daher müssen wir auch die NVIDIA GPU-Treiberversion 535.146.02 auf unserem LXC-Container installieren.
$ nvidia-smi
Installieren Sie zunächst CURL wie folgt im LXC-Container:
$ passendes Update && geeignet Installieren Locken -Und
CURL sollte auf dem LXC-Container installiert sein.
Um beispielsweise die NVIDIA-GPU-Treiberversion 535.146.02 zu installieren, exportieren Sie die Umgebungsvariable NVIDIA_VERSION und führen Sie den CURL-Befehl (im Container) aus, um die erforderliche Version der Installationsdatei für die NVIDIA-GPU-Treiber herunterzuladen.
$ Export NVIDIA_VERSION = „535.146.02“$ Curl -Ö „https://us.download.nvidia.com/XFree86/Linux-x86_64/ ${NVIDIA_VERSION} /NVIDIA-Linux-x86_64- ${NVIDIA_VERSION} .laufen'
Die richtige Version der NVIDIA GPU-Treiber-Installationsdatei sollte auf den LXC-Container heruntergeladen werden, wie Sie im folgenden Screenshot sehen können:
Fügen Sie nun wie folgt eine ausführbare Berechtigung zur Installationsdatei der NVIDIA GPU-Treiber im Container hinzu:
$ chmod +x NVIDIA-Linux-x86_64-535.146.02.runUm die NVIDIA-GPU-Treiber im Container zu installieren, führen Sie die Installationsdatei für die NVIDIA-GPU-Treiber mit dem Befehl „–no-kernel-module“ aus. Option wie folgt:
$ . / NVIDIA-Linux-x86_64-535.146.02.run --no-kernel-module Sobald Sie diese Option sehen, wählen Sie „OK“ und drücken Sie
Wählen Sie „OK“ und drücken Sie
Wählen Sie „Ja“ und drücken Sie
Wählen Sie „OK“ und drücken Sie
Die NVIDIA-GPU-Treiber werden im LXC-Container installiert. Der Vorgang dauert einige Sekunden.
Sobald Sie diese Eingabeaufforderung sehen, wählen Sie „Ja“ und drücken Sie
Wählen Sie „OK“ und drücken Sie
Um zu bestätigen, ob die NVIDIA-GPU-Treiber installiert sind und funktionieren, führen Sie den Befehl „nvidia-smi“ im LXC-Container aus. Wie Sie sehen können, ist die NVIDIA-GPU-Treiberversion 535.146.02 (die gleiche Version, die auf dem Proxmox VE 8-Server installiert ist) auf dem LXC-Container installiert und hat unsere NVIDIA RTX 4070-GPU korrekt erkannt.
$ nvidia-smi
Installation von NVIDIA CUDA und cuDNN auf dem Proxmox VE 8 LXC Container
Zur Demonstration verwenden wir einen Ubuntu 22.04 LTS LXC-Container auf unserem Proxmox VE 8 Server. Wenn Sie eine andere Linux-Distribution im LXC-Container verwenden, weichen Ihre Befehle geringfügig von unseren ab. Stellen Sie daher sicher, dass Sie die Befehle an die Linux-Distribution anpassen, die Sie im Container verwenden.
Um NVIDIA CUDA und cuDNN auf dem Ubuntu 22.04 LTS Proxmox VE 8-Container zu installieren, führen Sie den folgenden Befehl auf dem Container aus:
$ geeignet Installieren build-essential nvidia-cuda-toolkit nvidia-cudnn Um die Installation zu bestätigen, drücken Sie „Y“ und dann drücken
Die erforderlichen Pakete werden heruntergeladen und installiert. Es dauert eine Weile, bis es fertig ist.
Sobald Sie dieses Fenster sehen, wählen Sie „OK“ und drücken Sie
Wählen Sie „Ich stimme zu“ und drücken Sie
Die Installation sollte fortgesetzt werden.
Das Installationsprogramm lädt das NVIDIA cuDNN-Bibliotheksarchiv von NVIDIA herunter. Da es sich um eine große Datei handelt, dauert die Fertigstellung lange.
Sobald das NVIDIA cuDNN-Bibliotheksarchiv heruntergeladen wurde, sollte die Installation wie gewohnt fortgesetzt werden.
Zu diesem Zeitpunkt sollten NVIDIA CUDA und cuDNN auf dem Ubuntu 22.04 LTS Proxmox VE 8 LXC-Container installiert sein.
Überprüfen, ob die NVIDIA CUDA-Beschleunigung auf dem Proxmox VE 8 LXC-Container funktioniert
Um zu überprüfen, ob NVIDIA CUDA korrekt installiert ist, prüfen Sie wie folgt, ob der Befehl „nvcc“ im Proxmox VE 8-Container verfügbar ist:
$ nvcc --AusführungWie Sie sehen können, haben wir NVIDIA CUDA 11.5 auf unserem Proxmox VE 8-Container installiert.
Lassen Sie uns nun ein einfaches CUDA-C-Programm schreiben, kompilieren und ausführen und prüfen, ob alles wie erwartet funktioniert.
Erstellen Sie zunächst ein „~/code“-Projektverzeichnis im Proxmox VE 8-Container, um die Dateien organisiert zu halten.
$ mkdir ~ / CodeNavigieren Sie wie folgt zum Projektverzeichnis „~/code“:
$ CD `/ CodeErstellen Sie eine neue Datei wie „hello.cu“ im Verzeichnis „~/code“ des Proxmox VE 8-Containers und öffnen Sie sie mit dem Nano-Texteditor:
$ Nano hallo.cuGeben Sie die folgenden Codezeilen in die Datei „hello.cu“ ein:
#include__global__ void sayHello ( ) {
printf ( „Hallo Welt von der GPU! \N ' ) ;
}
int main ( ) {
printf ( „Hallo Welt von der CPU! \N ' ) ;
sag Hallo << 1 , 1 >> ( ) ;
cudaDeviceSynchronize ( ) ;
zurückkehren 0 ;
}
Wenn Sie fertig sind, drücken Sie
Führen Sie die folgenden Befehle aus, um das CUDA-Programm „hello.cu“ auf dem Proxmox VE 8-Container zu kompilieren:
$ nvcc hallo.cu -Ö HalloJetzt können Sie das „Hallo“-CUDA-Programm auf dem Proxmox VE 8-Container wie folgt ausführen:
$ . / HalloWenn der Proxmox VE 8-Container die NVIDIA-GPU für die NVIDIA CUDA-Beschleunigung nutzen kann, druckt das Programm zwei Zeilen, wie im folgenden Screenshot gezeigt.
Wenn die NVIDIA-GPU nicht über den Proxmox VE 8-Container zugänglich ist, druckt das Programm nur die erste Zeile, die „Hallo Welt von der CPU!“ lautet, nicht die zweite Zeile.
Abschluss
In diesem Artikel haben wir Ihnen gezeigt, wie Sie eine NVIDIA-GPU vom Proxmox VE 8-Host an einen Proxmox VE 8 LXC-Container weiterleiten. Außerdem haben wir Ihnen gezeigt, wie Sie auf dem Proxmox VE 8-Container die gleiche Version der NVIDIA-GPU-Treiber installieren wie auf dem Proxmox VE-Host. Abschließend haben wir Ihnen gezeigt, wie Sie NVIDIA CUDA und NVIDIA cuDNN auf einem Ubuntu 22.04 LTS Proxmox VE 8-Container installieren und ein einfaches NVIDIA CUDA-Programm auf dem Proxmox VE 8-Container kompilieren und ausführen.