Esecuzione di istanze con acceleratori GPU

Questa pagina descrive come utilizzare gli acceleratori hardware delle unità di elaborazione grafica (GPU) NVIDIA sulle istanze di macchine virtuali (VM) Container-Optimized OS.

Panoramica

Utilizzando Compute Engine, puoi creare istanze VM che eseguono Container-Optimized OS con GPU collegate. Quando esegui GPU su Compute Engine, puoi utilizzare solo due famiglie di macchine: ottimizzata per l'acceleratore e N1 per uso generico.

  • Per i tipi di macchine ottimizzate per l'acceleratore, a ogni tipo di macchina è collegato un modello specifico di GPU NVIDIA.

    • Ai tipi di macchine A4 ottimizzate per l'acceleratore sono collegate GPU NVIDIA B200.
    • Ai tipi di macchine A3 Ultra ottimizzate per l'acceleratore sono collegate GPU NVIDIA H200 da 141 GB.
    • Ai tipi di macchine A3 ottimizzate per l'acceleratore sono collegate GPU NVIDIA H100 da 80 GB.
    • Ai tipi di macchine A2 ottimizzate per l'acceleratore sono collegate GPU NVIDIA A100. Sono disponibili sia nelle opzioni A100 da 40 GB che A100 da 80 GB.
    • Per i tipi di macchina G2 ottimizzati per l'acceleratore, sono collegate GPU NVIDIA L4.
  • Per i tipi di macchine per uso generico N1, puoi collegare le seguenti GPU:

Le GPU forniscono potenza di calcolo per eseguire attività di deep learning come il riconoscimento delle immagini e l'elaborazione del linguaggio naturale, nonché altre attività ad alta intensità di calcolo come la transcodifica video e l'elaborazione delle immagini.

Google Cloud offre un'esperienza ottimale per l'esecuzione dei carichi di lavoro GPU all'interno dei container sulle istanze VM Container-Optimized OS, in modo da poter usufruire di altre funzionalità di Container-Optimized OS, come sicurezza e affidabilità.

Per scoprire di più sui casi d'uso delle GPU, consulta la pagina GPU cloud.

Per scoprire di più sull'utilizzo delle GPU su Google Kubernetes Engine (GKE), consulta la sezione Esecuzione di GPU su GKE.

Requisiti

L'esecuzione di GPU su istanze VM Container-Optimized OS presenta i seguenti requisiti:

  • Immagini Container-Optimized OS x86:solo le immagini Container-Optimized OS basate su x86 supportano l'esecuzione di GPU. Le immagini Container-Optimized OS basate su ARM non supportano la funzionalità.

  • Versione di Container-Optimized OS:per eseguire GPU su istanze VM Container-Optimized OS, il traguardo di rilascio di Container-Optimized OS deve essere un traguardo LTS e il numero del traguardo deve essere 85 o superiore.

  • Quota GPU:devi disporre della quota GPU di Compute Engine nella zona scelta prima di poter creare istanze VM Container-Optimized OS con GPU. Per assicurarti di disporre di una quota GPU sufficiente nel progetto, consulta la sezione Quote nella console Google Cloud .

    Se hai bisogno di una quota di GPU aggiuntiva, devi richiedere una quota di GPU nella console Google Cloud . Se hai un account di fatturazione stabilito, il tuo progetto riceve automaticamente la quota GPU dopo l'invio della richiesta di quota.

  • Driver GPU NVIDIA:devi installare autonomamente i driver GPU NVIDIA sulle istanze VM Container-Optimized OS. Questa sezione spiega come installare i driver sulle istanze VM Container-Optimized OS.

Crea una VM

Le sezioni seguenti spiegano come eseguire le GPU sulle VM Container-Optimized OS.

Innanzitutto, devi avere un'istanza VM Container-Optimized OS con GPU. Il metodo utilizzato per creare una VM dipende dal modello di GPU selezionato.

Puoi anche aggiungere GPU alle istanze VM Container-Optimized OS esistenti.

Quando crei VM, ricordati di scegliere immagini o famiglie di immagini dal progetto di immagini cos-cloud.

Per controllare tutte le GPU collegate alle istanze VM Container-Optimized OS correnti, esegui questo comando:

gcloud compute instances describe INSTANCE_NAME \
    --project=PROJECT_ID \
    --zone ZONE \
    --format="value(guestAccelerators)"

Sostituisci quanto segue:

  • INSTANCE_NAME: il nome della nuova istanza VM.
  • PROJECT_ID: l'ID progetto.
  • zone: la zona dell'istanza VM.

Installa i driver del dispositivo GPU NVIDIA

Dopo aver creato un'istanza con una o più GPU, il sistema richiede i driver di dispositivo per consentire alle applicazioni di accedere al dispositivo. Questa guida mostra i modi per installare i driver proprietari NVIDIA sulle istanze VM Container-Optimized OS.

Container-Optimized OS fornisce un'utilità integrata cos-extensions per semplificare il processo di installazione del driver NVIDIA. Eseguendo l'utilità, gli utenti accettano il contratto di licenza NVIDIA.

Identificare le versioni dei driver GPU

Ogni versione dell'immagine Container-Optimized OS ha un elenco di versioni dei driver GPU NVIDIA supportate per ogni tipo di GPU, insieme a un driver predefinito per ogni tipo. Per un elenco completo delle versioni supportate, consulta le note di rilascio delle principali milestone LTS di Container-Optimized OS.

Puoi anche controllare tutte le versioni dei driver GPU supportate dalla GPU nell'istanza VM Container-Optimized OS eseguendo il seguente comando:

sudo cos-extensions list

Identifica la versione del toolkit CUDA richiesta

Se le tue applicazioni utilizzano CUDA, installa il toolkit CUDA di NVIDIA nei tuoi container. Ogni versione di CUDA richiede una versione minima del driver GPU o una versione successiva. Per controllare la versione minima del driver GPU richiesta per la tua versione di CUDA, consulta Toolkit CUDA e versioni dei driver compatibili. Assicurati che la versione di Container-Optimized OS che utilizzi disponga della versione corretta del driver GPU per la versione di CUDA che utilizzi.

Installare il driver

Puoi installare le GPU utilizzando comandi shell, script di avvio o cloud-init. Tutti e tre i metodi utilizzano il comando sudo cos-extensions install gpu per installare il driver GPU predefinito per la versione LTS di Container-Optimized OS.

Shell

Dopo aver effettuato la connessione alle istanze VM Container-Optimized OS, puoi eseguire manualmente il seguente comando per installare i driver:

sudo cos-extensions install gpu

Script di avvio

Puoi anche installare i driver GPU tramite script di avvio. Puoi fornire lo script di avvio quando crei istanze VM o applicare lo script alle istanze VM in esecuzione e poi riavviare le VM. In questo modo puoi installare i driver senza connetterti alle VM. Inoltre, assicura che i driver della GPU siano configurati a ogni riavvio della VM.

Di seguito è riportato un esempio di script di avvio per installare i driver:

#! /bin/bash

sudo cos-extensions install gpu

Cloud-init

Cloud-init è simile agli script di avvio, ma più potente. Il seguente esempio mostra come installare il driver GPU tramite cloud-init:

#cloud-config

runcmd:
  - cos-extensions install gpu

L'utilizzo di cloud-init ti consente di specificare le dipendenze in modo che le applicazioni GPU vengano eseguite solo dopo l'installazione del driver. Per ulteriori dettagli, consulta la sezione End-to-end: Running a GPU application on Container-Optimized OS.

Per saperne di più su come utilizzare cloud-init nelle istanze VM Container-Optimized OS, consulta la pagina Creazione e configurazione di istanze.

In alcuni casi, il driver predefinito incluso in Container-Optimized OS non soddisfa i requisiti minimi del driver del toolkit CUDA o del modello di GPU. Consulta le versioni dei driver NVIDIA richieste per i requisiti di versione per tipi specifici di GPU.

Per installare una versione specifica del driver GPU, esegui questo comando:

sudo cos-extensions install gpu -- -version=DRIVER_VERSION

Sostituisci DRIVER_VERSION con una delle seguenti opzioni:

  • default: installa il driver predefinito designato dalla release di Container-Optimized OS. Questa versione riceve correzioni di bug e aggiornamenti della sicurezza.
  • latest: installa il driver più recente disponibile nella release di Container-Optimized OS. Tieni presente che ciò potrebbe introdurre modifiche alla compatibilità a causa di potenziali aggiornamenti principali della versione nelle release di COS.
  • La versione completa: utilizzala per bloccare una versione specifica per i carichi di lavoro sensibili alle modifiche dei driver. Ad esempio, specifica la versione 535.183.01.
  • Branch del driver NVIDIA: installa l'ultimo driver stabile all'interno di un branch NVIDIA specifico per rimanere aggiornato con gli aggiornamenti di sicurezza e le correzioni di bug all'interno di quel branch. Ad esempio, specifica il ramo R535. Questa opzione è disponibile a partire dal giorno cos-gpu-installer:v2.2.1.

Per visualizzare le versioni disponibili per ciascuna di queste opzioni, esegui il comando per identificare le versioni del driver GPU.

Trasferire parametri ai moduli del kernel

Puoi trasmettere parametri specifici al modulo kernel NVIDIA durante l'installazione utilizzando il flag --module-arg. Questo flag è utile per attivare o disattivare determinate funzionalità del conducente. Il flag può essere utilizzato più volte per passare più argomenti.

Ad esempio, su una VM COS, puoi utilizzare il seguente comando per installare il driver NVIDIA e caricare il modulo kernel nvidia.ko con il parametro NVreg_EnableGpuFirmware=0.

sudo cos-extensions install gpu -- --module-arg nvidia.NVreg_EnableGpuFirmware=0

Precaricare il driver

Puoi precaricare il driver GPU sull'istanza Container-Optimized OS anche quando non è collegato alcun dispositivo GPU. Ciò è utile per preparare gli ambienti o testare le configurazioni prima di collegare l'hardware della GPU fisica.

Per precaricare il driver della GPU, esegui questo comando:

sudo cos-extensions install gpu -- -no-verify -target-gpu=GPU_DEVICE

Questo comando è supportato a partire da cos-gpu-installer:v2.3.0. Si applicano i seguenti flag:

  • -no-verify: scarica e prepara i file del driver, ma salta il caricamento del modulo del kernel e la verifica dell'installazione.

  • -target-gpu: specifica il dispositivo GPU per garantire che il driver corretto sia precaricato, evitando problemi di compatibilità quando il dispositivo GPU viene collegato in un secondo momento. Sostituisci GPU_DEVICE con un modello di GPU specifico (ad esempio,NVIDIA_L4) elencato nella Panoramica. Se -target-gpu non è specificato, il driver GPU predefinito verrà precaricato.

Verificare l'installazione

Puoi eseguire i seguenti comandi sulle istanze VM Container-Optimized OS per verificare manualmente l'installazione dei driver GPU. L'output del comando mostra le informazioni sui dispositivi GPU, come lo stato dei dispositivi e la versione del driver.

# Make the driver installation path executable by re-mounting it.
sudo mount --bind /var/lib/nvidia /var/lib/nvidia
sudo mount -o remount,exec /var/lib/nvidia
/var/lib/nvidia/bin/nvidia-smi

Configura i container per utilizzare le GPU

Dopo aver installato i driver della GPU, puoi configurare i container per utilizzare le GPU. Il seguente esempio mostra come eseguire un'applicazione CUDA in un container Docker che utilizza /dev/nvidia0:

docker run \
  --volume /var/lib/nvidia/lib64:/usr/local/nvidia/lib64 \
  --volume /var/lib/nvidia/bin:/usr/local/nvidia/bin \
  --device /dev/nvidia0:/dev/nvidia0 \
  --device /dev/nvidia-uvm:/dev/nvidia-uvm \
  --device /dev/nvidiactl:/dev/nvidiactl \
  gcr.io/google_containers/cuda-vector-add:v0.1

Puoi eseguire i container tramite cloud-init per specificare la dipendenza tra l'installazione del driver e i container. Per maggiori dettagli, consulta la sezione End-to-end: Running a GPU application on Container-Optimized OS.

End-to-end: esecuzione di un'applicazione GPU su Container-Optimized OS

Il seguente esempio end-to-end mostra come utilizzare cloud-init per configurare le istanze VM Container-Optimized OS che eseguono il provisioning di un container dell'applicazione GPU myapp:latest dopo l'installazione del driver GPU:

#cloud-config

users:
- name: myuser
  uid: 2000

write_files:
  - path: /etc/systemd/system/install-gpu.service
    permissions: 0644
    owner: root
    content: |
      [Unit]
      Description=Install GPU drivers
      Wants=gcr-online.target docker.socket
      After=gcr-online.target docker.socket

      [Service]
      User=root
      Type=oneshot
      ExecStart=cos-extensions install gpu
      StandardOutput=journal+console
      StandardError=journal+console
  - path: /etc/systemd/system/myapp.service
    permissions: 0644
    owner: root
    content: |
      [Unit]
      Description=Run a myapp GPU application container
      Requires=install-gpu.service
      After=install-gpu.service

      [Service]
      User=root
      Type=oneshot
      RemainAfterExit=true
      ExecStart=/usr/bin/docker run --rm -u 2000 --name=myapp --device /dev/nvidia0:/dev/nvidia0 myapp:latest
      StandardOutput=journal+console
      StandardError=journal+console

runcmd:
  - systemctl daemon-reload
  - systemctl start install-gpu.service
  - systemctl start myapp.service

Informazioni sulle librerie NVIDIA CUDA-X

CUDA® è la piattaforma di calcolo parallelo e il modello di programmazione di NVIDIA per le GPU. Per utilizzare le applicazioni CUDA, le librerie devono essere presenti nell'immagine che stai utilizzando. Per aggiungere le librerie NVIDIA CUDA-X, puoi eseguire una delle seguenti operazioni:

  • Utilizza un'immagine con le librerie NVIDIA CUDA-X preinstallate. Ad esempio, puoi utilizzare Deep Learning Containers di Google. Questi container preinstallano i principali framework di data science, le librerie e gli strumenti NVIDIA CUDA-X. In alternativa, l'immagine CUDA di NVIDIA contiene solo le librerie NVIDIA CUDA-X.

  • Crea e utilizza la tua immagine. In questo caso, includi /usr/local/cuda-XX.X/lib64, che contiene le librerie NVIDIA CUDA-X, e /usr/local/nvidia/lib64, che contiene i driver di dispositivo NVIDIA, nella variabile di ambiente LD_LIBRARY_PATH. Per /usr/local/cuda-XX.X/lib64, il nome della directory dipende dalla versione dell'immagine che hai utilizzato. Ad esempio, le librerie NVIDIA CUDA-X e le utilità di debug nei container Docker possono trovarsi rispettivamente in /usr/local/cuda-11.0/lib64 e /usr/local/nvidia/bin.

Sicurezza

Come gli altri moduli del kernel su Container-Optimized OS, i driver GPU sono firmati e verificati crittograficamente da chiavi integrate nel kernel di Container-Optimized OS. A differenza di altre distribuzioni, Container-Optimized OS non consente agli utenti di registrare la propria chiave del proprietario della macchina (MOK) e di utilizzarla per firmare moduli del kernel personalizzati. per garantire l'integrità del kernel di Container-Optimized OS e ridurre la superficie di attacco.

Limitazioni

Limitazioni della versione di Container-Optimized OS

Solo la versione 85 e successive di Container-Optimized OS LTS supportano l'utilità cos-extensions menzionata nella sezione Installazione dei driver di dispositivo GPU NVIDIA. Per le tappe fondamentali delle versioni precedenti di Container-Optimized OS, utilizza lo strumento open source cos-gpu-installer per installare manualmente i driver GPU.

Limitazioni delle istanze VM

Le istanze VM con GPU hanno limitazioni specifiche che le fanno comportare in modo diverso rispetto ad altri tipi di istanza. Per saperne di più, consulta la pagina Limitazioni delle GPU di Compute Engine.

Quota e disponibilità

Le GPU sono disponibili in regioni e zone specifiche. Quando richiedi una quota GPU, considera le regioni in cui intendi eseguire le istanze VM Container-Optimized OS.

Per un elenco completo delle regioni e delle zone applicabili, consulta GPU su Compute Engine. Puoi anche visualizzare le GPU disponibili nella tua zona utilizzando Google Cloud CLI.

gcloud compute accelerator-types list

Prezzi

Per informazioni sui prezzi delle GPU, consulta la pagina dei prezzi di Compute Engine.

Supportabilità

Ogni versione di rilascio di Container-Optimized OS ha almeno una versione del driver GPU NVIDIA supportata. Il team di Container-Optimized OS qualifica i driver GPU supportati in base alla versione di Container-Optimized OS prima del rilascio per assicurarsi che siano compatibili. Di tanto in tanto potrebbero essere disponibili nuove versioni dei driver GPU NVIDIA. Alcune versioni dei driver GPU non saranno idonee per Container-Optimized OS e la tempistica di qualificazione non è garantita.

Quando il team di Container-Optimized OS rilascia una nuova versione in una milestone di rilascio cerchiamo di supportare la versione più recente del driver GPU nel ramo del driver corrispondente. per correggere le CVE scoperte nei driver della GPU il prima possibile.

Se un cliente di Container-Optimized OS identifica un problema correlato ai driver GPU NVIDIA, deve collaborare direttamente con NVIDIA per ricevere assistenza. Se il problema non è specifico del driver, gli utenti possono aprire una richiesta con l'assistenza clienti Google Cloud.

Passaggi successivi