Adjunta GPU a los clústeres

Cloud 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 Cloud 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 ya instalados en los clústeres de Cloud 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.
  • Las GPU no se pueden adjuntar a máquinas virtuales interrumpibles en clústeres de Dataproc.
  • 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_K80_GPUS, NVIDIA_P100_GPUS o NVIDIA_V100_GPUS) disponible en el proyecto. Si las GPU no están enumeradas en la página de las cuotas o necesitas una cuota de GPU adicional, solicita un aumento de la cuota.

Tipos de GPU

Los nodos de Cloud Dataproc son compatibles con los tipos de GPU siguientes. Debes especificar el tipo de GPU cuando adjuntas una GPU al clúster de Cloud Dataproc.

  • nvidia-tesla-k80 - NVIDIA® Tesla® K80
  • nvidia-tesla-p100 - NVIDIA® Tesla® P100
  • nvidia-tesla-v100 - NVIDIA® Tesla® V100

Adjunta GPU a los clústeres

gcloud

Adjunta GPU a los nodos trabajadores y principales en un clúster de Cloud Dataproc cuando creas un clúster mediante las marcas ‑‑master-accelerator y ‑‑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).

gcloud beta dataproc clusters create args \
  --master-accelerator type=nvidia-tesla-k80 \
  --worker-accelerator type=nvidia-tesla-k80,count=4

Para usar GPU en un clúster, debes instalar controladores de GPU.

API de REST

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

Console

La asistencia de GCP Console para crear clústeres con las GPU adjuntas se agregará a una versión de Cloud Dataproc futura.

Instala controladores de GPU

Se requieren controladores de GPU para usar cualquier GPU adjunta a los nodos de Cloud Dataproc. La manera más fácil de hacerlo es crear una acción de inicialización, que se usa cuando creas un clúster. La instalación de controladores y bibliotecas de GPU en una acción de inicialización puede tardar varios minutos.

Esta acción de inicialización instala controladores de GPU NVIDIA desde el componente no gratuito del repositorio de backports de Debian 8 Jessie. Los controladores más actuales pueden estar disponibles en el sitio de descargas de controladores NVIDIA (para “Sistema operativo”, selecciona “Muestra todos los sistemas operativos”→“Linux 64 Bit” para los controladores compatibles de Debian 8). La instalación de controladores y bibliotecas de GPU en una acción de inicialización puede tardar varios minutos. Puedes guardar una copia de esta acción de inicialización en un depósito de Cloud Storage para usar con Cloud Dataproc.

#!/bin/bash

set -e -x

# Detect NVIDIA GPU
apt-get update
apt-get install -y pciutils
if ! (lspci | grep -q NVIDIA); then
  echo 'No NVIDIA card detected. Skipping installation.' >&2
  exit 0
fi

# Add non-free Debian 9 Stretch packages.
# See https://www.debian.org/distrib/packages#note
for type in deb deb-src; do
  for distro in stretch stretch-backports; do
    for component in contrib non-free; do
      echo "${type} http://deb.debian.org/debian/ ${distro} ${component}" \
          >> /etc/apt/sources.list.d/non-free.list
    done
  done
done
apt-get update

# Install proprietary NVIDIA Drivers and CUDA
# See https://wiki.debian.org/NvidiaGraphicsDrivers
export DEBIAN_FRONTEND=noninteractive
apt-get install -y "linux-headers-$(uname -r)"
# Without --no-install-recommends this takes a very long time.
apt-get install -y -t stretch-backports --no-install-recommends \
  nvidia-cuda-toolkit nvidia-kernel-common nvidia-driver nvidia-smi

# Create a system wide NVBLAS config
# See http://docs.nvidia.com/cuda/nvblas/
NVBLAS_CONFIG_FILE=/etc/nvidia/nvblas.conf
cat << EOF >> ${NVBLAS_CONFIG_FILE}
# Insert here the CPU BLAS fallback library of your choice.
# The standard libblas.so.3 defaults to OpenBLAS, which does not have the
# requisite CBLAS API.
NVBLAS_CPU_BLAS_LIB /usr/lib/libblas/libblas.so

# Use all GPUs
NVBLAS_GPU_LIST ALL

# Add more configuration here.
EOF
echo "NVBLAS_CONFIG_FILE=${NVBLAS_CONFIG_FILE}" >> /etc/environment

# Rebooting during an initialization action is not recommended, so just
# dynamically load kernel modules. If you want to run an X server, it is
# recommended that you schedule a reboot to occur after the initialization
# action finishes.
modprobe -r nouveau
modprobe nvidia-current
modprobe nvidia-drm
modprobe nvidia-uvm
modprobe drm

# Restart any NodeManagers so they pick up the NVBLAS config.
if systemctl status hadoop-yarn-nodemanager; then
  systemctl restart hadoop-yarn-nodemanager
fi

Verifica la instalación del controlador de GPU

Una vez que finalizas la instalación del controlador de GPU en los nodos de Cloud Dataproc, puedes verificar que el controlador funcione de manera correcta. Conéctate al nodo principal del clúster de Cloud Dataproc mediante SSH y ejecuta el comando siguiente:

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íes trabajos a Spark, puedes usar la Configuración de Spark siguiente a fin de cargar las bibliotecas necesarias.

spark.executorEnv.LD_PRELOAD=libnvblas.so

Ejemplo de trabajo de GPU

Puedes probar GPU en Cloud Dataproc mediante la ejecución de cualquiera de los trabajos siguientes, 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 un 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 * 5
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!")

Pasos siguientes

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de Cloud Dataproc
Si necesitas ayuda, visita nuestra página de asistencia.