Instalación de controladores de GPU de NVIDIA en máquinas virtuales de la serie N con Linux

Precaución

En este artículo se hace referencia a CentOS, una distribución de Linux que está cerca de su estado Final de ciclo vida (EOL). Tenga en cuenta su uso y planifique en consecuencia. Para más información, consulte la Guía de fin de ciclo de vida de CentOS.

Se aplica a: ✔️ Máquinas virtuales Linux

Para aprovechar las funcionalidades de GPU de las VM de la serie N de Azure respaldadas por GPU de NVIDIA, deben instalarse controladores de GPU de NVIDIA. La extensión de controlador de GPU de NVIDIA instala los controladores CUDA de NVIDIA o GRID adecuados en una máquina virtual de la serie N. Instale o administre la extensión mediante Azure Portal o con herramientas como las plantillas de la CLI de Azure o Azure Resource Manager. Consulte la documentación de la extensión de controlador de GPU de NVIDIA para ver las distribuciones compatibles y los pasos de implementación.

Si decide instalar manualmente los controladores de GPU de NVIDIA, este artículo proporciona los pasos de instalación y verificación, los controladores y las distribuciones compatibles. También está disponible la información de instalación manual del controlador para las máquinas virtuales Windows.

Para conocer las especificaciones de máquina virtual de la serie N, las capacidades de almacenamiento y los detalles del disco, vea Tamaño de máquinas virtuales para GPU Linux.

Distribuciones y controladores admitidos

Precaución

En este artículo se hace referencia a CentOS, una distribución de Linux que está cerca de su estado Final de ciclo vida (EOL). Tenga en cuenta su uso y planeación en consecuencia.

Controladores NVIDIA CUDA

Para obtener los controladores de CUDA y los sistemas operativos compatibles más recientes, visite el sitio web de NVIDIA. Asegúrese de instalar o actualizar a los controladores CUDA admitidos más recientes para su distribución.

Nota

Los controladores CUDA compatibles más recientes para máquinas virtuales SKU originales de la serie NC son actualmente 470.82.01. No se admiten versiones posteriores de los controladores en las tarjetas K80 de NC.

Nota:

Las máquinas virtuales de Azure NVads A10 v5 solo admiten GRID 14.1(510.73) o versiones posteriores del controlador. El controlador vGPU para la SKU A10 es un controlador unificado que admite cargas de trabajo de gráficos y de proceso.

Sugerencia

Como alternativa a la instalación manual de controladores de CUDA en una máquina virtual Linux, puede implementar una imagen de Data Science Virtual Machine de Azure. Las ediciones de DSVM para Ubuntu 16.04 LTS o CentOS 7.4 preinstalan los controladores NVIDIA CUDA, la biblioteca CUDA Deep Neural Network Library y otras herramientas.

Controladores de NVIDIA GRID

Microsoft redistribuye los instaladores del controlador NVIDIA GRID para VM de las series NV y NVv3 que se emplean como estaciones de trabajo virtuales o para aplicaciones virtuales. Instale estos controladores GRID en máquinas virtuales de la serie NV de Azure y solo en los sistemas operativos enumerados en la tabla siguiente. Estos controladores incluyen licencias del software GRID Virtual GPU en Azure. No es necesario configurar un servidor de licencias de software vGPU NVIDIA.

Los controladores GRID redistribuidos por Azure no funcionan en la mayoría de las máquinas virtuales que no son de la serie NV, como NC, NCv2, NCv3, ND y las máquinas virtuales de la series NDv2, pero funcionan en la serie NCasT4v3.

Para obtener más información sobre las versiones específicas de la vGPU y la rama de controladores, visite la página web de NVIDIA.

Distribución Controlador
Ubuntu 20.04 LTS, 22.04 LTS

Red Hat Enterprise Linux 7.9, 8.6, 8.8

SUSE Linux Enterprise Server 15 SP2, 12 SP2,12 SP5

Rocky Linux 8.4
NVIDIA vGPU 16.3, rama de controlador R535 (.exe)

NVIDIA vGPU 16.2, rama de controlador R535 (.exe)

Nota:

En el caso de las máquinas virtuales de Azure NVads A10 v5, se recomienda que los clientes siempre estén en la versión más reciente del controlador. La última rama de controlador principal de NVIDIA (n) solo es compatible con versiones anteriores con la rama principal anterior (n-1). Por ejemplo, vGPU 17.x solo es compatible con vGPU 16.x. Las máquinas virtuales que todavía se ejecutan en n-2 o versiones inferiores pueden ver errores de controlador cuando la rama de unidad más reciente se implementa en hosts de Azure.

Las máquinas virtuales NVs_v3 solo admiten la versión de controlador de vGPU 16 o inferior.

Para obtener la lista completa de los vínculos de todos los controladores de Nvidia GRID anteriores, visite GitHub.

Advertencia

La instalación de software de terceros en productos de Red Hat puede afectar a los términos de soporte técnico de Red Hat. Vea el artículo de Knowledgebase de Red Hat.

Instalación de controladores CUDA en máquinas virtuales de la serie N

Estos son los pasos para instalar controladores CUDA desde el kit de herramientas de NVIDIA CUDA en máquinas virtuales de la serie N.

Los desarrolladores de C y C++, si lo desean, pueden instalar el kit de herramientas completo para crear aplicaciones aceleradas por GPU. Para obtener más información, consulte la guía de instalación de CUDA.

Para instalar los controladores de CUDA, realice una conexión SSH a cada máquina virtual. Para comprobar que el sistema dispone de una GPU compatible con CUDA, ejecute el siguiente comando:

lspci | grep -i NVIDIA

El resultado es similar al siguiente ejemplo (mostrando una tarjeta NVIDIA Tesla K80):

Resultado del comando de Ispci

lspci enumera los dispositivos PCIe de la máquina virtual, incluidas GPU y la NIC de InfiniBand, si los hay. Si lspci no se devuelve correctamente, puede que tenga que instalar LIS en CentOS/RHEL.

Luego, ejecute los comandos de instalación específicos de su distribución.

Ubuntu

Ubuntu empaqueta los controladores propietarios de NVIDIA. Estos controladores proceden directamente de NVIDIA y simplemente son empaquetados por Ubuntu para que puedan ser administrados automáticamente por el sistema. La descarga e instalación de controladores de otro origen puede provocar la inoperabilidad del sistema. Además, la instalación de controladores de terceros requiere pasos adicionales en máquinas virtuales con TrustedLaunch y arranque seguro habilitado. Requieren que el usuario agregue una nueva clave de propietario de la máquina para que el sistema arranque. Los controladores de Ubuntu están firmados por Canonical y funcionarán con arranque seguro.

  1. Instale la utilidad de ubuntu-drivers:

    sudo apt update && sudo apt install -y ubuntu-drivers-common
    
  2. Instale los últimos controladores de NVIDIA:

    sudo ubuntu-drivers install
    

    Reinicie la máquina virtual después de instalar el controlador de GPU.

  3. Descargue e instale el kit de herramientas de CUDA desde NVIDIA:

    Nota:

    En el ejemplo se muestra la ruta de acceso del paquete CUDA para Ubuntu 22.04 LTS. Reemplace la ruta de acceso específica de la versión que tiene previsto usar.

    Visite el Centro de descargas de NVIDIA o la página de recursos de NVIDIA CUDA para obtener la ruta de acceso completa específica de cada versión.

    wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
    sudo apt install -y ./cuda-keyring_1.1-1_all.deb
    sudo apt update
    sudo apt -y install cuda-toolkit-12-3
    

    La instalación puede tardar varios minutos.

  4. Compruebe que la GPU se reconoce correctamente (es posible que tenga que reiniciar la máquina virtual para que los cambios del sistema surtan efecto):

    nvidia-smi
    

Actualizaciones de controladores de NVIDIA

Recomendamos actualizar periódicamente los controladores de NVIDIA después de la implementación.

sudo apt update
sudo apt full-upgrade

CentOS o Red Hat Enterprise Linux

  1. Actualice el kernel (recomendado). Si decide no actualizar el kernel, asegúrese de que las versiones de kernel-devel y dkms sean adecuadas para el kernel.

    sudo yum install kernel kernel-tools kernel-headers kernel-devel
    sudo reboot
    
  2. Instale la versión más reciente de Linux Integration Services para Hyper-V y Azure. Para confirmar si se requiere LIS, compruebe los resultados de lspci. Si todos los dispositivos de GPU aparecen como se esperaba, no es necesario instalar LIS.

    LIS es aplicable a Red Hat Enterprise Linux, CentOS y el kernel compatible de Red Hat de Oracle Linux 5.2-5.11, 6.0-6.10 y 7.0-7.7. Consulte la documentación de Linux Integration Services para obtener más información. Omita este paso si tiene previsto usar CentOS/RHEL 7.8 (o versiones posteriores), pues ya no se necesita LIS en estas versiones.

    wget https://aka.ms/lis
    tar xvzf lis
    cd LISISO
    
    sudo ./install.sh
    sudo reboot
    
  3. Vuelva a conectarse a la VM y continúe con la instalación con los siguientes comandos:

    sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
    sudo yum-config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-rhel7.repo
    sudo yum clean all
    sudo yum -y install nvidia-driver-latest-dkms cuda-drivers
    

    La instalación puede tardar varios minutos.

    Nota

    Visite el repositorio de Fedora y Nvidia CUDA para elegir el paquete correcto para la versión de CentOS o RHEL que desea usar.

Por ejemplo, CentOS 8 y RHEL 8 necesitan los pasos siguientes.

sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
sudo yum install dkms

sudo wget https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo -O /etc/yum.repos.d/cuda-rhel8.repo

sudo yum install cuda-drivers
  1. Para instalar (opcional) el kit de herramientas CUDA completo, escriba:

    sudo yum install cuda
    

    Nota

    Si ve un mensaje de error relacionado con paquetes que faltan como vulkan-filesystem, puede que tenga que editar /etc/yum.repos.d/rh-cloud, buscar optional-rpms y establecer enabled en 1.

  2. Reinicie la máquina virtual y continúe para comprobar la instalación.

Comprobación de la instalación del controlador

Para consultar el estado del dispositivo de GPU, acceda mediante SSH a la máquina virtual y ejecute la utilidad de línea de comandos smi nvidia que se instala con el controlador.

Si el controlador está instalado, Nvidia SMI muestra GPU-Util como 0 % hasta que se ejecuta una carga de trabajo de GPU en la máquina virtual. La versión del controlador y los detalles de GPU pueden ser diferentes de los que se muestran.

Estado del dispositivo de NVIDIA

Conectividad de red RDMA

La conectividad de red RDMA puede habilitarse en las máquinas virtuales de la serie N preparadas para RDMA, como la NC24r, implementadas en el mismo conjunto de disponibilidad o en un único grupo de selección de ubicación en un conjunto de escalado de máquinas virtuales (VM). Ahora, la red RDMA admite el tráfico de interfaz de paso de mensajes (MPI) para aplicaciones que se ejecutan con Intel MPI 5.x o una versión posterior:

Distribuciones

Las máquinas virtuales de la serie N que puedan usar RDMA se implementan desde cualquiera de las imágenes de Azure Marketplace que admita la conectividad RDMA en máquinas virtuales de la serie N:

  • Ubuntu 16.04 LTS: configure controladores RDMA en la máquina virtual y regístrese en Intel para descargar Intel MPI:

    1. Instale dapl, rdmacm, ibverbs y mlx4.

      sudo apt-get update
      
      sudo apt-get install libdapl2 libmlx4-1
      
      
    2. En /etc/waagent.conf, habilite RDMA quitando la marca de comentario de las siguientes líneas de configuración. Necesita acceso a la raíz para editar este archivo.

      OS.EnableRDMA=y
      
      OS.UpdateRdmaDriver=y
      
    3. Agregue o cambie la siguiente configuración de memoria en KB en el archivo /etc/security/limits.conf. Necesita acceso a la raíz para editar este archivo. Para realizar pruebas, puede establecer memlock en ilimitado. Por ejemplo: <User or group name> hard memlock unlimited.

      <User or group name> hard    memlock <memory required for your application in KB>
      
      <User or group name> soft    memlock <memory required for your application in KB>
      
    4. Instale la biblioteca Intel MPI. Compre y descargar la biblioteca de Intel o descargue la versión de evaluación gratuita.

      wget http://registrationcenter-download.intel.com/akdlm/irc_nas/tec/9278/l_mpi_p_5.1.3.223.tgz
      

      Solo se admiten los runtimes de Intel MPI 5.x.

      Para ver los pasos de instalación, vea la guía de instalación de la Biblioteca de Intel MPI.

    5. Habilite ptrace para los procesos que no son de depurador no raíz (necesario para las versiones más recientes de Intel MPI).

      echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
      
  • HPC basada en CentOS 7.4: los controladores RDMA e Intel MPI 5.1 están instalados en la máquina virtual.

  • HPC basado en CentOS: CentOS-HPC 7.6 y versiones posteriores (para SKU en las que se admite InfiniBand a través de SR-IOV). Estas imágenes tienen preinstaladas las bibliotecas OFED y MPI de Mellanox.

Nota

Las tarjetas CX3-Pro solo se admiten a través de las versiones de LTS de OFED de Mellanox. Use la versión de LTS de OFED de Mellanox (4.9-0.1.7.0) en las máquinas virtuales de la serie N con tarjetas ConnectX3-Pro. Para obtener más información, vea Controladores de Linux.

Además, algunas de las imágenes HPC de Azure Marketplace más recientes tienen OFED 5.1 de Mellanox y versiones posteriores, que no admiten tarjetas ConnectX3-Pro. Compruebe la versión OFED de Mellanox en la imagen de HPC antes de usarla en máquinas virtuales con tarjetas ConnectX3-Pro.

Las imágenes siguientes son las de CentOS-HPC más recientes que admiten tarjetas ConnectX3-Pro:

  • OpenLogic:CentOS-HPC:7.6:7.6.2020062900
  • OpenLogic:CentOS-HPC:7_6gen2:7.6.2020062901
  • OpenLogic:CentOS-HPC:7.7:7.7.2020062600
  • OpenLogic:CentOS-HPC:7_7-gen2:7.7.2020062601
  • OpenLogic:CentOS-HPC:8_1:8.1.2020062400
  • OpenLogic:CentOS-HPC:8_1-gen2:8.1.2020062401

Instalación de controladores GRID en VM de la serie NV o NVv3

Para instalar los controladores NVIDIA GRID en VM de la serie NV o NVv3, establezca una conexión SSH a cada VM y siga los pasos para su distribución de Linux.

Ubuntu

  1. Ejecute el comando lspci. Compruebe que la tarjeta o tarjetas NVIDIA M60 son visibles como dispositivos PCI.

  2. Instale las actualizaciones.

    sudo apt-get update
    sudo apt-get upgrade -y
    sudo apt-get dist-upgrade -y
    sudo apt-get install build-essential ubuntu-desktop -y
    sudo apt-get install linux-azure -y
    
  3. Deshabilite el controlador de kernel Nouveau que es incompatible con el controlador NVIDIA. (Utilice solo el controlador NVIDIA en VM NV o NVv2). Para deshabilitar el controlador, cree un archivo en /etc/modprobe.d llamado nouveau.conf con el siguiente contenido:

    blacklist nouveau
    blacklist lbm-nouveau
    
  4. Reinicie la máquina virtual y vuelva a conectar. Salga del servidor X:

    sudo systemctl stop lightdm.service
    
  5. Descargue e instale el controlador de GRID:

    wget -O NVIDIA-Linux-x86_64-grid.run https://go.microsoft.com/fwlink/?linkid=874272
    chmod +x NVIDIA-Linux-x86_64-grid.run
    sudo ./NVIDIA-Linux-x86_64-grid.run
    
  6. Cuando se le pregunte si desea ejecutar la utilidad nvidia-xconfig para actualizar el archivo de configuración de X, seleccione .

  7. Una vez completada la instalación, copie /etc/nvidia/gridd.conf.template en un nuevo archivo gridd.conf en la ubicación /etc/nvidia/

    sudo cp /etc/nvidia/gridd.conf.template /etc/nvidia/gridd.conf
    
  8. Agregue lo siguiente a /etc/nvidia/gridd.conf:

    IgnoreSP=FALSE
    EnableUI=FALSE
    
  9. Quite lo siguiente de /etc/nvidia/gridd.conf si está presente:

    FeatureType=0
    
  10. Reinicie la máquina virtual y continúe para comprobar la instalación.

Instalar el controlador de GRID en Ubuntu con el arranque seguro habilitado

El proceso de instalación del controlador de GRID no ofrece ninguna opción para omitir la compilación e instalación del módulo del kernel y seleccionar una fuente diferente de módulos de kernel firmados, por lo que es necesario deshabilitar el arranque seguro en las máquinas virtuales Linux para poder utilizarlas con GRID, una vez instalados los módulos firmados del kernel.

CentOS o Red Hat Enterprise Linux

  1. Actualice el kernel y DKMS (recomendado). Si decide no actualizar el kernel, asegúrese de que las versiones de kernel-devel y dkms sean adecuadas para el kernel.

    sudo yum update
    sudo yum install kernel-devel
    sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
    sudo yum install dkms
    sudo yum install hyperv-daemons
    
  2. Deshabilite el controlador de kernel Nouveau que es incompatible con el controlador NVIDIA. (Utilice solo el controlador NVIDIA en las máquinas virtuales NV o NV3). Para ello, cree un archivo en /etc/modprobe.d llamado nouveau.conf con el siguiente contenido:

    blacklist nouveau
    blacklist lbm-nouveau
    
  3. Reinicie la máquina virtual, vuelva a conectarse e instale la versión más reciente de Linux Integration Services para Hyper-V y Azure. Para confirmar si se requiere LIS, compruebe los resultados de lspci. Si todos los dispositivos de GPU aparecen como se esperaba, no es necesario instalar LIS.

    Omita este paso si tiene previsto usar CentOS/RHEL 7.8 (o versiones posteriores), pues ya no se necesita LIS en estas versiones.

    wget https://aka.ms/lis
    tar xvzf lis
    cd LISISO
    
    sudo ./install.sh
    sudo reboot
    
    
  4. Vuelva a conectarse a la máquina virtual y ejecute el comando lspci. Compruebe que la tarjeta o tarjetas NVIDIA M60 son visibles como dispositivos PCI.

  5. Descargue e instale el controlador de GRID:

    wget -O NVIDIA-Linux-x86_64-grid.run https://go.microsoft.com/fwlink/?linkid=874272
    chmod +x NVIDIA-Linux-x86_64-grid.run
    
    sudo ./NVIDIA-Linux-x86_64-grid.run
    
  6. Cuando se le pregunte si desea ejecutar la utilidad nvidia-xconfig para actualizar el archivo de configuración de X, seleccione .

  7. Una vez completada la instalación, copie /etc/nvidia/gridd.conf.template en un nuevo archivo gridd.conf en la ubicación /etc/nvidia/

    sudo cp /etc/nvidia/gridd.conf.template /etc/nvidia/gridd.conf
    
  8. Agregue dos líneas a /etc/nvidia/gridd.conf:

    IgnoreSP=FALSE
    EnableUI=FALSE
    
  9. Quite una línea de /etc/nvidia/gridd.conf si está presente:

    FeatureType=0
    
  10. Reinicie la máquina virtual y continúe para comprobar la instalación.

Comprobación de la instalación del controlador

Para consultar el estado del dispositivo de GPU, acceda mediante SSH a la máquina virtual y ejecute la utilidad de línea de comandos smi nvidia que se instala con el controlador.

Si el controlador está instalado, Nvidia SMI mostrará GPU-Util como 0 % hasta que ejecute una carga de trabajo de GPU en la máquina virtual. La versión del controlador y los detalles de GPU pueden ser diferentes de los que se muestran.

Captura de pantalla que muestra la salida cuando se consulta el estado de un dispositivo GPU.

Servidor X11

Si necesita un servidor X11 para conexiones remotas a la VM NV o NVv2, se recomienda x11vnc, ya que permite la aceleración de hardware de gráficos. El BusID del dispositivo M60 debe agregarse manualmente al archivo X11 de configuración (normalmente, etc/X11/xorg.conf). Agregue una sección "Device" similar a la siguiente:

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "Tesla M60"
    BusID          "PCI:0@your-BusID:0:0"
EndSection

Además, actualice su sección "Screen" para usar este dispositivo.

El BusID decimal puede encontrarse al ejecutar

nvidia-xconfig --query-gpu-info | awk '/PCI BusID/{print $4}'

El BusID puede cambiar cuando se reasigna o reinicia una máquina virtual. Por lo tanto, puede ser conveniente crear un script para actualizar el BusID en la configuración de X11 cuando se reinicie una máquina virtual. Por ejemplo, cree un script llamado busidupdate.sh (u otro nombre que elija) con un contenido similar al siguiente:

#!/bin/bash
XCONFIG="/etc/X11/xorg.conf"
OLDBUSID=`awk '/BusID/{gsub(/"/, "", $2); print $2}' ${XCONFIG}`
NEWBUSID=`nvidia-xconfig --query-gpu-info | awk '/PCI BusID/{print $4}'`

if [[ "${OLDBUSID}" == "${NEWBUSID}" ]] ; then
        echo "NVIDIA BUSID not changed - nothing to do"
else
        echo "NVIDIA BUSID changed from \"${OLDBUSID}\" to \"${NEWBUSID}\": Updating ${XCONFIG}"
        sed -e 's|BusID.*|BusID          '\"${NEWBUSID}\"'|' -i ${XCONFIG}
fi

A continuación, cree una entrada para el script actualizado en /etc/rc.d/rc3.d para que se invoque el script como root en el arranque.

Solución de problemas

  • Puede establecer el modo de persistencia mediante nvidia-smi para que la salida del comando sea más rápida cuando necesita consultar tarjetas. Para establecer el modo de persistencia, ejecute nvidia-smi -pm 1. Tenga en cuenta que, si se reinicia la máquina virtual, la configuración del modo desaparece. Siempre puede crear un script de la configuración de modo para ejecutarla al inicio.
  • Si ha actualizado los controladores CUDA de NVIDIA a la versión más reciente y observa que la conectividad RDMA ya no funciona, reinstale los controladores RDMA para restablecer la conectividad.
  • Durante la instalación de LIS, si no se admite una determinada versión del sistema operativo CentOS/RHEL (o kernel) para LIS, se produce el error de versión de kernel no compatible. Comunique este error junto con las versiones del sistema operativo y del kernel.
  • Si los trabajos se interrumpen por errores de ECC en la GPU (que se puedan corregir o que no se puedan corregir), compruebe primero si la GPU cumple alguno de los criterios de RMA para errores de ECC de Nvidia. Si la GPU es apta para RMA, póngase en contacto con el soporte técnico para recibir asistencia. De lo contrario, reinicie la máquina virtual para volver a asociar la GPU, como se describe aquí. Los métodos menos invasivos, como nvidia-smi -r, no funcionan con la solución de virtualización implementada en Azure.

Pasos siguientes