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 están preinstalados en las imágenes de Dataproc
-ml(se recomienda usar las imágenes de-ml) y se pueden instalar manualmente cuando sea necesario. - 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_GPUSoNVIDIA_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. Debes especificar el tipo de GPU al montar GPUs en tu clúster de Dataproc.
nvidia-tesla-l4- NVIDIA® Tesla® L4nvidia-tesla-a100- NVIDIA® Tesla® A100nvidia-tesla-p100- NVIDIA® Tesla® P100nvidia-tesla-v100- NVIDIA® Tesla® V100nvidia-tesla-p4- NVIDIA® Tesla® P4nvidia-tesla-t4- NVIDIA® Tesla® T4nvidia-tesla-p100-vws- Estaciones de trabajo virtuales con NVIDIA® Tesla® P100nvidia-tesla-p4-vws- Estaciones de trabajo virtuales con NVIDIA® Tesla® P4nvidia-tesla-t4-vws- Estaciones de trabajo virtuales con NVIDIA® Tesla® T4
Conectar GPUs a un clúster
Para conectar GPUs a un clúster de Dataproc, cuando crees el clúster, debes especificar una imagen -ml (recomendada) o usar una acción de inicialización para instalar los controladores de GPU.
En los siguientes ejemplos se especifica la imagen 2.3-ml-ubuntu al crear un clúster.
Google Cloud CLI
Para montar GPUs en los nodos maestro y de trabajador principal y secundario de un clúster de Dataproc, crea el clúster con las marcas gcloud dataproc clusters create
‑‑master-accelerator,
‑‑worker-accelerator y
‑‑secondary-worker-accelerator. Estas marcas aceptan los siguientes valores:
- Tipo de GPU que se va a asociar a un nodo
- 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 \ --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 asociar GPUs a los nodos maestro y de trabajador principal y 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. Estos campos adoptan los siguientes valores:
- Tipo de GPU que se va a asociar a un nodo
- El número de GPUs que se van a asociar al nodo
Consola
Para asociar GPUs a los nodos maestro, de trabajador principal y de trabajador secundario de un clúster de Dataproc, sigue estos pasos:
- Abre la página Crear un clúster de Dataproc en Compute Engine de Dataproc.
- Selecciona el panel Configurar nodos.
- En las secciones Nodo de gestión, Nodos de trabajador y Nodos de trabajador secundarios, en Plataforma de CPU y GPU > GPUs, especifica el número de GPUs y el tipo de GPU de los nodos.
Instalar controladores de GPU
Se necesitan controladores de GPU para utilizar las GPUs conectadas a los nodos de Dataproc.
Como alternativa a los controladores de GPU instalados en las imágenes de Dataproc-ml, puedes usar las siguientes acciones de inicialización para instalar los controladores de GPU al crear un clúster:
Verificar la instalación del controlador de GPU
Para verificar la instalación de los controladores de GPU en un clúster, conéctate al nodo maestro del clúster mediante SSH y ejecuta el siguiente comando:
nvidia-smi
Si el controlador funciona correctamente, el resultado mostrará 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 entorno de tiempo de ejecución 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 las GPUs en Dataproc ejecutando cualquiera de los siguientes trabajos, que se benefician cuando se ejecutan con GPUs:
- Ejecuta uno de los ejemplos de aprendizaje automático de Spark.
- Ejecuta el siguiente ejemplo con
spark-shellpara 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
- Consulta cómo crear una instancia de Compute Engine con GPUs asociadas.
- Consulta más información sobre los tipos de máquinas con GPU.