Collega le GPU ai cluster Dataproc

Dataproc consente di collegare le unità di elaborazione grafica (GPU) ai nodi master e worker di Compute Engine in un cluster Dataproc. Puoi utilizzare queste GPU per accelerare carichi di lavoro specifici sulle tue istanze, come machine learning ed elaborazione di dati.

Per saperne di più su cosa puoi fare con le GPU e quali tipi di hardware GPU sono disponibili, leggi GPU su Compute Engine.

Prima di iniziare

  • Le GPU richiedono driver e software speciali. Questi elementi sono preinstallati nelle immagini Dataproc -ml (l'utilizzo delle immagini -ml è consigliato) e possono essere installati manualmente quando e se necessario.
  • Leggi informazioni sui prezzi delle GPU su Compute Engine per comprendere il costo dell'utilizzo delle GPU nelle tue istanze.
  • Leggi le limitazioni per le istanze con GPU per scoprire in che modo queste istanze funzionano in modo diverso rispetto alle istanze non GPU.
  • Controlla la pagina Quote del tuo progetto per assicurarti di disporre di una quota GPU sufficiente (NVIDIA_T4_GPUS, NVIDIA_P100_GPUS o NVIDIA_V100_GPUS) disponibile nel progetto. Se le GPU non sono elencate nella pagina delle quote o se hai bisogno di una quota di GPU aggiuntiva, richiedi un aumento della quota.

Tipi di GPU

I nodi Dataproc supportano i seguenti tipi di GPU. Devi specificare il tipo di GPU quando le colleghi al cluster Dataproc.

  • nvidia-tesla-l4 - NVIDIA® Tesla® L4
  • nvidia-tesla-a100 - NVIDIA® Tesla® A100
  • nvidia-tesla-p100 - NVIDIA® Tesla® P100
  • nvidia-tesla-v100 - NVIDIA® Tesla® V100
  • nvidia-tesla-p4 - NVIDIA® Tesla® P4
  • nvidia-tesla-t4 - NVIDIA® Tesla® T4
  • nvidia-tesla-p100-vws - Workstation virtuali NVIDIA® Tesla® P100
  • nvidia-tesla-p4-vws - Workstation virtuali NVIDIA® Tesla® P4
  • nvidia-tesla-t4-vws - Workstation virtuali NVIDIA® Tesla® T4

Collegare GPU a un cluster

Per collegare le GPU a un cluster Dataproc, quando crei il cluster devi specificare un'immagine -ml (consigliata) o utilizzare un'azione di inizializzazione per installare i driver GPU. Gli esempi seguenti specificano l'immagine 2.3-ml-ubuntu durante la creazione di un cluster.

Google Cloud CLI

Per collegare le GPU ai nodi master e worker principali e secondari in un cluster Dataproc, crea il cluster utilizzando i flag gcloud dataproc clusters create ‑‑master-accelerator, ‑‑worker-accelerator e ‑‑secondary-worker-accelerator. Questi flag accettano i seguenti valori:

  • Il tipo di GPU da collegare a un nodo
  • Il numero di GPU da collegare al nodo

Il tipo di GPU è obbligatorio e il numero di GPU è facoltativo (il valore predefinito è 1 GPU).

Esempio:

gcloud dataproc clusters create cluster-name \
    --image-version=2.3-ml-ubuntu \
    --region=region \
    --master-accelerator type=nvidia-tesla-t4 \
    --worker-accelerator type=nvidia-tesla-t4,count=4 \
    --secondary-worker-accelerator type=nvidia-tesla-t4,count=4 \
    ... other flags

API REST

Per collegare le GPU ai nodi master e worker principali e secondari in un cluster Dataproc, compila i campi InstanceGroupConfig.AcceleratorConfig acceleratorTypeUri e acceleratorCount nell'ambito della richiesta API cluster.create. Questi campi accettano i seguenti valori:

  • Il tipo di GPU da collegare a un nodo
  • Il numero di GPU da collegare al nodo

Console

Per collegare le GPU ai nodi master e worker principali e secondari in un cluster Dataproc, segui questi passaggi:

  1. Apri la pagina Crea un cluster Dataproc su Compute Engine di Dataproc.
  2. Seleziona il riquadro Configura nodi.
  3. Nelle sezioni Nodo di gestione, Nodi worker e Nodi worker secondari, in Piattaforma CPU e GPU > GPU, specifica il numero di GPU e il tipo di GPU per i nodi.

Installa i driver della GPU

I driver GPU sono necessari per utilizzare le GPU collegate ai nodi Dataproc. In alternativa all'utilizzo dei driver GPU installati nelle immagini -ml di Dataproc, puoi utilizzare le seguenti azioni di inizializzazione per installare i driver GPU quando crei un cluster:

Verifica l'installazione del driver della GPU

Puoi verificare l'installazione del driver GPU su un cluster connettendoti tramite SSH al nodo master del cluster ed eseguendo questo comando:

nvidia-smi

Se il driver funziona correttamente, l'output mostrerà la versione del driver e le statistiche della GPU (vedi Verifica l'installazione del driver della GPU).

Configurazione Spark

Quando invii un job a Spark, puoi utilizzare la proprietà ambiente di runtime della configurazione Spark spark.executorEnv con la variabile di ambiente LD_PRELOAD per precaricare le librerie necessarie.

Esempio:

gcloud dataproc jobs submit spark --cluster=CLUSTER_NAME \
  --region=REGION \
  --class=org.apache.spark.examples.SparkPi \
  --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \
  --properties=spark.executorEnv.LD_PRELOAD=libnvblas.so,spark.task.resource.gpu.amount=1,spark.executor.resource.gpu.amount=1,spark.executor.resource.gpu.discoveryScript=/usr/lib/spark/scripts/gpu/getGpusResources.sh

Esempio di job GPU

Puoi testare le GPU su Dataproc eseguendo uno dei seguenti job, che traggono vantaggio dall'esecuzione con le GPU:

  1. Esegui uno degli esempi di Spark ML.
  2. Esegui questo esempio con spark-shell per eseguire un calcolo della matrice:
import org.apache.spark.mllib.linalg._
import org.apache.spark.mllib.linalg.distributed._
import java.util.Random

def makeRandomSquareBlockMatrix(rowsPerBlock: Int, nBlocks: Int): BlockMatrix = {
  val range = sc.parallelize(1 to nBlocks)
  val indices = range.cartesian(range)
  return new BlockMatrix(
      indices.map(
          ij => (ij, Matrices.rand(rowsPerBlock, rowsPerBlock, new Random()))),
      rowsPerBlock, rowsPerBlock, 0, 0)
}

val N = 1024 * 4
val n = 2
val mat1 = makeRandomSquareBlockMatrix(N, n)
val mat2 = makeRandomSquareBlockMatrix(N, n)
val mat3 = mat1.multiply(mat2)
mat3.blocks.persist.count
println("Processing complete!")

Passaggi successivi