Anexe GPUs a clusters do Dataproc

O Dataproc permite que as unidades de processamento gráfico (GPUs) sejam anexadas aos nós principais e de trabalho do Compute Engine num cluster do Dataproc. Pode usar estas GPUs para acelerar cargas de trabalho específicas nas suas instâncias, como a aprendizagem automática e o processamento de dados.

Para mais informações sobre o que pode fazer com as GPUs e que tipos de hardware de GPU estão disponíveis, leia o artigo GPUs no Compute Engine.

Antes de começar

  • As GPUs requerem controladores e software especiais. Estes itens não estão pré-instalados em clusters do Dataproc.
  • Leia acerca dos preços das GPUs no Compute Engine para compreender o custo de utilização de GPUs nas suas instâncias.
  • Leia acerca das restrições para instâncias com GPUs para saber como estas instâncias funcionam de forma diferente das instâncias sem GPUs.
  • Consulte a página de quotas do seu projeto para garantir que tem quota de GPU suficiente (NVIDIA_T4_GPUS, NVIDIA_P100_GPUS ou NVIDIA_V100_GPUS) disponível no seu projeto. Se as GPUs não estiverem listadas na página de quotas ou precisar de uma quota de GPUs adicional, peça um aumento da quota.

Tipos de GPUs

Os nós do Dataproc suportam os seguintes tipos de GPUs. Tem de especificar o tipo de GPU quando anexar GPUs ao cluster do 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 - Estações de trabalho virtuais NVIDIA® Tesla® P100
  • nvidia-tesla-p4-vws – Estações de trabalho virtuais NVIDIA® Tesla® P4
  • nvidia-tesla-t4-vws - Estações de trabalho virtuais NVIDIA® Tesla® T4

Anexe GPUs a clusters

gcloud

Anexe GPUs aos nós principais e de trabalho primários e secundários num cluster do Dataproc quando criar o cluster através das flags ‑‑master-accelerator, ‑‑worker-accelerator e ‑‑secondary-worker-accelerator. Estas flags assumem os dois seguintes valores:

  1. O tipo de GPU a associar a um nó e
  2. O número de GPUs a associar ao nó.

O tipo de GPU é obrigatório e o número de GPUs é opcional (o valor predefinido é 1 GPU).

Exemplo:

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

Para usar GPUs no seu cluster, tem de instalar controladores de GPU.

API REST

Anexe GPUs aos nós principais e de trabalho primários e secundários num cluster do Dataproc preenchendo os campos InstanceGroupConfig.AcceleratorConfig acceleratorTypeUri e acceleratorCount como parte do pedido da API cluster.create.

Consola

Clique em CPU PLATFORM AND GPU→GPUs→ADD GPU nas secções de nós principais e de trabalho do painel Configure nodes na página Create a cluster na consola para especificar o número de GPUs e o tipo de GPU para os nós. Google Cloud

Instale controladores da GPU

Os controladores de GPU são necessários para usar quaisquer GPUs associadas a nós do Dataproc. Para instalar controladores de GPU, consulte as seguintes instruções:

Valide a instalação do controlador da GPU

Depois de terminar a instalação do controlador da GPU nos nós do Dataproc, pode verificar se o controlador está a funcionar corretamente. Entre no nó principal do cluster do Dataproc através de SSH e execute o seguinte comando:

nvidia-smi

Se o controlador estiver a funcionar corretamente, o resultado apresenta a versão do controlador e as estatísticas da GPU (consulte a secção Verificar a instalação do controlador da GPU).

Configuração do Spark

Quando envia uma tarefa para o Spark, pode usar a propriedade do spark.executorEnvambiente de execução da configuração do Spark com a variável de ambiente LD_PRELOAD para pré-carregar as bibliotecas necessárias.

Exemplo:

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

Exemplo de tarefa da GPU

Pode testar GPUs no Dataproc executando qualquer um dos seguintes trabalhos, que beneficiam da execução com GPUs:

  1. Execute um dos exemplos de ML do Spark.
  2. Execute o seguinte exemplo com spark-shell para executar um cálculo de matriz:
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!")

O que se segue