Toolbox: Nvidia-proprietärer Treiber

Erstellt am 16. Apr. 2019  ·  16Kommentare  ·  Quelle: containers/toolbox

Erstmal ein tolles Projekt!

Wenn ich einen proprietären Nvidia-Treiber verwende, funktionieren OpenGL-Software (wie Blender) nicht im Toolbox-Container. Ich habe versucht, den proprietären Treiber im Container zu installieren, er wird installiert, aber die OpenGL-Software funktioniert nicht. Müssen weitere Dinge installiert werden? Oder eine env-Variable setzen?

Vielen Dank!

1. Bug 5. Help Wanted

Hilfreichster Kommentar

Damit das NVIDIA-Zeug in der Toolbox funktioniert, musste ich dies tun (inspiriert von https://github.com/thewtex/docker-opengl-nvidia):

1) Sie müssen die Toolbox patchen, um /dev/nvidia0 und /dev/nvidictl an die Toolbox zu mounten und die X11-Dinge einzurichten - siehe https://github.com/tpopela/toolbox/commit/40231e8591d70065199c0df9b6811c2f9e9d7269

2) Laden Sie die proprietären NVIDIA-Treiber auf den Host herunter:

#!/bin/sh

# Get your current host nvidia driver version, e.g. 340.24
nvidia_version=$(cat /proc/driver/nvidia/version | head -n 1 | awk '{ print $8 }')

# We must use the same driver in the image as on the host
if test ! -f nvidia-driver.run; then
  nvidia_driver_uri=http://us.download.nvidia.com/XFree86/Linux-x86_64/${nvidia_version}/NVIDIA-Linux-x86_64-${nvidia_version}.run
  wget -O ~/nvidia-driver.run $nvidia_driver_uri
fi

3) Installieren Sie die Treiber, während Sie sich in der Toolbox befinden:

#!/bin/sh

sudo dnf install -y glx-utils kmod libglvnd-devel || exit 1
sudo sh ~/nvidia-driver.run -a -N --ui=none --no-kernel-module || exit 1
glxinfo | grep "OpenGL version"

Alle 16 Kommentare

Toolbox ist ein Container, Sie müssten Ihre Grafikkarte darin abbilden oder Dinge wie nvidia-docker tun.

@Findarato Du meinst, füge etwas wie --volume /dev/nvidia0:/dev/nvidia0 und andere /dev-Dateien hinzu?

Damit das NVIDIA-Zeug in der Toolbox funktioniert, musste ich dies tun (inspiriert von https://github.com/thewtex/docker-opengl-nvidia):

1) Sie müssen die Toolbox patchen, um /dev/nvidia0 und /dev/nvidictl an die Toolbox zu mounten und die X11-Dinge einzurichten - siehe https://github.com/tpopela/toolbox/commit/40231e8591d70065199c0df9b6811c2f9e9d7269

2) Laden Sie die proprietären NVIDIA-Treiber auf den Host herunter:

#!/bin/sh

# Get your current host nvidia driver version, e.g. 340.24
nvidia_version=$(cat /proc/driver/nvidia/version | head -n 1 | awk '{ print $8 }')

# We must use the same driver in the image as on the host
if test ! -f nvidia-driver.run; then
  nvidia_driver_uri=http://us.download.nvidia.com/XFree86/Linux-x86_64/${nvidia_version}/NVIDIA-Linux-x86_64-${nvidia_version}.run
  wget -O ~/nvidia-driver.run $nvidia_driver_uri
fi

3) Installieren Sie die Treiber, während Sie sich in der Toolbox befinden:

#!/bin/sh

sudo dnf install -y glx-utils kmod libglvnd-devel || exit 1
sudo sh ~/nvidia-driver.run -a -N --ui=none --no-kernel-module || exit 1
glxinfo | grep "OpenGL version"

@tpopela es hat funktioniert. Vielen Dank!

freut mich, dass es funktioniert hat! Es ist jedoch ein Fehler aufgetreten, der nach dem Neustart des Hosts zu Fehlfunktionen führen kann - Sie müssen https://github.com/tpopela/toolbox/commit/3db450a8e5762399fd81c848f311da950437dd04 zusätzlich zum vorherigen Patch anwenden.

@tpopela Wir können möglicherweise ohne /tmp/.x11-unix davonkommen. Heutzutage lauscht der X.org-Server auf einem abstrakten UNIX-Socket und einem UNIX-Socket auf dem Dateisystem. Ersteres funktioniert nicht, wenn Sie einen Netzwerk-Namespace haben, die Toolbox jedoch keinen hat (weil podman create --net host ), und deshalb funktionieren X-Anwendungen. Letztere befindet sich bei /tmp/.x11-unix und wird von Flatpak-Containern verwendet, da diese Netzwerk-Namespaces haben.

Verweise:

Ah ok @debarshiray! Vielen Dank für die Klarstellung. Ich kann bestätigen, dass das nicht bindende Mounten von /tmp/X11-unix nichts ändert und die Integration funktioniert (versucht, Blender hier auszuführen).

Es gibt vielleicht eine kleine Änderung, nachdem wir das gesamte /dev . Blender sucht jetzt nach nvcc (CUDA-Zeug) in PATH und kann es nicht finden.

Mit der Zusammenführung von https://github.com/debarshiray/toolbox/pull/119 kann dieses Problem behoben werden, da Nvidia nun mit proprietären Treibern arbeitet. Es ist nur notwendig, den nvidia-Treiber einmal im Toolbox-Container zu installieren. Die Skripte von @tpopela helfen bei der Treiberinstallation. @tpopela Sie müssen CUDA Toolkit installieren. Um es zu installieren habe ich die Parameter --override und --toolkit . Nach der Installation von CUDA Toolkit Blender zeigen Sie mir die Option zum Rendern mit CUDA an. Aber leider funktioniert CUDA nicht mit GCC9 :(

Eigentlich würde ich dies offen lassen (aber ich werde es auf Rishi lassen), da wir mit @debarshiray darüber Hosttreiber in den Container zu übertragen, sodass die Treiber nicht manuell im Container installiert werden müssen. Wir haben eine funktionierende WIP-Lösung dafür.

Das wäre toll!

Wir haben mit @debarshiray darüber Hosttreiber an die
Container, sodass die Treiber nicht manuell im Container installiert werden müssen.

Ja, ich stimme zu, dass dies das Richtige sein wird. OpenGL-Treiber haben ein Kernel-Modul und einige User-Space-Komponenten (zB Shared Libraries), die miteinander kommunizieren. Im Fall von NVIDIA ist die Schnittstelle zwischen diesen beiden Komponenten nicht stabil und daher müssen die Userspace-Bits im Container mit dem Kernelmodul auf dem Host übereinstimmen. Diese beiden können nicht mehr synchron sein, wenn Ihr Host hinter dem Container zurückbleibt oder umgekehrt.

Das Problem beim Durchsickern der Dateien in den Container besteht darin, dass irgendwo eine Liste dieser Dateien geführt wird, da sie von Version zu Version variieren. Dies wäre viel einfacher, wenn es irgendwo auf dem Host ein bekanntes nvidia- Verzeichnis gäbe, das gebunden werden könnte, da wir uns dann nicht um die Namen und Speicherorte der einzelnen Dateien selbst kümmern müssten. Leider ist das nicht der Fall.

Als ich mich umschaute, stellte ich fest, dass die Lösung von Flatpak ein vernünftiger Kompromiss war. Kurz gesagt, es erfindet und erzwingt dieses bekannte nvidia- Verzeichnis. Es erwartet, dass Distributoren des Host-Betriebssystems alle User-Space-Dateien in /var/lib/flatpak/extension/org.freedesktop.Platform.GL.host/x86_64/1.4 und dies wird durch Modifizieren des Pakets implementiert, das den NVIDIA-Treiber liefert.

Nachdem dies erledigt ist, müssen wir herausfinden, wo diese Dateien im Container platziert werden und wie die Laufzeitumgebung des Containers darauf verweist.

Nvidia hat eine eigene Lösung für dieses nvidia-container-runtime-hook die sehr gut mit Podman funktioniert, das durch einen oci-Prestart-Hook ausgelöst wird. Ich habe gerade ein Problem bei der Verwendung von --uidmap s, was dazu führt, dass die Berechtigungen zum Ausführen von ldconfig :

could not start /sbin/ldconfig: mount operation failed: /proc: operation not permitted

Es kann für Toolbox besser sein, zu versuchen, dieses vorhandene Tool zu integrieren, anstatt eine andere Implementierung beizubehalten.

Problem im Zusammenhang mit dem Uidmap-Berechtigungsproblem:

https://github.com/NVIDIA/libnvidia-container/issues/49

Ich habe versucht, Steam im Toolbox-Bug #343 auszuführen. Ich habe die Toolbox nicht gepatcht, Steam läuft und opengl funktioniert, aber vulkan scheint nicht zu funktionieren, habe vkmark und Rise of Tomb Raider auf Steam ausprobiert.

Irgendwelche Ideen, wie man es zum Laufen bringt?

Ich habe gesehen, dass Singularity ccontainer dieses Problem ohne libnvidia-container behebt. Sie verwenden eine Liste der benötigten Dateien

Wie ist also der Stand der Verwendung von Nvidia-GPU-Treibern im Container im Jahr 2021?
Ich kann /dev/nvidia0 und /dev/nvidiactl gemountet werden.
Allerdings kann ich Nvidia-Treiber nicht erfolgreich installieren. Die Installation wird normal fortgesetzt, aber die Überprüfung mit modinfo -F version nvidia führt zu einem Fehler:
modinfo: ERROR: Module alias nvidia not found. .
Und Nvidia Container Toolkit wird in Fedora nicht offiziell unterstützt, daher scheint es keine gute Idee zu sein, Fedora Silverblue zu verwenden.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen