Toolbox: Controlador propietario de Nvidia

Creado en 16 abr. 2019  ·  16Comentarios  ·  Fuente: containers/toolbox

Primero, ¡gran proyecto!

Si estoy usando un controlador propietario de Nvidia, los softwares OpenGL (como Blender) no funcionan dentro del contenedor de la caja de herramientas. Intenté instalar el controlador propietario dentro del contenedor, se instala pero el software OpenGL no funciona. ¿Es necesario instalar más cosas? ¿O establecer alguna variable env?

¡Gracias!

1. Bug 5. Help Wanted

Comentario más útil

Entonces, para que las cosas de NVIDIA funcionen dentro de Toolbox, tuve que hacer esto (inspirado en https://github.com/thewtex/docker-opengl-nvidia):

1) Tiene que parchear la Caja de herramientas para vincular el montaje de / dev / nvidia0 y / dev / nvidiactl a la Caja de herramientas y configurar las cosas de X11; consulte https://github.com/tpopela/toolbox/commit/40231e8591d70065199c0df9b6811c2f9e9d7269

2) Descargue los controladores propietarios de NVIDIA en el host:

#!/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) Instale los controladores mientras se encuentra dentro de la Caja de herramientas:

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

Todos 16 comentarios

Toolbox es un contenedor, tendrías que mapear tu tarjeta gráfica en el interior o hacer las cosas como lo hace nvidia-docker.

@Findarato ¿ Te refieres a agregar algo como --volume /dev/nvidia0:/dev/nvidia0 y otros archivos / dev?

Entonces, para que las cosas de NVIDIA funcionen dentro de Toolbox, tuve que hacer esto (inspirado en https://github.com/thewtex/docker-opengl-nvidia):

1) Tiene que parchear la Caja de herramientas para vincular el montaje de / dev / nvidia0 y / dev / nvidiactl a la Caja de herramientas y configurar las cosas de X11; consulte https://github.com/tpopela/toolbox/commit/40231e8591d70065199c0df9b6811c2f9e9d7269

2) Descargue los controladores propietarios de NVIDIA en el host:

#!/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) Instale los controladores mientras se encuentra dentro de la Caja de herramientas:

#!/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 funcionó. ¡Gracias!

¡Me alegro de que haya funcionado! Pero hubo un error que podría provocar un mal funcionamiento después de reiniciar el host; deberá aplicar https://github.com/tpopela/toolbox/commit/3db450a8e5762399fd81c848f311da950437dd04 sobre el parche anterior.

@tpopela Es posible que /tmp/.x11-unix . En estos días, el servidor X.org escucha en un socket UNIX abstracto y un socket UNIX en el sistema de archivos. El primero no funciona si tiene un espacio de nombres de red, pero Toolbox no tiene uno (porque podman create --net host ), y por eso las aplicaciones X funcionan. Este último se encuentra en /tmp/.x11-unix y lo utilizan los contenedores Flatpak porque tienen espacios de nombres de red.

Referencias:

¡Ah, ok @debarshiray! Gracias por la aclaración. Puedo confirmar que no vincular el montaje de /tmp/X11-unix no cambia nada y la integración funciona (intenté ejecutar Blender aquí).

Tal vez haya un pequeño cambio después de que estemos el montaje de todo el /dev . Blender ahora busca nvcc (cosas CUDA) en PATH y no puede encontrarlo.

Con la fusión de https://github.com/debarshiray/toolbox/pull/119, este problema puede resolverse, ya que Nvidia está trabajando ahora con un controlador propietario. Solo es necesario instalar el controlador nvidia una vez dentro del contenedor de la caja de herramientas. Los scripts de @tpopela ayudan con la instalación del controlador. @tpopela tienes que instalar CUDA Toolkit . Para que se instale, pasé los parámetros --override y --toolkit . Después de instalar CUDA Toolkit Blender, muéstrame la opción para renderizar usando CUDA. Pero, lamentablemente, CUDA no funciona con GCC9 :(

En realidad, dejaría esto abierto (pero lo dejaré en Rishi) ya que estábamos pensando con @debarshiray sobre filtrar los controladores de host de NVIDIA al contenedor, por lo que no habrá necesidad de instalar manualmente los controladores en el contenedor. Tenemos una solución WIP funcional para ello.

¡Eso seria genial!

estábamos pensando con @debarshiray en filtrar los controladores de host de NVIDIA al
contenedor, por lo que no será necesario instalar manualmente los controladores en el contenedor.

Sí, estoy de acuerdo en que esto será lo correcto. Los controladores OpenGL tienen un módulo de kernel y algunos componentes de espacio de usuario (por ejemplo, bibliotecas compartidas) que se comunican entre sí. En el caso de NVIDIA, la interfaz entre estos dos componentes no es estable y, por lo tanto, los bits de espacio de usuario dentro del contenedor deben coincidir con el módulo del kernel en el host. Estos dos pueden desincronizarse si su host está rezagado con respecto al contenedor o viceversa.

El problema de filtrar los archivos al contenedor es mantener una lista de esos archivos en algún lugar porque varían de una versión a otra. Esto sería mucho más simple si hubiera un directorio nvidia bien conocido en algún lugar del host que pudiera montarse en un enlace porque entonces no tendríamos que preocuparnos por los nombres y ubicaciones de los archivos individuales. Desafortunadamente ese no es el caso.

Mirando a mi alrededor, encontré que la solución de Flatpak era un compromiso razonable. En resumen, inventa y aplica este conocido directorio de nvidia . Se espera que los distribuidores del sistema operativo host coloquen todos los archivos de espacio de usuario en /var/lib/flatpak/extension/org.freedesktop.Platform.GL.host/x86_64/1.4 y eso se implementa modificando el paquete que envía el controlador NVIDIA.

Una vez hecho esto, tendríamos que averiguar dónde colocar estos archivos dentro del contenedor y cómo apuntar el entorno de ejecución del contenedor hacia ellos.

Nvidia tiene su propia solución para este nvidia-container-runtime-hook que funciona muy bien con podman activado por un gancho de prearranque oci. Me acabo de encontrar con un problema en este momento cuando uso --uidmap s, lo que resulta en la pérdida de permisos para ejecutar ldconfig :

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

Puede ser mejor que Toolbox intente integrarse con esta herramienta existente en lugar de mantener otra implementación.

Problema relacionado con el problema de permisos de uidmap:

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

Estaba tratando de ejecutar Steam en el error # 343 de la caja de herramientas. No parcheé la caja de herramientas, Steam se ejecuta y opengl funciona, pero vulkan no parece funcionar, probé vkmark y Rise of Tomb Raider en Steam.

¿Alguna idea de cómo hacer que funcione?

Vi que Singularity ccontainer solucionó este problema sin libnvidia-container . Usan una lista de archivos necesarios

Entonces, ¿cuál es el estado del uso de controladores de GPU Nvidia en un contenedor en 2021?
Puedo /dev/nvidia0 y /dev/nvidiactl están montados.
Sin embargo, no puedo instalar los controladores de Nvidia correctamente. La instalación procede normalmente, pero al comprobar con modinfo -F version nvidia obtiene un error:
modinfo: ERROR: Module alias nvidia not found. .
Y Nvidia Container Toolkit no es oficialmente compatible con Fedora, por lo que no parece una buena idea usarlo con Fedora Silverblue.

¿Fue útil esta página
0 / 5 - 0 calificaciones