Questa pagina descrive come utilizzare gli acceleratori hardware della unità di elaborazione grafica (GPU) NVIDIA nelle istanze di macchine virtuali (VM) con sistema Container-Optimized OS.
Panoramica
Con Compute Engine puoi creare istanze VM che eseguono un Container-Optimized OS con GPU collegate. Quando esegui GPU su Compute Engine, puoi utilizzare solo due famiglie di macchine: ottimizzate per l'acceleratore e per uso generico N1.
Per i tipi di macchina ottimizzati per l'acceleratore, a ogni tipo di macchina è collegato un modello specifico di GPU NVIDIA.
- Per i tipi di macchina A3 ottimizzati per l'acceleratore, sono collegate GPU NVIDIA H100 da 80 GB.
- Per i tipi di macchine A2 ottimizzati 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 ti offre un'esperienza senza interruzioni per eseguire i carichi di lavoro GPU all'interno di container su istanze VM con Container-Optimized OS, in modo da poter beneficiare di altre funzionalità Container-Optimized OS, come sicurezza e affidabilità.
Per scoprire di più sui casi d'uso delle GPU, consulta GPU cloud.
Per scoprire come utilizzare le GPU su Google Kubernetes Engine (GKE), consulta Eseguire GPU su GKE.
Requisiti
L'esecuzione di GPU sulle 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 le GPU sulle istanze VM di Container-Optimized OS, il traguardo di rilascio di Container-Optimized OS deve essere un traguardo LTS e il numero del traguardo deve essere pari o superiore a 85.
Quota GPU: devi disporre di una quota GPU di Compute Engine nella zona scelta prima di poter creare istanze VM con sistema Container-Optimized OS con GPU. Per assicurarti di disporre di una quota GPU sufficiente nel progetto, consulta Quote in Google Cloud Console.
Se hai bisogno di una quota GPU aggiuntiva, devi richiedere la quota GPU nella console Google Cloud. Se hai un account di fatturazione, il tuo progetto riceve automaticamente la quota GPU dopo che hai inviato la richiesta di quota.
Driver GPU NVIDIA: devi installare autonomamente i driver GPU NVIDIA sulle tue istanze VM Container-Optimized OS. Questa sezione spiega come installare i driver sulle istanze VM di Container-Optimized OS.
Crea una VM
Le sezioni seguenti spiegano come eseguire le GPU sulle VM con Container-Optimized OS.
Innanzitutto, devi avere un'istanza VM con Container-Optimized OS con GPU. Il metodo utilizzato per creare una VM dipende dal modello di GPU selezionato.
- Per creare una VM con Container-Optimized OS a cui sono collegate GPU NVIDIA H100, A100 o L4, consulta Creare una VM ottimizzata per l'acceleratore.
- Per creare una VM Container-Optimized OS con GPU NVIDIA T4, P4, P100 o V100 collegate, consulta Creare una VM N1 con GPU collegate.
Puoi anche aggiungere GPU alle istanze VM Container-Optimized OS esistenti.
Quando crei le VM, ricordati di scegliere immagini o famiglie di immagini dal progetto di immagini cos-cloud
.
Per controllare tutte le GPU collegate alle tue attuali istanze VM Container-Optimized OS, esegui il seguente 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 del progetto.zone
: la zona per l'istanza VM.
Installa i driver di dispositivo GPU NVIDIA
Dopo aver creato un'istanza con una o più GPU, il sistema richiede i driver del dispositivo affinché le applicazioni possano accedervi. Questa guida illustra come installare i driver proprietari NVIDIA sulle istanze VM con sistema operativo Container-Optimized OS.
Container-Optimized OS fornisce un'utilità integrata cos-extensions
per
semplificare la procedura di installazione del driver NVIDIA. Se eseguono l'utilità, gli utenti accettano il contratto di licenza di NVIDIA.
Identificare le versioni dei driver GPU
Ogni versione dell'immagine di Container-Optimized OS contiene un elenco delle versioni dei driver GPU NVIDIA supportate per ogni tipo di GPU, oltre a un driver predefinito per ogni tipo. Per un elenco completo delle versioni supportate, consulta le note di rilascio dei principali traguardi LTS di Container-Optimized OS.
Puoi anche controllare tutte le versioni del driver GPU supportate dalla GPU sull'istanza VM di Container-Optimized OS eseguendo il seguente comando:
sudo cos-extensions list
Identifica 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 controllare la versione minima del driver GPU richiesta per la tua versione di CUDA, consulta CUDA Toolkit e versioni dei driver compatibili. Assicurati che la versione di Container-Optimized OS che utilizzi abbia la versione corretta del driver della GPU per la versione di CUDA in uso.
Installa 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 Container-Optimized OS.
Shell
Dopo aver eseguito 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 installare i driver GPU anche 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 collegarti 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 l'installazione dei 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 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: esecuzione di un'applicazione GPU su Container-Optimized OS.
Per saperne di più su come utilizzare cloud-init sulle istanze VM Container-Optimized OS, consulta la pagina sulla creazione e configurazione delle istanze.
In alcuni casi, il driver predefinito incluso in Container-Optimized OS non soddisfa i requisiti minimi del toolkit CUDA o del modello GPU. Consulta le versioni obbligatorie dei driver NVIDIA per i requisiti delle versioni per tipi specifici di GPU.
Per installare una versione specifica del driver della GPU, esegui il seguente 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 potrebbero essere introdotte modifiche alla compatibilità a causa di potenziali aggiornamenti principali delle versioni 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 il driver stabile più recente in un branch NVIDIA specifico per rimanere al passo con gli aggiornamenti della sicurezza e le correzioni di bug all'interno di quel branch. Ad esempio, specifica il ramo
R535
. Questa opzione è disponibile a partire dal giornocos-gpu-installer:v2.2.1
.
Per visualizzare le versioni disponibili per ciascuna di queste opzioni, esegui il comando per identificare le versioni dei driver GPU.
Precarica il driver
Puoi precaricare il driver GPU nell'istanza di Container-Optimized OS anche quando non è collegato alcun dispositivo GPU. Questa opzione è utile per preparare gli ambienti o testare le configurazioni prima di collegare l'hardware GPU fisico.
Per precaricare il driver della GPU, esegui il seguente 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 assicurarti che venga precaricato il driver corretto, evitando problemi di compatibilità quando il dispositivo GPU viene collegato in un secondo momento. SostituisciGPU_DEVICE
con un modello GPU specifico (ad esempioNVIDIA_L4
) elencato nella Panoramica. Se non viene specificato-target-gpu
, verrà precaricato il driver GPU predefinito.
Verificare l'installazione
Puoi eseguire i seguenti comandi sulle istanze VM con sistema operativo Container-Optimized OS per verificare manualmente l'installazione dei driver GPU. L'output del comando mostra le informazioni sui dispositivi GPU, ad esempio 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 in modo che utilizzino le GPU
Dopo aver installato i driver per GPU, puoi configurare i contenitori in modo che utilizzino le GPU. L'esempio seguente mostra come eseguire un'applicazione CUDA in un contenitore Docker che consuma /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 un sistema operativo ottimizzato per i container.
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 contenitore 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 per GPU di NVIDIA. Per utilizzare le applicazioni CUDA, le librerie devono essere presenti nell'immagine in uso. 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 usare Deep Learning Containers di Google. Questi container preinstallano i framework di data science chiave, 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 ambienteLD_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 gli strumenti di debug nei container Docker possono trovarsi rispettivamente in/usr/local/cuda-11.0/lib64
e/usr/local/nvidia/bin
.
Sicurezza
Come per gli altri moduli del kernel su Container-Optimized OS, i driver della GPU sono firmati e verificati tramite crittografia da chiavi integrate nel kernel di Container-Optimized OS. A differenza di altre distribuzioni, Container-Optimized OS non consente agli utenti di registrare la chiave del proprietario della macchina (MOK) e di utilizzare le chiavi per firmare i moduli del kernel personalizzati. Questo serve a garantire l'integrità del kernel di Container-Optimized OS e a ridurre la superficie di attacco.
Limitazioni
Restrizioni relative alle versioni di Container-Optimized OS
Solo il traguardo di rilascio LTS di Container-Optimized OS 85 e versioni successive supportano l'utilità cos-extensions
menzionata nella sezione Installazione dei driver dei 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.
Limitazioni delle istanze VM
Le istanze VM con GPU hanno limitazioni specifiche che ne determinano un comportamento diverso rispetto ad altri tipi di istanze. Per ulteriori informazioni, 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, prendi in considerazione le regioni in cui intendi eseguire le istanze VM con 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 release di Container-Optimized OS ha almeno una versione del driver della GPU NVIDIA supportata. Il team di Container-Optimized OS convalida i driver GPU supportati in base alla versione di Container-Optimized OS prima del rilascio per assicurarsi che siano compatibili. Di volta in volta potrebbero essere rese disponibili nuove versioni dei driver GPU NVIDIA. Alcune versioni dei driver della GPU non sono idonee per Container-Optimized OS e le tempistiche di idoneità non sono garantite.
Quando il team di Container-Optimized OS rilascia una nuova versione in un milestone di rilascio, cerchiamo di supportare la versione più recente del driver GPU nel corrispondente branch del driver. Questo per correggere il prima possibile le CVE scoperte nei driver della GPU.
Se un cliente con Container-Optimized OS identifica un problema correlato ai driver GPU NVIDIA, deve contattare direttamente NVIDIA per ricevere assistenza. Se il problema non è specifico del driver, gli utenti possono aprire una richiesta con assistenza clienti Google Cloud.
Passaggi successivi
- Scopri di più su come eseguire i contenitori su un'istanza VM Container-Optimized OS.
- Scopri di più sulle GPU su Compute Engine.
- Scopri di più su come richiedere una quota GPU.