Esecuzione di istanze con acceleratori GPU

In questa pagina viene descritto come utilizzare gli acceleratori hardware NVIDIA Graphics Processing Unit (GPU) sulle istanze di macchine virtuali (VM) Container-Optimized OS.

Panoramica

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

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

    • Per i tipi di macchine ottimizzati per l'acceleratore A3, sono collegate GPU NVIDIA H100 da 80 GB.
    • Per i tipi di macchine ottimizzati per l'acceleratore A2, sono collegate le GPU NVIDIA A100. Questi sono disponibili nelle opzioni A100 da 40 GB e A100 da 80 GB.
    • Per i tipi di macchine ottimizzate per l'acceleratore G2, 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 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 senza interruzioni per l'esecuzione dei carichi di lavoro GPU all'interno di container su istanze VM di Container-Optimized OS, in modo da poter usufruire dei vantaggi di altre funzionalità di Container-Optimized OS, come sicurezza e affidabilità.

Per ulteriori informazioni sui casi d'uso per le GPU, consulta GPU Cloud.

Per ulteriori informazioni sull'utilizzo delle GPU su Google Kubernetes Engine (GKE), consulta Esecuzione di GPU su GKE.

Requisiti

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

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

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

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

    Se hai bisogno di un'ulteriore quota GPU, devi richiedere una quota GPU nella console Google Cloud. Se hai un account di fatturazione già stabilito, il progetto riceve automaticamente la quota GPU dopo che invii la richiesta di quota.

  • Driver GPU NVIDIA: devi installare i driver GPU NVIDIA in autonomia sulle tue istanze VM di Container-Optimized OS. Questa sezione illustra come installare i driver sulle istanze VM di Container-Optimized OS.

Crea una VM

Le sezioni seguenti spiegano come eseguire GPU su VM di Container-Optimized OS.

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

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

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

Per verificare tutte le GPU collegate alle istanze VM attuali di Container-Optimized OS, esegui questo comando:

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

Sostituisci quanto segue:

Installa i driver di 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 su istanze VM di Container-Optimized OS.

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

Identifica le versioni dei driver GPU

Ogni versione dell'immagine Container-Optimized OS ha una versione del driver GPU NVIDIA supportata predefinita. Consulta le note di rilascio dei principali traguardi LTS di Container-Optimized OS per conoscere la versione predefinita supportata.

Puoi anche controllare tutte le versioni del driver GPU supportate eseguendo questo comando sull'istanza VM di Container-Optimized OS:

sudo cos-extensions list

Identificare la versione richiesta del toolkit CUDA

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 verificare la versione minima del driver GPU richiesta per la tua versione di CUDA, consulta Versioni del toolkit CUDA e dei driver compatibili. Assicurati che la versione di Container-Optimized OS che stai utilizzando abbia la versione del driver GPU corretta per la versione di CUDA in uso.

Installa il driver

Puoi installare le GPU utilizzando i comandi della shell, gli 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 connesso alle tue istanze VM di Container-Optimized OS, puoi eseguire manualmente il seguente comando per installare i driver:

sudo cos-extensions install gpu

Script di avvio

Puoi installare i driver GPU anche tramite gli script di avvio. Puoi fornire lo script di avvio quando crei le istanze VM o applicare lo script alle istanze VM in esecuzione e quindi riavviare le VM. In questo modo puoi installare i driver senza connetterti alle VM. Inoltre, assicura che i driver 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. L'esempio seguente mostra come installare il driver GPU tramite cloud-init:

#cloud-config

runcmd:
  - cos-extensions install gpu

L'utilizzo di cloud-init 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: esecuzione di un'applicazione GPU su Container-Optimized OS.

Per ulteriori informazioni su come utilizzare cloud-init sulle istanze VM di 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 dei driver del toolkit CUDA o del modello GPU. Consulta la pagina Versioni del 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 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à dovute a potenziali aggiornamenti principali della versione nelle release di COS.
  • La versione completa: utilizza questa opzione per bloccare una versione specifica per i carichi di lavoro sensibili alle modifiche del driver. Ad esempio, specifica la versione 535.183.01.
  • Ramo driver NVIDIA: installa il driver stabile più recente in un ramo NVIDIA specifico per rimanere al passo con gli aggiornamenti della sicurezza e le correzioni di bug all'interno del ramo. Ad esempio, specifica il ramo R535. Questa opzione è disponibile a partire da cos-gpu-installer:v2.2.1.

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

Verifica l'installazione

Puoi eseguire i comandi seguenti sulle tue istanze VM di Container-Optimized OS per verificare manualmente l'installazione dei driver GPU. L'output del comando mostra le informazioni dei dispositivi GPU, come lo stato 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 il consumo di GPU

Dopo aver installato i driver GPU, puoi configurare i container in modo che utilizzino le GPU. L'esempio seguente 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 ulteriori dettagli, consulta la sezione End-to-end: esecuzione di un'applicazione GPU su Container-Optimized OS.

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

Il seguente esempio end-to-end mostra come utilizzare cloud-init per configurare le istanze VM di Container-Optimized OS che eseguono il provisioning di un container di applicazioni 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 computing parallelo e il modello di programmazione per GPU di NVIDIA. Per utilizzare le applicazioni CUDA, le librerie devono essere presenti nell'immagine che stai utilizzando. Per aggiungere le librerie NVIDIA CUDA-X, puoi effettuare una delle seguenti operazioni:

  • Utilizza un'immagine con le librerie NVIDIA CUDA-X preinstallate. Ad esempio, puoi utilizzare i container di deep learning di Google. In questi container vengono preinstallati i framework principali di data science, le librerie CUDA-X e gli strumenti NVIDIA. 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 utilizzata. Ad esempio, le librerie NVIDIA CUDA-X e le utilità di debug nei container Docker possono trovarsi rispettivamente a /usr/local/cuda-11.0/lib64 e /usr/local/nvidia/bin.

Sicurezza

Proprio come gli altri moduli kernel in Container-Optimized OS, i driver GPU sono firmati in modo crittografico e verificati tramite chiavi incorporate nel kernel di Container-Optimized OS. A differenza di altre distribuzioni, Container-Optimized OS non consente agli utenti di registrare la propria chiave proprietario della macchina (MOK) e di utilizzare le chiavi per firmare moduli kernel personalizzati. Questo serve a garantire l'integrità del kernel di Container-Optimized OS e ridurre la superficie di attacco.

Limitazioni

Limitazioni delle versioni di Container-Optimized OS

Solo il traguardo della release 85 di Container-Optimized OS LTS supporta l'utilità cos-extensions menzionata nella sezione Installazione dei driver di dispositivi GPU NVIDIA. Per i traguardi di rilascio precedenti di Container-Optimized OS, utilizza lo strumento open source cos-gpu-installer per installare manualmente i driver GPU.

Restrizioni relative alle istanze VM

Le istanze VM con GPU hanno restrizioni specifiche che le comportano in modo diverso da altri tipi di istanze. Per ulteriori informazioni, consulta la pagina Restrizioni delle GPU di Compute Engine.

Quota e disponibilità

Le GPU sono disponibili in regioni e zone specifiche. Quando richiedi la quota GPU, considera le regioni in cui intendi eseguire le istanze VM di 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 rese disponibili nuove versioni dei driver GPU NVIDIA. Alcune versioni del driver GPU non sono idonee per Container-Optimized OS e la sequenza temporale di idoneità non è garantita.

Quando il team Container-Optimized OS rilascia una nuova versione in occasione di un traguardo di rilascio, proviamo a supportare la versione più recente del driver GPU nel ramo del driver corrispondente. Questo serve a correggere il prima possibile le CVE scoperte nei driver GPU.

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

Passaggi successivi