Installare i driver GPU NVIDIA in VM serie N che eseguono Linux

Attenzione

Questo articolo fa riferimento a CentOS, una distribuzione Linux prossima allo stato EOL (End of Life, fine del ciclo di vita). Valutare le proprie esigenze e pianificare di conseguenza. Per ulteriori informazioni, consultare la Guida alla fine del ciclo di vita di CentOS.

Si applica a: ✔️ macchine virtuali Linux

Per usufruire delle funzionalità GPU delle macchine virtuali serie N di Azure che si servono di GPU NVIDIA, è necessario installare i driver GPU NVIDIA. L'estensione del driver NVIDIA GPU consente di installare i driver NVIDIA CUDA o GRID appropriati in una macchina virtuale serie N. Installare o gestire l'estensione usando il portale di Azure o strumenti come l'interfaccia della riga di comando di Azure o Azure Resource Manager. Vedere le documentazione dell'estensione dei driver GPU NVIDIA per le distribuzioni supportate e i passaggi di distribuzione.

Se si sceglie di installare manualmente i driver GPU NVIDIA, questo articolo descrive i driver e le distribuzioni supportate, nonché passaggi di installazione e verifica. Le informazioni di configurazione manuale dei driver sono disponibili anche per le macchine virtuali Windows.

Per conoscere le specifiche, le capacità di archiviazione e i dettagli dei dischi delle macchine virtuali serie N, vedere Dimensioni delle macchine virtuali Linux GPU.

Driver e distribuzioni supportati

Attenzione

Questo articolo fa riferimento a CentOS, una distribuzione Linux prossima allo stato EOL (End of Life, fine del ciclo di vita). Pertanto, pensare con attenzione all'uso e alla pianificazione.

Driver NVIDIA CUDA

Per i driver CUDA più recenti e i sistemi operativi supportati, visitare il sito Web di NVIDIA. Assicurarsi di installare o eseguire l'aggiornamento ai driver CUDA più recenti supportati per la distribuzione.

Nota

I driver CUDA supportati più recenti per le macchine virtuali SKU della serie NC originali sono attualmente alla versione 470.82.01. Le versioni successive del driver non sono supportate nelle schede K80 nel controller di rete.

Nota

Le macchine virtuali di Azure NVads A10 v5 supportano solo GRID 14.1(510.73) o versioni successive del driver. Il driver vGPU per l'SKU A10 è un driver unificato che supporta sia carichi di lavoro di grafica che di calcolo.

Suggerimento

Anziché installare manualmente i driver CUDA in una VM Linux, è possibile distribuire un'immagine della macchina virtuale per data science di Azure. Le edizioni della macchina virtuale per data science per Ubuntu 16.04 LTS o CentOS 7.4 preinstallano i driver NVIDIA CUDA, CUDA Deep Neural Network Library e altri strumenti.

Driver NVIDIA GRID

Microsoft ridistribuisce i programmi di installazione dei driver NVIDIA-GRID per le macchine virtuali serie NV e NVv3 usate come workstation virtuali o per applicazioni virtuali. Installare solo questi driver GRID nelle macchine virtuali NV di Azure, solo nei sistemi operativi elencati nella tabella seguente. Questi driver includono la licenza per il software della GPU virtuale GRID in Azure. Non è necessario configurare un server licenze software NVIDIA vGPU.

I driver GRID ridistribuiti da Azure non funzionano nella maggior parte delle macchine virtuali non NV come NC, NCv2, NCv3, ND e macchine virtuali serie NDv2, ma funzionano nella serie NCasT4v3.

Per altre informazioni sulle versioni specifiche di vGPU e del ramo driver, visitare il sito Web NVIDIA .

Distribuzione Driver
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, driver branch R535(.exe)

NVIDIA vGPU 16.2, driver branch R535(.exe)

Nota

Per le macchine virtuali di Azure NVads A10 v5, è consigliabile che i clienti siano sempre nella versione più recente del driver. La versione più recente del driver principale NVIDIA (n) è compatibile solo con le versioni precedenti del ramo principale precedente (n-1). Ad esempio, vGPU 17.x è compatibile con le versioni precedenti solo con vGPU 16.x. Tutte le macchine virtuali ancora in esecuzione n-2 o versioni precedenti potrebbero riscontrare errori del driver quando viene implementato il ramo di unità più recente negli host di Azure.

NVs_v3 macchine virtuali supportano solo vGPU 16 o versione precedente del driver.

Visitare GitHub per l'elenco completo di tutti i collegamenti ai driver NVIDIA GRID precedenti.

Avviso

L'installazione di software di terze parti in prodotti Red Hat può influenzare i termini di supporto di Red Hat. Vedere l'articolo della Knowledge base di Red Hat.

Installare i driver CUDA nelle macchine virtuali serie N

Di seguito sono indicati i passaggi per installare i driver CUDA nelle VM Serie N dal Toolkit di NVIDIA CUDA.

Gli sviluppatori C++ e C possono facoltativamente installare il toolkit completo per creare applicazioni con accelerazione GPU. Per altre informazioni, vedere la guida di installazione di CUDA.

Per installare i driver di CUDA, stabilire una connessione SSH a ogni VM. Per verificare che nel sistema sia presente una GPU con supporto per core CUDA, eseguire il comando seguente:

lspci | grep -i NVIDIA

L'output è simile all'esempio seguente (che rappresenta una scheda NVIDIA Tesla K80):

Output del comando Ispci

lspci elenca i dispositivi PCIe nella macchina virtuale, incluse le schede di interfaccia di rete InfiniBand e le GPU, se presenti. Se lspci non restituisce risultati, potrebbe essere necessario installare LIS in CentOS/RHEL.

Quindi eseguire i comandi di installazione specifici per la distribuzione.

Ubuntu

Driver proprietari NVIDIA per pacchetti Ubuntu. Questi driver provengono direttamente da NVIDIA e sono semplicemente inseriti in un pacchetto da Ubuntu in modo che possano essere gestiti automaticamente dal sistema. Il download e l'installazione di driver da un'altra origine possono causare danni al sistema. Inoltre, l'installazione di driver di terze parti richiede passaggi aggiuntivi nelle macchine virtuali con TrustedLaunch e Avvio protetto abilitati. Richiedono all'utente di aggiungere una nuova chiave di proprietario del computer per l'avvio del sistema. I driver di Ubuntu sono firmati da Canonical e funzioneranno con l'avvio protetto.

  1. Installare l'utilità ubuntu-drivers:

    sudo apt update && sudo apt install -y ubuntu-drivers-common
    
  2. Installare i driver NVIDIA più recenti:

    sudo ubuntu-drivers install
    
  3. Scaricare e installare CUDA Toolkit da NVIDIA:

    Nota

    L'esempio mostra il percorso del pacchetto CUDA per Ubuntu 22.04 LTS. Sostituire il percorso specifico della versione che si intende usare.

    Visitare il Centro download NVIDIA o la pagina Risorse NVIDIA CUDA per il percorso completo specifico di ogni versione.

    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
    

    L'installazione può richiedere alcuni minuti.

  4. Verificare che la GPU sia riconosciuta correttamente (potrebbe essere necessario riavviare la macchina virtuale per rendere effettive le modifiche al sistema):

    nvidia-smi
    

Aggiornamenti dei driver NVIDIA

È consigliabile aggiornare periodicamente i driver NVIDIA dopo la distribuzione.

sudo apt update
sudo apt full-upgrade

CentOS o Red Hat Enterprise Linux

  1. Aggiornare il kernel (consigliato). Se si sceglie di non aggiornare il kernel, assicurarsi che le versioni di kernel-devel e dkms siano adeguate per il kernel.

    sudo yum install kernel kernel-tools kernel-headers kernel-devel
    sudo reboot
    
  2. Installare la versione più recente di Linux Integration Services per Hyper-V e Azure. Controllare se LIS è richiesto verificando i risultati di lspci. Se tutti i dispositivi GPU sono elencati come previsto, l'installazione di LIS non è necessaria.

    LIS è applicabile a Red Hat Enterprise Linux, CentOS e Oracle Linux Red Hat Compatible Kernel 5.2-5.11, 6.0-6.10 e 7.0-7.7. Per altri dettagli, vedere la documentazione di Linux Integration Services. Ignorare questo passaggio se si prevede di usare CentOS/RHEL 7.8 (o versioni successive) perché LIS non è più necessario per queste versioni.

    wget https://aka.ms/lis
    tar xvzf lis
    cd LISISO
    
    sudo ./install.sh
    sudo reboot
    
  3. Riconnettersi alla macchina virtuale e continuare l'installazione con i comandi seguenti:

    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
    

    L'installazione può richiedere alcuni minuti.

    Nota

    Visitare Fedora e Nvidia CUDA repo per selezionare il pacchetto corretto per la versione CentOS o RHEL da usare.

Ad esempio, CentOS 8 e RHEL 8 richiedono i passaggi seguenti.

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. Per installare facoltativamente il toolkit di CUDA completo, digitare:

    sudo yum install cuda
    

    Nota

    Se viene visualizzato un messaggio di errore relativo a pacchetti mancanti come vulkan-filesystem, potrebbe essere necessario modificare /etc/yum.repos.d/rh-cloud, cercare optional-rpms e impostare abilitato su 1

  2. Riavviare la VM e procedere a verificare l'installazione.

Verificare l'installazione del driver

Per controllare lo stato del dispositivo GPU, eseguire una connessione SSH alla VM ed eseguire l'utilità della riga di comando nvidia-smi installata con il driver.

Se il driver è installato, Nvidia SMI elenca GPU-Util come 0% fino a quando non si esegue un carico di lavoro GPU nella macchina virtuale. La versione del driver e i dettagli GPU possono essere diversi da quelli riportati.

Stato del dispositivo NVIDIA

Connettività di rete RDMA

La connettività di rete RDMA può essere abilitata nelle macchine virtuali serie N con supporto per RDMA, come le macchine virtuali NC24r distribuite nello stesso set di disponibilità o in un unico gruppo di selezione in un set di scalabilità di macchine virtuali. La rete RDMA supporta il traffico Message Passing Interface (MPI) per le applicazioni in esecuzione con Intel MPI 5.x o una versione più recente:

Distribuzioni

Distribuire le VM serie N abilitate per RDMA da una delle immagini in Azure Marketplace che supporta la connettività RDMA sulle VM serie N:

  • Ubuntu 16.04 LTS - Configurare i driver RDMA nella VM ed eseguire la registrazione con Intel per scaricare Intel MPI:

    1. Installare dapl, rdmacm, ibverbs e mlx4

      sudo apt-get update
      
      sudo apt-get install libdapl2 libmlx4-1
      
      
    2. In /etc/waagent.conf abilitare RDMA rimuovendo il commento dalle righe di configurazione seguenti. Per modificare questo file è necessario l'accesso alla radice.

      OS.EnableRDMA=y
      
      OS.UpdateRdmaDriver=y
      
    3. Aggiungere o modificare le impostazioni della memoria seguenti espresse in KB nel file /etc/security/limits.conf. Per modificare questo file è necessario l'accesso alla radice. A scopo di test è possibile impostare memlock su unlimited. Ad esempio: <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. Installare la libreria Intel MPI. Acquistare e scaricare la libreria da Intel o scaricare la versione di valutazione gratuita.

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

      Sono supportati solo i runtime Intel MPI 5.x.

      Per la procedura di installazione, vedere Intel MPI Library installation guide (Guida all'installazione di Intel MPI Library).

    5. Abilitare ptrace per i processi non di debugger non radice (necessari per le versioni più recenti di Intel MPI).

      echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
      
  • CentOS-based 7.4 HPC: i driver RDMA e Intel MPI 5.1 vengono installati nella VM.

  • HPC basato su CentOS - CentOS-HPC 7.6 e versioni successive (per gli SKU in cui InfiniBand è supportato su SR-IOV). Queste immagini includono librerie MEllanox OFED e MPI preinstallate.

Nota

Le schede CX3-Pro sono supportate solo tramite le versioni LTS di Mellanox OFED. Usare la versione LTS Mellanox OFED (4.9-0.1.7.0) nelle macchine virtuali serie N con schede ConnectX3-Pro. Per altre informazioni, vedere Driver Linux.

Inoltre, alcune delle immagini HPC di Azure Marketplace più recenti hanno Mellanox OFED 5.1 e versioni successive, che non supportano le schede ConnectX3-Pro. Controllare la versione Mellanox OFED nell'immagine HPC prima di usarla nelle macchine virtuali con schede ConnectX3-Pro.

Le immagini seguenti sono le immagini CentOS-HPC più recenti che supportano le schede 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

Installare i driver GRID nelle macchine virtuali serie NV o NVv3

Per installare i driver NVIDIA GRID nelle macchine virtuali serie NV o NVv3, stabilire una connessione SSH a ogni macchina virtuale e seguire la procedura per la distribuzione di Linux.

Ubuntu

  1. Eseguire il comando lspci. Verificare che la scheda o le schede NVIDIA M60 siano visualizzate come dispositivi PCI.

  2. Installare gli aggiornamenti.

    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. Disabilitare il driver del kernel Nouveau, che è incompatibile con il driver NVIDIA. Usare il driver NVIDIA solo nelle macchine virtuali NV o NVv2. Per disabilitare il driver, creare un file in /etc/modprobe.d denominato nouveau.conf con il contenuto seguente:

    blacklist nouveau
    blacklist lbm-nouveau
    
  4. Riavviare la macchina virtuale ed eseguire nuovamente la connessione. Uscire dal server X:

    sudo systemctl stop lightdm.service
    
  5. Scaricare e installare il driver 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. Quando viene chiesto se si vuole eseguire l'utilità nvidia-xconfig per aggiornare il file di configurazione di X, selezionare Yes (Sì).

  7. Al termine dell'installazione, copiare /etc/nvidia/gridd.conf.template in un nuovo file gridd.conf nel percorso /etc/nvidia/

    sudo cp /etc/nvidia/gridd.conf.template /etc/nvidia/gridd.conf
    
  8. Aggiungere quanto segue a /etc/nvidia/gridd.conf:

    IgnoreSP=FALSE
    EnableUI=FALSE
    
  9. Rimuovere quanto segue da /etc/nvidia/gridd.conf se presente:

    FeatureType=0
    
  10. Riavviare la VM e procedere a verificare l'installazione.

Installare il driver GRID in Ubuntu con avvio protetto abilitato

Il processo di installazione del driver GRID non offre opzioni per ignorare la compilazione e l'installazione del modulo kernel e per selezionare un'altra origine di moduli kernel firmati, quindi l'avvio protetto deve essere disabilitato nelle macchine virtuali Linux per poterle usare con GRID dopo l'installazione dei moduli kernel firmati.

CentOS o Red Hat Enterprise Linux

  1. Aggiornare il kernel e il DKMS (consigliato). Se si sceglie di non aggiornare il kernel, assicurarsi che le versioni di kernel-devel e dkms siano adeguate per il 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. Disabilitare il driver del kernel Nouveau, che è incompatibile con il driver NVIDIA. Usare solo il driver NVIDIA nelle macchine virtuali NV o NV3. A tale scopo, creare un file in /etc/modprobe.d denominato nouveau.conf con il contenuto seguente:

    blacklist nouveau
    blacklist lbm-nouveau
    
  3. Riavviare la macchina virtuale e installare i servizi di integrazione di Linux più recenti per Hyper-V e Azure. Controllare se LIS è richiesto verificando i risultati di lspci. Se tutti i dispositivi GPU sono elencati come previsto, l'installazione di LIS non è necessaria.

    Ignorare questo passaggio se si prevede di usare CentOS/RHEL 7.8 (o versioni successive) perché LIS non è più necessario per queste versioni.

    wget https://aka.ms/lis
    tar xvzf lis
    cd LISISO
    
    sudo ./install.sh
    sudo reboot
    
    
  4. Ristabilire la connessione alla macchina virtuale ed eseguire il comando lspci. Verificare che la scheda o le schede NVIDIA M60 siano visualizzate come dispositivi PCI.

  5. Scaricare e installare il driver 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. Quando viene chiesto se si vuole eseguire l'utilità nvidia-xconfig per aggiornare il file di configurazione di X, selezionare Yes (Sì).

  7. Al termine dell'installazione, copiare /etc/nvidia/gridd.conf.template in un nuovo file gridd.conf nel percorso /etc/nvidia/

    sudo cp /etc/nvidia/gridd.conf.template /etc/nvidia/gridd.conf
    
  8. Aggiungere due righe a /etc/nvidia/gridd.conf:

    IgnoreSP=FALSE
    EnableUI=FALSE
    
  9. Rimuovere una riga da /etc/nvidia/gridd.conf se presente:

    FeatureType=0
    
  10. Riavviare la VM e procedere a verificare l'installazione.

Verificare l'installazione del driver

Per controllare lo stato del dispositivo GPU, eseguire una connessione SSH alla VM ed eseguire l'utilità della riga di comando nvidia-smi installata con il driver.

Se il driver è installato, Nvidia SMI elenca GPU-Util come 0% fino a quando non si esegue un carico di lavoro GPU nella macchina virtuale. La versione del driver e i dettagli GPU possono essere diversi da quelli riportati.

Screenshot che mostra l'output quando viene eseguita una query sullo stato del dispositivo GPU.

Server X11

Se è necessario un server X11 per le connessioni da remoto a una macchina virtuale NV o nVv2, è consigliabile usare x11vnc perché consente l'accelerazione hardware della grafica. Il BusID del dispositivo M60 deve essere aggiunto manualmente al file di configurazione X11 file (in genere etc/X11/xorg.conf). Aggiungere una sezione "Device" simile alla seguente:

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

Aggiornare anche la sezione "Screen" per l'uso del dispositivo.

Per individuare il BusID decimale, eseguire

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

Il BusID può cambiare quando una macchina virtuale viene riallocata o riavviata. Pertanto, è consigliabile creare uno script per aggiornare il BusID nella configurazione di X11 quando una macchina virtuale viene riavviata. Creare ad esempio uno script denominato busidupdate.sh (o un altro nome scelto) con contenuto simile al seguente:

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

Creare quindi una voce per lo script di aggiornamento in /etc/rc.d/rc3.d, in modo che venga richiamato come radice all'avvio.

Risoluzione dei problemi

  • È possibile impostare la modalità di persistenza tramite nvidia-smi. In questo modo l'output del comando sarà più veloce per l'esecuzione di query sulle schede. Per impostare la modalità di persistenza, eseguire nvidia-smi -pm 1. Si noti che se la macchina virtuale viene riavviata, l'impostazione della modalità scompare. È sempre possibile generare script che impostino la modalità affinché venga eseguita all'avvio.
  • Se i driver NVIDIA CUDA sono stati aggiornati alla versione più recente e si rileva che la connettività RDMA non funziona più, reinstallare i driver RDMA per ristabilire la connettività.
  • Durante l'installazione di LIS, se una determinata versione del sistema operativo CentOS/RHEL (o kernel) non è supportata per LIS, viene generato un errore “Versione del kernel” non supportata. Segnalare questo errore insieme alle versioni del sistema operativo e del kernel.
  • Se i processi vengono interrotti da errori ECC nella GPU (correggibili o meno), verificare prima di tutto se la GPU soddisfa uno dei criteri RMA NVIDIA per gli errori ECC. Se la GPU è idonea per RMA, contattare il supporto tecnico per la manutenzione; in caso contrario, riavviare la macchina virtuale per ricollegare la GPU come descritto qui. Metodi meno invasivi, ad esempio nvidia-smi -r, non funzionano con la soluzione di virtualizzazione distribuita in Azure.

Passaggi successivi