Cómo pasar la GPU NVIDIA a los contenedores Proxmox VE 8 para aceleración CUDA/AI y transcodificación de medios

Como Pasar La Gpu Nvidia A Los Contenedores Proxmox Ve 8 Para Aceleracion Cuda Ai Y Transcodificacion De Medios



Si tiene una GPU NVIDIA instalada en su servidor Proxmox VE, puede pasarla a un contenedor Proxmox VE LXC y usarla en el contenedor para aceleración CUDA/AI (es decir, TensorFlow, PyTorch). También puede utilizar la GPU NVIDIA para transcodificación de medios, transmisión de video, etc. en un contenedor Proxmox VE LXC con Plex Media Server o NextCloud instalado (por ejemplo).

En este artículo, le mostraremos cómo pasar una GPU NVIDIA a un contenedor Proxmox VE 8 LXC para que pueda usarlo para aceleración CUDA/AI, transcodificación de medios u otras tareas que requieran una GPU NVIDIA.







Tema de contenidos:

Instalación de los controladores de GPU NVIDIA en Proxmox VE 8

Para pasar una GPU NVIDIA a un contenedor Proxmox VE LXC, debe tener los controladores de GPU NVIDIA instalados en su servidor Proxmox VE 8. Si necesita ayuda para instalar la última versión de los controladores oficiales de GPU NVIDIA en su servidor Proxmox VE 8, Lee este artículo .



Asegurarse de que los módulos del kernel de la GPU NVIDIA estén cargados en Proxmox VE 8 automáticamente

Una vez que tenga los controladores de la GPU NVIDIA instalados en su servidor Proxmox VE 8, debe asegurarse de que los módulos del kernel de la GPU NVIDIA se carguen automáticamente en el momento del arranque.



Primero, cree un nuevo archivo como 'nvidia.conf' en el directorio '/etc/modules-load.d/' y ábralo con el editor de texto nano.





$ nano / etc. / módulos-carga.d / nvidia.conf

Añade las siguientes líneas y presiona + X seguido de “Y” y para guardar el archivo 'nvidia.conf':



nvidia

nvidia_uvm

Para que los cambios surtan efecto, actualice el archivo “initramfs” con el siguiente comando:

$ actualización-initramfs -en

Por alguna razón, Proxmox VE 8 no crea los archivos de dispositivo GPU NVIDIA necesarios en el directorio '/dev/'. Sin esos archivos de dispositivo, los contenedores Promox VE 8 LXC no podrán utilizar la GPU NVIDIA.

Para asegurarse de que Proxmox VE 8 cree los archivos del dispositivo GPU NVIDIA en el directorio '/dev/' en el momento del arranque, cree un archivo de reglas udev '70-nvidia.rules' en el directorio '/etc/udev/rules.d/'.   directorio y ábralo con el editor de texto nano de la siguiente manera:

$ nano / etc. / udev / reglas.d / 70 -nvidia.reglas

Escriba las siguientes líneas en el archivo “70-nvidia.rules” y presione  + X seguido de “Y” y para guardar el archivo:

# crear los archivos necesarios del dispositivo NVIDIA en /dev/*

NÚCLEO == 'nvidia' , EJECUTAR+= '/bin/bash -c '/usr/bin/nvidia-smi -L && /bin/chmod 0666 /dev/nvidia*''

NÚCLEO == 'nvidia_uvm' , EJECUTAR+= '/bin/bash -c '/usr/bin/nvidia-modtest -c0 -u && /bin/chmod 0666 /dev/nvidia-uvm*''

Para que los cambios surtan efecto, reinicie su servidor Proxmox VE 8 de la siguiente manera:

$ reiniciar

Una vez que se inicia su servidor Proxmox VE 8, los módulos del kernel NVIDIA deberían cargarse automáticamente como puede ver en la siguiente captura de pantalla:

$ lsmod | agarre nvidia

Los archivos del dispositivo NVIDIA requeridos también deben completarse en el directorio '/dev' de su servidor Proxmox VE 8. Tenga en cuenta los ID de CGroup de los archivos del dispositivo NVIDIA. Debe permitir esas ID de CGroup en el contenedor LXC donde desea pasar las GPU NVIDIA desde su servidor Proxmox VE 8. En nuestro caso, los ID de CGroup son 195, 237 y 226.

$ es -lh / desarrollador / nvidia *

$ es -lh / desarrollador / seco

Creación de un contenedor Proxmox VE 8 LXC para transferencia de GPU NVIDIA

Usamos un contenedor Ubuntu 22.04 LTS Proxmox VE 8 LXC en este artículo para la demostración, ya que las bibliotecas NVIDIA CUDA y NVIDIA cuDNN son fáciles de instalar en Ubuntu 22.04 LTS desde los repositorios de paquetes de Ubuntu y es más fácil probar si la aceleración NVIDIA CUDA está funcionando. . Si lo desea, también puede utilizar otras distribuciones de Linux. En ese caso, los comandos de instalación de NVIDIA CUDA y NVIDIA cuDNN variarán. Asegúrese de seguir las instrucciones de instalación de NVIDIA CUDA y NVIDIA cuDNN para la distribución de Linux que desee.

Si necesita ayuda para crear un contenedor Proxmox VE 8 LXC, Lee este artículo .

Configuración de un contenedor LXC para el paso a través de GPU NVIDIA en Promox VE 8

Para configurar un contenedor LXC (contenedor 102, digamos) para el paso a través de GPU NVIDIA, abra el archivo de configuración del contenedor LXC desde el shell Proxmox VE con el editor de texto nano de la siguiente manera:

$ nano / etc. / pve / lxc / 102 .conf

Escriba las siguientes líneas al final del archivo de configuración del contenedor LXC:

lxc.cgroup.devices.allow: c 195 : * rwm

lxc.cgroup.devices.allow: c 237 : * rwm

lxc.cgroup.devices.allow: c 226 : * rwm

entrada.lxc.mount: / desarrollador / nvidia0          dev / nvidia0          ninguno unir ,opcional, crear = archivo

entrada.lxc.mount: / desarrollador / nvidiactl        dev / nvidiactl        ninguno unir ,opcional, crear = archivo

entrada.lxc.mount: / desarrollador / nvidia-modeset  dev / nvidia-modeset  ninguno unir ,opcional, crear = archivo

entrada.lxc.mount: / desarrollador / nvidia-uvm       dev / nvidia-uvm       ninguno unir ,opcional, crear = archivo

entrada.lxc.mount: / desarrollador / Desarrollador de herramientas nvidia-uvm / nvidia-uvm-herramientas ninguna unir ,opcional, crear = archivo

entrada.lxc.mount: / desarrollador / dri              dev / dri              ninguna unir ,opcional, crear =

Asegúrese de reemplazar los ID de CGroup en las líneas 'lxc.cgroup.devices.allow' del archivo de configuración del contenedor LXC. Una vez que hayas terminado, presiona  + X seguido de 'Y' y para guardar el archivo de configuración del contenedor LXC.

Ahora, inicie el contenedor LXC desde el tablero de Proxmox VE 8.

Si la transferencia de la GPU NVIDIA se realiza correctamente, el contenedor LXC debería iniciarse sin ningún error y debería ver los archivos del dispositivo NVIDIA en el directorio '/dev' del contenedor.

$ es -lh / desarrollador / nvidia *

$ es -lh / desarrollador / seco

Instalación de los controladores de GPU NVIDIA en el contenedor Proxmox VE 8 LXC

Estamos utilizando un contenedor Ubuntu 22.04 LTS LXC en nuestro servidor Proxmox VE 8 para demostración. Si está utilizando otra distribución de Linux en el contenedor LXC, sus comandos variarán ligeramente de los nuestros. Por lo tanto, asegúrese de ajustar los comandos según la distribución de Linux que esté utilizando en el contenedor.

Puede encontrar la versión de los controladores de GPU NVIDIA que instaló en su servidor Proxmox VE 8 con el comando 'nvidia-smi'. Como puede ver, tenemos los controladores de GPU NVIDIA versión 535.146.02 instalados en nuestro servidor Proxmox VE 8. Por lo tanto, también debemos instalar los controladores de GPU NVIDIA versión 535.146.02 en nuestro contenedor LXC.

$ nvidia-smi

Primero, instale CURL en el contenedor LXC de la siguiente manera:

$ actualización adecuada && apto instalar rizo -y

CURL debe instalarse en el contenedor LXC.

Para instalar los controladores de GPU NVIDIA versión 535.146.02 (digamos), exporte la variable de entorno NVIDIA_VERSION y ejecute el comando CURL (en el contenedor) para descargar la versión requerida del archivo de instalación de los controladores de GPU NVIDIA.

$ exportar NVIDIA_VERSIÓN = '535.146.02'

$ rizo -O 'https://us.download.nvidia.com/XFree86/Linux-x86_64/ ${NVIDIA_VERSION} /NVIDIA-Linux-x86_64- ${NVIDIA_VERSION} .correr'

La versión correcta del archivo de instalación de los controladores de la GPU NVIDIA debe descargarse en el contenedor LXC, como puede ver en la siguiente captura de pantalla:

Ahora, agregue un permiso ejecutable al archivo de instalación de los controladores de la GPU NVIDIA en el contenedor de la siguiente manera:

$ chmod +x NVIDIA-Linux-x86_64-535.146.02.run

Para instalar los controladores de GPU NVIDIA en el contenedor, ejecute el archivo de instalación de los controladores de GPU NVIDIA con el “–no-kernel-module”   opción de la siguiente manera:

$  . / NVIDIA-Linux-x86_64-535.146.02.run --no-kernel-module

Una vez que vea esta opción, seleccione 'Aceptar' y presione .

Seleccione “Aceptar” y presione .

Seleccione “Sí” y presione .

Seleccione “Aceptar” y presione .

Los controladores de la GPU NVIDIA se están instalando en el contenedor LXC. Tarda unos segundos en completarse.

Una vez que vea este mensaje, seleccione 'Sí' y presione .

Seleccione “Aceptar” y presione . Los controladores de la GPU NVIDIA deben instalarse en el contenedor LXC.

Para confirmar si los controladores de la GPU NVIDIA están instalados y funcionando, ejecute el comando 'nvidia-smi' en el contenedor LXC. Como puede ver, la versión 535.146.02 del controlador de GPU NVIDIA (la misma versión que está instalada en el servidor Proxmox VE 8) está instalada en el contenedor LXC y detectó nuestra GPU NVIDIA RTX 4070 correctamente.

$ nvidia-smi

Instalación de NVIDIA CUDA y cuDNN en el contenedor Proxmox VE 8 LXC

Estamos utilizando un contenedor Ubuntu 22.04 LTS LXC en nuestro servidor Proxmox VE 8 para demostración. Si está utilizando otra distribución de Linux en el contenedor LXC, sus comandos variarán ligeramente de los nuestros. Por lo tanto, asegúrese de ajustar los comandos según la distribución de Linux que esté utilizando en el contenedor.

Para instalar NVIDIA CUDA y cuDNN en el contenedor Ubuntu 22.04 LTS Proxmox VE 8, ejecute el siguiente comando en el contenedor:

$ apto instalar kit de herramientas nvidia-cuda-esencial para la compilación nvidia-cudnn

Para confirmar la instalación, presione “Y” y luego presione .

Los paquetes necesarios se están descargando e instalando. Tarda un poco en completarse.

Una vez que vea esta ventana, seleccione 'Aceptar' y presione .

Seleccione “Acepto” y presione .

La instalación debería continuar.

El instalador está descargando el archivo de la biblioteca NVIDIA cuDNN de NVIDIA. Es un archivo grande, por lo que lleva mucho tiempo completarlo.

Una vez descargado el archivo de la biblioteca NVIDIA cuDNN, la instalación debería continuar como de costumbre.

En este punto, NVIDIA CUDA y cuDNN deberían estar instalados en el contenedor Ubuntu 22.04 LTS Proxmox VE 8 LXC.

Comprobar si la aceleración NVIDIA CUDA funciona en el contenedor Proxmox VE 8 LXC

Para verificar si NVIDIA CUDA está instalado correctamente, verifique si el comando 'nvcc' está disponible en el contenedor Proxmox VE 8 de la siguiente manera:

$ NVCC --versión

Como podéis ver, tenemos NVIDIA CUDA 11.5 instalado en nuestro contenedor Proxmox VE 8.

Ahora, escribamos, compilemos y ejecutemos un programa CUDA C simple y veamos si todo funciona como se esperaba.

Primero, cree un directorio de proyecto “~/code” en el contenedor Proxmox VE 8 para mantener los archivos organizados.

$ mkdir ~ / código

Navegue hasta el directorio del proyecto “~/code” de la siguiente manera:

$ cd `/ código

Cree un nuevo archivo como 'hello.cu' en el directorio '~/code' del contenedor Proxmox VE 8 y ábralo con el editor de texto nano:

$ nano hello.cu

Escribe las siguientes líneas de código en el archivo 'hello.cu':

#incluir

__global__ void decir hola ( ) {
imprimirf ( '¡Hola mundo desde la GPU! \norte ' ) ;
}

ent principal ( ) {
imprimirf ( '¡Hola mundo desde la CPU! \norte ' ) ;

di hola << 1 , 1 >> ( ) ;
cudaDeviceSynchronize ( ) ;

devolver 0 ;
}

Una vez que hayas terminado, presiona  + X seguido de “Y”   y para guardar el archivo 'hello.cu'.

Para compilar el programa CUDA 'hello.cu' en el contenedor Proxmox VE 8, ejecute los siguientes comandos:

$ nvcc hola.cu -O Hola

Ahora, puede ejecutar el programa CUDA 'hola' en el contenedor Proxmox VE 8 de la siguiente manera:

$ . / Hola

Si el contenedor Proxmox VE 8 puede usar la GPU NVIDIA para la aceleración NVIDIA CUDA, el programa imprimirá dos líneas como se muestra en la siguiente captura de pantalla.

Si no se puede acceder a la GPU NVIDIA desde el contenedor Proxmox VE 8, el programa imprimirá solo la primera línea que es '¡Hola mundo desde la CPU!', no la segunda línea.

Conclusión

En este artículo, le mostramos cómo pasar una GPU NVIDIA desde el host Proxmox VE 8 a un contenedor Proxmox VE 8 LXC. También le mostramos cómo instalar la misma versión de los controladores de GPU NVIDIA en el contenedor Proxmox VE 8 como host de Proxmox VE. Finalmente, le mostramos cómo instalar NVIDIA CUDA y NVIDIA cuDNN en un contenedor Ubuntu 22.04 LTS Proxmox VE 8 y compilar y ejecutar un programa NVIDIA CUDA simple en el contenedor Proxmox VE 8.

Referencias: