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
oNVIDIA_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® 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 NVIDIA® Tesla® P100nvidia-tesla-p4-vws
- Estaciones de trabajo virtuales NVIDIA® Tesla® P4nvidia-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:
- el tipo de GPU para adjuntar a un nodo y
- 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. Puedes instalar controladores de GPU siguiendo 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 configuración spark.executorEnv
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 GPU en Dataproc mediante la ejecución de cualquiera de los siguientes trabajos, que se benefician cuando se ejecutan con GPU:
- Ejecuta uno de los ejemplos del AA de Spark.
- 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!")