Toolbox: Pilote propriétaire Nvidia

Créé le 16 avr. 2019  ·  16Commentaires  ·  Source: containers/toolbox

Tout d'abord, beau projet !

Si j'utilise un pilote propriétaire Nvidia, les logiciels OpenGL (comme Blender) ne fonctionnent pas dans le conteneur de la boîte à outils. J'ai essayé d'installer le pilote propriétaire à l'intérieur du conteneur, il s'installe mais les logiciels OpenGL ne fonctionnent pas. Est-il nécessaire d'installer plus de choses? Ou définir une variable d'environnement ?

Merci!

1. Bug 5. Help Wanted

Commentaire le plus utile

Donc, pour que les éléments NVIDIA fonctionnent dans la boîte à outils, je devais le faire (inspiré de https://github.com/thewtex/docker-opengl-nvidia):

1) Vous devez patcher la boîte à outils pour lier le montage de /dev/nvidia0 et /dev/nvidiactl à la boîte à outils et configurer les éléments X11 - voir https://github.com/tpopela/toolbox/commit/40231e8591d70065199c0df9b6811c2f9e9d7269

2) Téléchargez les pilotes propriétaires NVIDIA sur l'hôte :

#!/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) Installez les pilotes tout en étant à l'intérieur de la Toolbox :

#!/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"

Tous les 16 commentaires

Toolbox est un conteneur, vous devrez mapper votre carte graphique à l'intérieur ou faire les choses comme le fait nvidia-docker.

@Findarato Vous voulez dire ajouter quelque chose comme --volume /dev/nvidia0:/dev/nvidia0 et d'autres fichiers /dev ?

Donc, pour que les éléments NVIDIA fonctionnent dans la boîte à outils, je devais le faire (inspiré de https://github.com/thewtex/docker-opengl-nvidia):

1) Vous devez patcher la boîte à outils pour lier le montage de /dev/nvidia0 et /dev/nvidiactl à la boîte à outils et configurer les éléments X11 - voir https://github.com/tpopela/toolbox/commit/40231e8591d70065199c0df9b6811c2f9e9d7269

2) Téléchargez les pilotes propriétaires NVIDIA sur l'hôte :

#!/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) Installez les pilotes tout en étant à l'intérieur de la Toolbox :

#!/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 ça a marché. Merci!

Je suis content que ça marche ! Mais il y a eu une erreur qui pourrait entraîner des dysfonctionnements après le redémarrage de l'hôte - vous devrez appliquer https://github.com/tpopela/toolbox/commit/3db450a8e5762399fd81c848f311da950437dd04 en plus du correctif précédent.

@tpopela Nous pourrions peut-être nous en sortir sans montage /tmp/.x11-unix . De nos jours, le serveur X.org écoute sur un socket UNIX abstrait et un socket UNIX sur le système de fichiers. Le premier ne fonctionne pas si vous avez un espace de noms réseau, mais la boîte à outils n'en a pas (car podman create --net host ), et c'est pourquoi les applications X fonctionnent. Ce dernier est situé à /tmp/.x11-unix et est utilisé par les conteneurs Flatpak car ceux-ci ont des espaces de noms réseau.

Les références:

Ah d'accord @debarshiray ! Merci pour les éclaircissements. Je peux confirmer que ne pas lier le montage du /tmp/X11-unix ne change rien et que l'intégration fonctionne (j'ai essayé d'exécuter Blender ici).

Il y a peut-être un petit changement après que nous ayons lié le montage de l'ensemble /dev . Blender recherche maintenant nvcc (trucs CUDA) dans PATH et ne peut pas le trouver.

Avec la fusion de https://github.com/debarshiray/toolbox/pull/119, ce problème peut être résolu, car Nvidia fonctionne désormais avec un pilote propriétaire. Il est juste nécessaire d'installer le pilote nvidia une fois dans le conteneur de la boîte à outils. Les scripts de @tpopela aident à l'installation du pilote. @tpopela vous devez installer CUDA Toolkit . Pour le faire installer, j'ai passé les paramètres --override et --toolkit . Après avoir installé CUDA Toolkit Blender, montrez-moi l'option de rendu à l'aide de CUDA. Mais malheureusement CUDA ne fonctionne pas avec GCC9 :(

En fait, je laisserais cela ouvert (mais je le laisserai sur Rishi) car nous pensions avec @debarshiray à la fuite des pilotes hôtes NVIDIA dans le conteneur, il ne sera donc pas nécessaire d'installer manuellement les pilotes dans le conteneur. Nous avons une solution WIP fonctionnelle pour cela.

Ce serait génial!

nous pensions avec @debarshiray à la fuite des pilotes hôtes NVIDIA vers le
conteneur, il ne sera donc pas nécessaire d'installer manuellement les pilotes dans le conteneur.

Oui, je suis d'accord que ce sera la bonne chose à faire. Les pilotes OpenGL ont un module noyau et certains composants de l'espace utilisateur (par exemple, des bibliothèques partagées) qui communiquent entre eux. Dans le cas de NVIDIA, l'interface entre ces deux composants n'est pas stable et, par conséquent, les bits de l'espace utilisateur à l'intérieur du conteneur doivent correspondre au module du noyau sur l'hôte. Ces deux peuvent se désynchroniser si votre hôte est en retard par rapport au conteneur ou vice versa.

Le problème avec la fuite des fichiers dans le conteneur est de maintenir une liste de ces fichiers quelque part car ils varient d'une version à l'autre. Ce serait beaucoup plus simple s'il y avait un répertoire nvidia bien connu quelque part sur l'hôte qui pourrait être monté par liaison, car nous n'aurions alors pas à nous soucier des noms et des emplacements des fichiers individuels eux-mêmes. Malheureusement ce n'est pas le cas.

En regardant autour de moi, j'ai trouvé que la solution de Flatpak était un compromis raisonnable. En bref, il invente et applique ce répertoire nvidia bien connu. Il s'attend à ce que les distributeurs du système d'exploitation hôte mettent tous les fichiers de l'espace utilisateur dans /var/lib/flatpak/extension/org.freedesktop.Platform.GL.host/x86_64/1.4 et cela est implémenté en modifiant le package contenant le pilote NVIDIA.

Cela fait, nous devrons déterminer où placer ces fichiers à l'intérieur du conteneur et comment leur pointer l'environnement d'exécution du conteneur.

Nvidia a sa propre solution pour ce nvidia-container-runtime-hook qui fonctionne très bien avec podman déclenché par un hook oci prestart. Je viens de rencontrer des problèmes en ce moment lors de l'utilisation de --uidmap s entraînant la perte des autorisations pour exécuter ldconfig :

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

Il peut être préférable pour Toolbox d'essayer de s'intégrer à cet outil existant plutôt que de maintenir une autre implémentation.

Problème lié au problème d'autorisation uidmap :

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

J'essayais d'exécuter steam dans le bogue #343 de la boîte à outils. Je n'ai pas corrigé la boîte à outils, Steam fonctionne et opengl fonctionne mais vulkan ne semble pas fonctionner, j'ai essayé vkmark et Rise of Tomb Raider sur steam.

Des idées pour le faire fonctionner ?

J'ai vu que Singularity ccontainer résout ce problème sans libnvidia-container . Ils utilisent une liste de fichiers nécessaires

Alors, quel est le statut de l'utilisation des pilotes GPU Nvidia dans le conteneur en 2021 ?
Je peux /dev/nvidia0 et /dev/nvidiactl sont montés.
Cependant, je ne peux pas installer les pilotes Nvidia avec succès. L'installation se déroule normalement mais la vérification avec modinfo -F version nvidia donne une erreur :
modinfo: ERROR: Module alias nvidia not found. .
Et Nvidia Container Toolkit n'est pas officiellement pris en charge dans Fedora, il ne semble donc pas être une bonne idée de l'utiliser avec Fedora Silverblue.

Cette page vous a été utile?
0 / 5 - 0 notes