GPU

En esta página, se muestra cómo usar los aceleradores de hardware de la unidad de procesamiento de gráficos (GPU) de NVIDIA® en los nodos de los clústeres de Google Kubernetes Engine.

Descripción general

Con GKE, puedes crear grupos de nodos equipados con las GPU V100, P4, P100 y K80 de NVIDIA Tesla®. Mediante la ejecución de las GPU en tus clústeres, puedes acelerar las tareas de procesamiento intensivo, como el aprendizaje profundo (reconocimiento de imágenes, procesamiento de lenguaje natural, etc.), la transcodificación de videos, el procesamiento de imágenes y mucho más.

También puedes usar las GPU con VM interrumpibles si tus cargas de trabajo pueden tolerar interrupciones frecuentes de los nodos. Usar las VM interrumpibles reduce el precio de la ejecución de GPU. Para obtener más información, consulta las GPU en instancias interrumpibles.

Requisitos

Las GPU en GKE tienen los requisitos siguientes:

Versión de Kubernetes
Para los grupos de nodos que usan la imagen de nodo de Container-Optimized OS, los nodos de GPU están disponibles en GKE versión 1.9 o posterior. Para los grupos de nodos que usan la imagen de nodo de Ubuntu, los nodos de GPU están disponibles en GKE versión 1.11.3 o superior.
Cuota de GPU

Debes tener la cuota de GPU de Compute Engine en la zona que deseas antes de que puedas crear los nodos de GPU. A fin de asegurarte de que cuentas con la cuota de GPU suficiente para tu proyecto, consulta Cuotas en Google Cloud Platform Console.

Si necesitas una cuota de GPU adicional, debes solicitar una cuota de GPU en GCP Console. Si tienes una cuenta de facturación establecida, tu proyecto debería recibir de forma automática la cuota después de enviar la solicitud de esta.

Controladores de GPU de NVIDIA

Debes instalar de forma manual los controladores de GPU de NVIDIA en tus nodos. En esta página, se explica cómo instalar los controladores.

Limitaciones

Antes de usar las GPU en GKE, ten en cuenta las limitaciones siguientes:

  • No puedes agregar las GPU a grupos de nodos existentes.
  • Los nodos de GPU no se pueden migrar en vivo durante los eventos de mantenimiento.

Disponibilidad

Las GPU están disponibles en regiones y zonas específicas. Cuando solicitas la cuota de GPU, debes tener en cuenta las regiones en las que quieres ejecutar tus clústeres.

Para obtener una lista completa de las regiones y zonas aplicables, consulta [GPU en Compute Engine].

También puedes consultar las GPU disponibles en tu zona con la herramienta de línea de comandos de gcloud.

gcloud

Para obtener una lista de todos los tipos de aceleradores de GPU compatibles de cada zona, ejecuta el comando siguiente:

gcloud compute accelerator-types list

Precios

Para obtener información sobre los precios de GPU, consulta la tabla de precios en la página GPU de GCP.

Cuota de GPU

Tu cuota de GPU es la cantidad total de GPU que puedes ejecutar en tu proyecto de GCP. Para crear clústeres con GPU, tu proyecto debe contar con una cuota de GPU suficiente.

Tu cuota de GPU debe ser, al menos, equivalente a la cantidad total de GPU que quieres ejecutar en tu clúster. Si habilitas el ajuste de escala automático del clúster, debes solicitar una cuota de GPU que sea, al menos, equivalente a la cantidad máxima de nodos de tu clúster multiplicado por la cantidad de GPU por nodo.

Por ejemplo, si creas un clúster con tres nodos que ejecutan dos GPU por nodo, tu proyecto necesita, al menos, seis cuotas de GPU.

Solicita la cuota de GPU

Solicita la cuota de GPU con GCP Console.

Console

Realiza los pasos siguientes:

  1. Ve al menú Cuotas de Cloud IAM en GCP Console.

    Ir al menú Cuotas

  2. En el menú desplegable Metrics (Métricas), haz clic en None (Ninguna) y, a continuación, escribe “gpus” en el campo de búsqueda.

  3. Desde los resultados de la búsqueda, selecciona las GPU que deseas:

    Captura de pantalla del menú desplegable de las Métricas que muestra las métricas de las GPU seleccionadas.

  4. Cierra el menú desplegable Métricas.

Envía la solicitud de la cuota

Console

Realiza los pasos siguientes:

  1. En la lista de cuotas de GPU, selecciona las cuotas de las regiones que deseas, como us-central1.
  2. Haz clic en Editar cuotas. Se abrirá un formulario de solicitud del lado derecho de GCP Console.
  3. Completa el campo Nuevo límite de cuota para cada solicitud de cuotas.
  4. Completa el campo Descripción de la solicitud con los detalles sobre tu solicitud.
  5. Haz clic en Listo.
  6. Haz clic en Enviar solicitud.

Ejecuta GPU

En las secciones siguientes, se explica cómo ejecutar GPU en los clústeres de GKE.

Crea un grupo de nodos de GPU de ajuste de escala automático

Para aprovechar al máximo la ventaja más rentable de las GPU en GKE y a fin de beneficiarse del ajuste de escala automático del clúster, recomendamos crear grupos de nodos de GPU por separado en tus clústeres.

Cuando agregas un grupo de nodos de GPU a un clúster existente que ya ejecuta un grupo de nodos sin GPU, GKE ejecuta taints de forma automática en los nodos de GPU con el siguiente taint de nodo:

  • Clave: nvidia.com/gpu
  • Efecto: NoSchedule

Además, GKE aplica de forma automática las tolerancias correspondientes a los pods que solicitan GPU mediante la ejecución del controlador de admisión ExtendedResourceToleration.

Esto provoca que en los nodos de GPU se programen solo los pods que solicitan GPU, lo que permite que el ajuste de escala automático sea más eficaz: tus nodos de GPU pueden escalar con rapidez si no hay suficientes pods que soliciten GPU.

Debes crear un grupo de nodos de GPU en un clúster existente con GCP Console o la herramienta de línea de comandos de gcloud.

gcloud

Para crear un grupo de nodos con GPU, ejecuta el comando siguiente:

gcloud container node-pools create [POOL_NAME] \
--accelerator type=[GPU_TYPE],count=[AMOUNT] --zone [COMPUTE_ZONE] \
--cluster [CLUSTER_NAME] [--num-nodes 3 --min-nodes 0 --max-nodes 5 \
--enable-autoscaling]

donde:

  • [POOL_NAME] es el nombre que eliges para el grupo de nodos.
  • [GPU_TYPE] es el tipo de GPU, ya sea nvidia-tesla-v100, nvidia-tesla-p100 o nvidia-tesla-k80.
  • [AMOUNT] es la cantidad de GPU que se conecta a los nodos en el grupo de nodos.
  • [COMPUTE_ZONE] es la zona de procesamiento en la que se crea el grupo de nodos, como us-central1-c. El clúster ya debe estar en ejecución en la zona especificada.
  • [CLUSTER_NAME] es el nombre del clúster en el que se creará el grupo de nodos.
  • --num-nodes especifica la cantidad inicial de nodos que se crearán.
  • --min-nodes especifica la cantidad mínima de nodos para ejecutar en un momento determinado.
  • --max-nodes especifica la cantidad máxima de nodos que se pueden ejecutar.
  • --enable-autoscaling permite al grupo de nodos hacer el ajuste de escala automático cuando la carga de trabajo exige cambios.

Por ejemplo, el comando siguiente crea p100, un grupo de nodos de ajuste de escala automático, con dos GPU P100 en el clúster p100-cluster:

gcloud container node-pools create p100 \
--accelerator type=nvidia-tesla-p100,count=2 \
--zone us-central1-c --cluster p100-cluster \
--num-nodes 3 --min-nodes 0 --max-nodes 5 --enable-autoscaling

Console

  1. Dirígete al menú de Google Kubernetes Engine en GCP Console.

    Ir al menú de Google Kubernetes Engine

  2. Selecciona el clúster que desees.

  3. Haz clic en Editar.

  4. Desde Grupos de nodos, haz clic en Agregar grupo de nodos.

  5. De manera opcional, desde el menú desplegable Ajuste de escala automático, selecciona Activar.

  6. Configura tu grupo de nodos como desees. A continuación, en Tipo de máquina, haz clic en Personalizar.

  7. En el menú desplegable Cantidad de GPU, selecciona la cantidad de GPU que deseas que se ejecuten por nodo.

  8. En el menú desplegable Tipo de GPU, selecciona el tipo de GPU que deseas.

  9. Para confirmar la advertencia, selecciona la casilla de verificación Entiendo las limitaciones.

  10. Haz clic en Guardar.

Crea un nuevo clúster zonal con GPU

Debes crear un clúster zonal que ejecute GPU con GCP Console o la herramienta de línea de comandos de gcloud.

gcloud

Para crear un clúster zonal con GPU en ejecución en su grupo de nodos predeterminado, ejecuta el comando siguiente:

gcloud container clusters create [CLUSTER_NAME] \
--accelerator type=[GPU_TYPE],count=[AMOUNT] \
--zone [COMPUTE_ZONE]

donde:

  • [CLUSTER_NAME] es el nombre que eliges para el clúster.
  • [GPU_TYPE] es el tipo de GPU, ya sea nvidia-tesla-v100, nvidia-tesla-p100 o nvidia-tesla-k80.
  • [AMOUNT] es la cantidad de GPU para ejecutar en el grupo de nodos predeterminado.
  • [COMPUTE_ZONE] es la zona de procesamiento del clúster, como us-central1-c.

Por ejemplo, con el comando siguiente, se crea un clúster p100 con tres nodos (el valor predeterminado cuando se omite --num-nodes) y dos GPU P100 por nodo:

gcloud container clusters create p100 \
--accelerator type=nvidia-tesla-p100,count=2 \
--zone us-central1-c

Console

  1. Dirígete al menú de Google Kubernetes Engine en GCP Console.

    Ir al menú de Google Kubernetes Engine

  2. Haz clic en Crear clúster.

  3. Elige la plantilla del clúster de Procesamiento acelerado de GPU.

  4. Configura tu clúster como desees. Luego, personaliza el grupo de nodos de GPU o agrega los grupos de nodos de GPU adicionales.

  5. Para confirmar la advertencia, selecciona Entiendo las limitaciones.

  6. Haz clic en Crear.

Crea un clúster regional nuevo con GPU

De forma predeterminada, los clústeres regionales crean nodos en tres zonas de una región. Sin embargo, ninguna región de GCP tiene GPU en las tres zonas. Cuando creas clústeres regionales con GPU, debes especificar de forma manual las zonas en que las GPU están disponibles. Para saber qué zonas cuentan con GPU, consulta Disponibilidad.

Crea un clúster de GPU regional con la herramienta de línea de comandos de gcloud.

gcloud

Para crear un clúster regional con GPU, ejecuta el comando siguiente:

gcloud container clusters create [CLUSTER_NAME] \
--accelerator type=[GPU_TYPE],count=[AMOUNT] \
--region [REGION] --node-locations [ZONE],[ZONE]

donde:

  • [CLUSTER_NAME] es el nombre que eliges para el clúster.
  • [GPU_TYPE] es el tipo de GPU: nvidia-tesla-v100, nvidia-tesla-p100, o nvidia-tesla-k80.
  • [AMOUNT] es la cantidad de GPU para ejecutar por nodo.
  • [REGION] es la región del clúster, como us-central1.
  • [ZONE] es una zona de procesamiento en la región, como us-central1-c. Las zonas deben tener los tipos de GPU que especifiques.

Por ejemplo, el comando siguiente crea un clúster p100 con tres nodos (el valor predeterminado cuando se omite --num-nodes) y dos GPU P100 por nodo, en dos zonas en us-central1:

gcloud container clusters create p100 \
--accelerator type=nvidia-tesla-k80,count=2 \
--region us-central1 \ --node-locations us-central1-a,us-central1-c

Console

  1. Dirígete al menú de Google Kubernetes Engine en GCP Console.

    Ir al menú de Google Kubernetes Engine

  2. Haz clic en Crear clúster.

  3. Elige la plantilla del clúster de Procesamiento acelerado de GPU.

  4. En Tipo de ubicación, elige Regional. En Región, elige la región deseada.

  5. Configura tu clúster como desees. Luego, personaliza el grupo de nodos de GPU o agrega los grupos de nodos de GPU adicionales.

  6. Para confirmar la advertencia, selecciona Entiendo las limitaciones.

  7. Haz clic en Crear.

Instala los controladores de las GPU de NVIDIA

Después de agregar los nodos de GPU a tu clúster, debes instalar los controladores del dispositivo de NVIDIA en los nodos. Google proporciona un DaemonSet que instala de forma automática los controladores para ti.

Consulta la sección a continuación para obtener las instrucciones de instalación de Container-Optimized OS (COS) y nodos Ubuntu.

COS

Para implementar la instalación de DaemonSet, ejecuta el comando siguiente:

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/stable/nvidia-driver-installer/cos/daemonset-preloaded.yaml

La instalación tarda varios minutos en completarse. Una vez instalado, el complemento del dispositivo de NVIDIA muestra la capacidad de la GPU a través de las API de Kubernetes.

Ubuntu

Ten en cuenta que la compatibilidad de GPU requiere de la versión v1.11.3 o superior para los nodos de Ubuntu.

Para implementar la instalación de DaemonSet, ejecuta el comando siguiente:

kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/ubuntu/daemonset-preloaded.yaml

La instalación tarda varios segundos en completarse. Una vez instalado, el complemento del dispositivo de NVIDIA muestra la capacidad de la GPU a través de las API de Kubernetes.

Configura pods para consumir las GPU

Usa un límite de recursos a fin de configurar la cantidad de GPU que consumen los pods. Debes especificar un límite de recursos en una especificación de pod con los pares de clave-valor siguientes:

  • Clave: nvidia/gpu
  • Valor: Cantidad de GPU para consumir

A continuación, se muestra un ejemplo de una especificación de pod que consume GPU:

apiVersion: v1
kind: Pod
metadata:
  name: my-gpu-pod
spec:
  containers:
  - name: my-gpu-container
    image: nvidia/cuda:10.0-runtime-ubuntu18.04
    resources:
      limits:
       nvidia.com/gpu: 2

Consume varios tipos de GPU

Si deseas usar varios tipos de aceleradores de GPU por clúster, debes crear varios grupos de nodos, cada uno con su propio tipo de acelerador. GKE conecta un selector de nodo único a los nodos de GPU para ayudar a colocar las cargas de trabajo de GPU en los nodos con tipos de GPU específicos:

  • Clave: cloud.google.com/gke-accelerator
  • Valor: nvidia-tesla-k80, nvidia-tesla-p100 o nvidia-tesla-v100

Puedes especificar tipos de GPU determinados si agregas este selector de nodo a la especificación de pod de tu carga de trabajo. Por ejemplo:

apiVersion: v1
kind: Pod
metadata:
  name: my-gpu-pod
spec:
  containers:
  - name: my-gpu-container
    image: nvidia/cuda:10.0-runtime-ubuntu18.04
    resources:
      limits:
       nvidia.com/gpu: 2
  nodeSelector:
    cloud.google.com/gke-accelerator: nvidia-tesla-k80 # or nvidia-tesla-v100 or nvidia-tesla-p100

Acerca de las bibliotecas CUDA

CUDA® es una plataforma de procesamiento paralela de NVIDIA y un modelo de programación para las GPU. Los controladores del dispositivo NVIDIA que instalas en tu clúster incluyen las bibliotecas CUDA.

Las bibliotecas CUDA y las utilidades de depuración están disponibles dentro del contenedor en /usr/local/nvidia/lib64 y /usr/local/nvidia/bin, respectivamente.

Las aplicaciones CUDA que se ejecutan en los pods que consumen las GPU de NVIDIA necesitan detectar de forma dinámica las bibliotecas CUDA. Esto requiere incluir /usr/local/nvidia/lib64 en la variable de entorno LD_LIBRARY_PATH.

Debes usar las imágenes base de CUDA Docker basadas en Ubuntu para las aplicaciones CUDA en GKE, en que LD_LIBRARY_PATH ya está establecido de forma correcta. La última versión CUDA compatible es 9.0.

Supervisa los nodos de GPU

GKE expone las métricas siguientes de Stackdriver Monitoring para los contenedores mediante las GPU. Puedes usar estas métricas para supervisar el rendimiento de tus cargas de trabajo de GPU:

  • Ciclo de trabajo (container/accelerator/duty_cycle): porcentaje de tiempo del último período de muestra (10 segundos) durante el cual el acelerador se procesó de forma activa. Entre 1 y 100.
  • Uso de memoria (container/accelerator/memory_used): cantidad de memoria del acelerador asignada en bytes.
  • Capacidad de memoria (container/accelerator/memory_total): memoria total del acelerador en bytes.

Estas métricas están disponibles en Stackdriver.

Para obtener más información sobre cómo supervisar tus clústeres y sus recursos, consulta Supervisión.

Visualiza las métricas de uso

Puedes ver las métricas de uso de GPU de tus cargas de trabajo desde el panel de Cargas de trabajo en GCP Console.

Console

Para ver el uso de GPU de tus cargas de trabajo, realiza los pasos siguientes:

  1. Ve al menú Cargas de trabajo en GCP Console.

    Ir al menú de Google Kubernetes Engine

  2. Selecciona la carga de trabajo deseada.

El panel de las cargas de trabajo muestra los gráficos para el uso y la capacidad de la memoria de GPU y el ciclo de trabajo de GPU.

Pasos siguientes

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

Enviar comentarios sobre...