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 são pré-instalados em imagens do Dataproc (recomenda-se a utilização das imagens do Dataproc) e podem ser instalados manualmente quando e se necessário.-ml-ml
  • 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 GPU.
  • 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-rtx-pro-6000 - NVIDIA® RTX® PRO 6000
  • 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

Associe GPUs a um cluster

Para anexar GPUs a um cluster do Dataproc, quando cria o cluster, tem de especificar uma -ml imagem (recomendado) ou usar uma ação de inicialização para instalar controladores de GPU. Os exemplos seguintes especificam a imagem 2.3-ml-ubuntu quando cria um cluster.

CLI do Google Cloud

Para anexar GPUs aos nós principais e de trabalho primários e secundários num cluster do Dataproc, crie o cluster com as flags gcloud dataproc clusters create ‑‑master-accelerator, ‑‑worker-accelerator e ‑‑secondary-worker-accelerator. Estas flags assumem os seguintes valores:

  • O tipo de GPU a associar a um nó
  • 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 \
    --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

Para anexar GPUs aos nós principais e de trabalho primários e secundários num cluster do Dataproc, preencha os campos InstanceGroupConfig.AcceleratorConfig acceleratorTypeUri e acceleratorCount como parte do pedido da API cluster.create. Estes campos aceitam os seguintes valores:

  • O tipo de GPU a associar a um nó
  • O número de GPUs a associar ao nó

Consola

Para anexar GPUs aos nós principais e de trabalho primários e secundários num cluster do Dataproc, siga estes passos:

  1. Abra a página Dataproc Crie um cluster do Dataproc no Compute Engine.
  2. Selecione o painel Configurar nós.
  3. Nas secções Nó do gestor, Nós de trabalho e Nós de trabalho secundários, em Plataforma de CPU e GPU > GPUs, especifique o número de GPUs e o tipo de GPU para os nós.

Instale controladores da GPU

São necessários controladores de GPU para usar GPUs associadas a nós do Dataproc. Em alternativa à utilização dos controladores da GPU instalados nas imagens do Dataproc -ml, pode utilizar as seguintes ações de inicialização para instalar os controladores da GPU quando cria um cluster:

Valide a instalação do controlador da GPU

Pode verificar a instalação do controlador da GPU num cluster estabelecendo ligação através de SSH ao nó principal do cluster e, em seguida, executando 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