Adjunta GPU a los clústeres

Dataproc proporciona la capacidad de adjuntar unidades de procesamiento de gráficos (GPU) a los nodos trabajadores y principales de Compute Engine en un clúster de Dataproc. Puedes usar estas GPU para acelerar cargas de trabajo específicas en las instancias, como aprendizaje automático y procesamiento de datos.

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

Antes de comenzar

  • Las GPU requieren controladores y software especiales. Esos artículos no están preinstalados en los clústeres de Dataproc.
  • Lee sobre los precios de GPU en Compute Engine para obtener más información sobre el costo del uso de GPU en las instancias.
  • Lee las restricciones para instancias con GPU a fin de aprender cómo esas instancias funcionan de manera diferente a las instancias sin GPU.
  • Verifica la página de cuotas para tu proyecto a fin de asegurarte de que tienes una cuota suficiente de GPU (NVIDIA_T4_GPUS, NVIDIA_P100_GPUS o NVIDIA_V100_GPUS) disponible en el proyecto. Si las GPU no se enumeran en la página de cuotas o necesitas una cuota de GPU adicional, solicita un aumento de la cuota.

Tipos de GPU

Los nodos de ataproc son compatibles con los tipos de GPU siguientes. Debes especificar el tipo de GPU cuando adjuntas una GPU al 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 NVIDIA® Tesla® P100
  • nvidia-tesla-p4-vws - Estaciones de trabajo virtuales NVIDIA® Tesla® P4
  • nvidia-tesla-t4-vws: estaciones de trabajo virtuales NVIDIA® Tesla® T4

Adjunta GPU a los clústeres

gcloud

Adjunta GPU a la instancia principal y a los nodos trabajadores primarios y secundarios en un clúster de Dataproc cuando creas el clúster con las marcas ‑‑master-accelerator, ‑‑worker-accelerator y ‑‑secondary-worker-accelerator. Esas marcas toman los dos valores siguientes:

  1. el tipo de GPU para adjuntar a un nodo y
  2. la cantidad de GPU para adjuntar al nodo.

El tipo de GPU es obligatorio, pero la cantidad es opcional (el 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 GPU en un clúster, debes instalar controladores de GPU.

API de REST

Adjunta las GPU a los nodos trabajadores principales, primarios y secundarios en un clúster de Dataproc completando los campos acceleratorTypeUri y acceleratorCount de InstanceGroupConfig.AcceleratorConfig como parte de la solicitud a la API cluster.create.

Console

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

Instala controladores de GPU

Se requieren controladores de GPU para usar cualquier GPU adjunta a los nodos de Dataproc. Para instalar los controladores de GPU, sigue las instrucciones para esta acción de inicialización.

Verifica la instalación del controlador de GPU

Una vez que finalizas la instalación del controlador de GPU en los nodos de Dataproc, puedes verificar que el controlador funcione de forma correcta. Establece una conexión SSH al nodo principal de tu clúster de Dataproc y ejecuta el siguiente comando:

nvidia-smi

Si el controlador funciona de manera correcta, el resultado mostrará la versión del controlador y las estadísticas de GPU (consulta Verifica la instalación del controlador de GPU).

Configuración de Spark

Cuando envías un trabajo a Spark, puedes usar la propiedad runtime environment property de la configuración de Spark spark.executorEnv 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 GPU en Dataproc mediante la ejecución de cualquiera de los siguientes trabajos, que se benefician cuando se ejecutan con GPU:

  1. Ejecuta uno de los ejemplos del AA de Spark.
  2. Ejecuta el ejemplo siguiente con spark-shell para ejecutar el 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!")

¿Qué sigue?