Montar GPUs en clústeres de Dataproc

Dataproc permite montar unidades de procesamiento gráfico (GPUs) en los nodos maestros y de trabajador de Compute Engine de un clúster de Dataproc. Estas GPUs se pueden usar para acelerar determinadas cargas de trabajo en tus instancias, como las de aprendizaje automático y de procesamiento de datos.

Para obtener más información sobre lo que puedes hacer con las GPUs y qué tipos de hardware de GPU están disponibles, consulta el artículo GPUs en Compute Engine.

Antes de empezar

  • Las GPU requieren controladores y software especiales. Estos elementos no están preinstalados en los clústeres de Dataproc.
  • Consulta los precios de las GPU en Compute Engine para saber cuánto cuesta usar las GPU en tus instancias.
  • Consulta las restricciones de las instancias con GPUs para saber cómo funcionan estas instancias en comparación con las que no tienen GPUs.
  • Consulta la página de cuotas de tu proyecto para asegurarte de que tienes suficiente cuota de GPU (NVIDIA_T4_GPUS, NVIDIA_P100_GPUS o NVIDIA_V100_GPUS) disponible en tu proyecto. Si las GPUs no aparecen en la página de cuotas o necesitas más cuota de GPU, solicita un aumento de cuota.

Tipos de GPUs

Los nodos de Dataproc admiten los siguientes tipos de GPU. Debe especificar el tipo de GPU al asociar GPUs a su clúster de 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 - Estaciones de trabajo virtuales con NVIDIA® Tesla® P100
  • nvidia-tesla-p4-vws - Estaciones de trabajo virtuales con NVIDIA® Tesla® P4
  • nvidia-tesla-t4-vws - Estaciones de trabajo virtuales con NVIDIA® Tesla® T4

Conectar GPUs a clústeres

gcloud

Si montas GPUs en el nodo maestro y en los nodos de trabajador principal y secundario de un clúster de Dataproc al crear el clúster con las marcas ‑‑master-accelerator, ‑‑worker-accelerator y ‑‑secondary-worker-accelerator, Estas marcas aceptan los dos valores siguientes:

  1. el tipo de GPU que se va a asociar a un nodo.
  2. El número de GPUs que se van a asociar al nodo.

El tipo de GPU es obligatorio y el número de GPUs es opcional (el valor predeterminado es 1 GPU).

Ejemplo:

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 en tu clúster, debes instalar los controladores de GPU.

API REST

Para asociar GPUs a los nodos maestro, de trabajador principal y de trabajador secundario de un clúster de Dataproc, rellena los campos InstanceGroupConfig.AcceleratorConfig acceleratorTypeUri y acceleratorCount como parte de la solicitud de la API cluster.create.

Consola

En las secciones de nodos maestros y de trabajadores del panel Configurar nodos de la página Crear un clúster de la consola de Google Cloud , haz clic en PLATAFORMA DE CPU Y GPU → GPUs → AÑADIR GPU para especificar el número y el tipo de GPUs de los nodos.

Instalar controladores de GPU

Se necesitan controladores de GPU para utilizar las GPUs conectadas a los nodos de Dataproc. Para instalar los controladores de GPU, sigue estas instrucciones:

Verificar la instalación del controlador de GPU

Una vez que hayas terminado de instalar el controlador de GPU en tus nodos de Dataproc, puedes verificar que el controlador funciona correctamente. Accede al nodo maestro de tu clúster de Dataproc mediante SSH y ejecuta el siguiente comando:

nvidia-smi

Si el controlador funciona correctamente, en la salida se mostrarán la versión del controlador y las estadísticas de la GPU (consulta Verificar la instalación del controlador de la GPU).

Configuración de Spark

Cuando envías un trabajo a Spark, puedes usar la propiedad spark.executorEnv de configuración de Spark propiedad del entorno de ejecución con la variable de entorno LD_PRELOAD para precargar las bibliotecas necesarias.

Ejemplo:

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

Ejemplo de trabajo de GPU

Puedes probar las GPUs en Dataproc ejecutando cualquiera de los siguientes trabajos, que se benefician cuando se ejecutan con GPUs:

  1. Ejecuta uno de los ejemplos de aprendizaje automático de Spark.
  2. Ejecuta el siguiente ejemplo con spark-shell para realizar un cálculo de matrices:
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!")

Siguientes pasos