Collega le GPU ai cluster Dataproc

Dataproc offre la possibilità 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 saperne di più su cosa puoi fare con le GPU e quali tipi di hardware GPU sono disponibili, consulta GPU su Compute Engine.

Prima di iniziare

Tipi di GPU

I nodi Dataproc supportano i seguenti tipi di GPU. Devi specificare il tipo di GPU quando colleghi le GPU 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-rtx-pro-6000 - NVIDIA® RTX® PRO 6000
  • 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

Collega le 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 primari e secondari in un cluster Dataproc, crea il cluster utilizzando i gcloud dataproc clusters create flag ‑‑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 primari e secondari in un cluster Dataproc, compila i campi InstanceGroupConfig.AcceleratorConfig acceleratorTypeUri e acceleratorCount come parte 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 primari e secondari in un cluster Dataproc:

  1. Apri la pagina Dataproc Crea un cluster Dataproc su Compute Engine.
  2. Seleziona il riquadro Configura nodi.
  3. Nelle sezioni Nodo gestore, 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 dei driver GPU

Puoi verificare l'installazione dei driver GPU su un cluster con nettendoti utilizzando SSH al nodo master del cluster ed eseguendo il seguente comando:

nvidia-smi

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

Configurazione di Spark

Quando invii un job a Spark, puoi utilizzare la configurazione di Spark spark.executorEnv proprietà dell'ambiente di runtime proprietà 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 il seguente esempio con spark-shell per eseguire un calcolo matriciale:
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