Collegamento di GPU ai cluster

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 il machine learning e l'elaborazione di dati.

Per ulteriori informazioni su cosa puoi fare con le GPU e su quali tipi di hardware GPU sono disponibili, leggi l'articolo GPU su Compute Engine.

Prima di iniziare

  • Le GPU richiedono driver e software speciali. Questi elementi non sono preinstallati sui cluster Dataproc.
  • Consulta la pagina Prezzi delle GPU su Compute Engine per conoscere 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 dalle istanze senza 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). Se le GPU non sono elencate nella pagina delle quote o se hai bisogno di una quota 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 colleghi le GPU al tuo 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

Collegamento di GPU ai cluster

gcloud

Collega le GPU ai nodi master e worker principali e secondari in un cluster Dataproc quando crei il cluster utilizzando i flag ‑‑master-accelerator, ‑‑worker-accelerator e ‑‑secondary-worker-accelerator. Questi flag possono assumere i seguenti due valori:

  1. il tipo di GPU da collegare a un nodo e
  2. il numero di GPU da collegare al nodo.

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

Esempio:

gcloud dataproc clusters create cluster-name \
    --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

Per utilizzare le GPU nel cluster, devi installare i driver GPU.

API REST

Collega le GPU ai nodi master e worker principali e secondari in un cluster Dataproc compilando i campi InstanceGroupConfig.AcceleratorConfig acceleratorTypeUri e acceleratorCount nell'ambito della richiesta dell'API cluster.create.

Console

Fai clic su PIATTAFORMA CPU E GPU→GPU→AGGIUNGI GPU nelle sezioni dei nodi master e worker del panel Configura i nodi nella pagina Crea un cluster della console Google Cloud per specificare il numero di GPU e il tipo di GPU per i nodi.

Installazione dei driver per GPU

I driver GPU sono necessari per utilizzare le GPU collegate ai nodi Dataproc. Puoi installare i driver GPU seguendo le istruzioni per questa azione di inizializzazione.

Verifica dell'installazione del driver GPU

Dopo aver completato l'installazione del driver della GPU sui nodi Dataproc, puoi verificare che il driver funzioni correttamente. Connettiti al nodo principale del cluster Dataproc tramite SSH ed esegui il seguente comando:

nvidia-smi

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

Configurazione di Spark

Quando invii un job a Spark, puoi utilizzare la proprietà proprietà dell'ambiente di runtime della configurazione spark.executorEnv di Spark 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

Job GPU di esempio

Puoi testare le GPU su Dataproc eseguendo uno dei seguenti job, che presentano vantaggi se eseguiti con GPU:

  1. Esegui uno degli esempi di ML di Spark.
  2. Esegui il seguente 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