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

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

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

Actualmente, los controladores CUDA más recientes compatibles con máquinas virtuales de la serie NC son los 470.82.01. No se admiten versiones posteriores de los controladores en las tarjetas K80 de NC.

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.

Distribución Controlador
Ubuntu 16.04 LTS, 18.04 LTS, 20.04 LTS

Red Hat Enterprise Linux 7.7, 7.8, 7.9

CentOS 7.6, 7.7

SUSE Linux Enterprise Server 12 SP2+, 15 SP2
NVIDIA GRID 13.1, rama de controlador R470 (.exe)

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

Verá un resultado similar al siguiente ejemplo (mostrando una tarjeta NVIDIA Tesla K80):

lspci command output

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 (instrucciones a continuación). Luego, ejecute los comandos de instalación específicos de su distribución.

Ubuntu

  1. Descargue e instale los controladores de CUDA del sitio web de NVIDIA.

    Nota

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

    Visite el Centro de descarga de Nvidia para la ruta de acceso completa específica de cada versión.

    CUDA_REPO_PKG=cuda-repo-ubuntu1604_10.0.130-1_amd64.deb
    wget -O /tmp/${CUDA_REPO_PKG} https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/${CUDA_REPO_PKG} 
    
    sudo dpkg -i /tmp/${CUDA_REPO_PKG}
    sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/3bf863cc.pub
    rm -f /tmp/${CUDA_REPO_PKG}
    
    sudo apt-get update
    sudo apt-get install cuda-drivers
    

    La instalación puede tardar varios minutos.

  2. Para instalar (opcional) el kit de herramientas CUDA completo, escriba:

    sudo apt-get install cuda
    
  3. Reinicie la máquina virtual y continúe para comprobar la instalación.

Actualizaciones de controladores CUDA

Se recomienda actualizar periódicamente los controladores CUDA después de la implementación.

sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get dist-upgrade -y
sudo apt-get install cuda-drivers

sudo reboot

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 (y documentaba anteriormente), no es necesario instalar LIS.

    Tenga en cuenta que 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 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 install dkms
    
    sudo wget https://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-rhel7.repo -O /etc/yum.repos.d/cuda-rhel7.repo
    
    sudo yum install 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 necesitarán 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, verá una salida parecida a la siguiente. Tenga en cuenta que GPU-Util muestra 0 %, salvo que se esté ejecutando 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.

NVIDIA device status

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. Requisitos adicionales siguientes:

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 ello, 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.

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 (y documentaba anteriormente), 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 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.

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, verá una salida parecida a la siguiente. Tenga en cuenta que GPU-Util muestra 0 %, salvo que se esté ejecutando 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.

Screenshot that shows the output when the GPU device state is queried.

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í. Tenga en cuenta que los métodos menos invasivos, como nvidia-smi -r, no funcionan con la solución de virtualización implementada en Azure.

Pasos siguientes