Collega le GPU ai cluster

Managed Service for Apache Spark offre la possibilità di collegare le unità di elaborazione grafica (GPU) ai nodi master e worker di Compute Engine in un cluster Managed Service for Apache Spark. 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 Managed Service for Apache Spark supportano i seguenti tipi di GPU. Devi specificare il tipo di GPU quando colleghi le GPU al cluster Managed Service for Apache Spark.

  • 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 Managed Service for Apache Spark, 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 o presuppongono l'utilizzo dell'immagine 2.3-ml-ubuntu durante la creazione di un cluster.

Google Cloud Console

Per collegare le GPU a un cluster Managed Service for Apache Spark:

  1. Apri la pagina Crea cluster.
  2. Nella sezione Configurazione worker, fai clic sulla scheda GPU , quindi specifica il tipo e il numero di GPU.
  3. Per impostazione predefinita, le impostazioni del nodo driver (master) sono le stesse delle impostazioni del worker principale. In Configurazione aggiuntiva, puoi fare clic su Nodo driver per deselezionare la casella di controllo Imposta il nodo driver come il worker principale e specificare il tipo di macchina per il nodo driver.

gcloud CLI

Per collegare le GPU ai nodi master e worker primari e secondari in un cluster Managed Service for Apache Spark, crea il cluster utilizzando i gcloud dataproc clusters create ‑‑master-accelerator, ‑‑worker-accelerator, e ‑‑secondary-worker-accelerator flag. 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 Managed Service for Apache Spark, 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

Installa i driver della GPU

I driver GPU sono necessari per utilizzare le GPU collegate ai nodi Managed Service for Apache Spark. In alternativa all'utilizzo dei driver GPU installati nelle immagini -ml di Managed Service for Apache Spark, 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, quindi 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 Managed Service for Apache Spark 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