Ejecución de aplicaciones en nodos basados en GPU

Descubra cómo ejecutar aplicaciones en nodos de trabajador basados en GPU en clusters creados mediante Container Engine for Kubernetes (OKE).

Para ejecutar aplicaciones en nodos de trabajador basados en GPU, seleccione una unidad de GPU y una imagen de GPU compatible para los nodos gestionados de un pool de nodos gestionado o para los nodos autogestionados.

La unidad de computación determina el número de CPU y la cantidad de memoria asignada a cada nodo. Entre las formas que puede seleccionar se encuentran las formas de GPU (unidad de procesamiento de gráficos), con las propias GPU en tarjetas gráficas NVIDIA. Originalmente pensado para manipular imágenes y gráficos, las GPU son muy eficientes en el procesamiento de grandes bloques de datos en paralelo. Esta capacidad hace que las GPU sean una buena opción al desplegar aplicaciones con un uso intensivo de datos. Para obtener más información sobre las unidades de GPU que se deben seleccionar para los nodos de trabajador, consulte Unidades de GPU soportadas por Container Engine for Kubernetes.

Se accede a la funcionalidad de computación paralela masiva de las GPU NVIDIA mediante bibliotecas CUDA (Compute Unified Device Architecture). Las diferentes GPU (por ejemplo, NVIDIA® Tesla VoltaTM, NVIDIA® Tesla PascalTM) requieren versiones específicas de las bibliotecas CUDA. Al seleccionar una unidad de GPU para un pool de nodos gestionado o un nodo autogestionado, también debe seleccionar una imagen de GPU de Oracle Linux compatible que tenga las bibliotecas de CUDA preinstaladas. Los nombres de las imágenes compatibles incluyen 'GPU'.

Puede seleccionar una unidad de GPU y una imagen compatible para los nodos de trabajador de un cluster de las siguientes formas:

  • Nodos gestionados: mediante Container Engine for Kubernetes para crear un pool de nodos gestionado y seleccionando una unidad de GPU (e imagen compatible) para el pool de nodos. Todos los nodos de trabajador del pool de nodos gestionados tienen la unidad de GPU. Para obtener más información, consulte Creación de un pool de nodos.
  • Nodos autogestionados: mediante el servicio Compute para crear una instancia informática (o pool de instancias) para alojar un nodo autogestionado, seleccionando una unidad de GPU (e imagen compatible) para la instancia y especificando el cluster de Kubernetes al que agregar la instancia. Solo puede agregar nodos autogestionados a clusters mejorados. Para obtener más información, consulte Trabajar con Nodos Autogestionados.

Al desplegar una aplicación en un cluster que ha creado con Container Engine for Kubernetes, debe especificar en la especificación de pod el número de recursos de GPU necesarios. Para desplegar la aplicación, el programador de kube determina qué nodo tiene los recursos necesarios. Cuando un pod de aplicación se va a ejecutar en un nodo con una unidad de GPU, se montan los siguientes elementos en el pod:

  • el número solicitado de dispositivos GPU
  • biblioteca CUDA del nodo

La aplicación está aislada de los diferentes tipos de GPU. Como resultado, las bibliotecas CUDA para diferentes GPU no tienen que incluirse en el contenedor de aplicaciones, lo que garantiza que el contenedor permanezca portátil.

Tenga en cuenta lo siguiente:

  • Puede especificar unidades de GPU para pools de nodos gestionados en clusters que ejecuten la versión 1.19.7 o posterior de Kubernetes. No especifique una unidad de GPU para pools de nodos gestionados en clusters que ejecuten versiones anteriores de Kubernetes.
  • Puede utilizar la consola, la API o la CLI para especificar una imagen de GPU para su uso en una unidad de GPU. También puede utilizar la API o la CLI para especificar una imagen que no sea de GPU para utilizarla en una unidad de GPU.
  • Una vez creado un pool de nodos gestionado con una unidad de GPU, no puede cambiar el pool de nodos para que tenga una unidad que no sea de GPU. Del mismo modo, no puede cambiar un pool de nodos gestionados con una unidad que no sea de GPU para que tenga una unidad de GPU.
  • Las unidades de GPU no están necesariamente disponibles en todos los dominios de disponibilidad.
  • Puede especificar unidades de GPU para pools de nodos gestionados en clusters que son nativos de VCN (es decir, clusters que tienen puntos finales de API de Kubernetes alojados en una subred de su VCN). No especifique una unidad de GPU para pools de nodos gestionados en un cluster si el punto final de API de Kubernetes del cluster no está integrado en la VCN. Consulte Migración a clusters nativos de VCN.
  • Puede ejecutar aplicaciones en nodos de trabajador de GPU en pools de nodos gestionados, pero no en pools de nodos virtuales.

Definición de un pod para que se ejecute solo en nodos que tengan una GPU

El siguiente archivo de configuración define un pod para que se ejecute en cualquier nodo del cluster que tenga un recurso de GPU disponible (independientemente del tipo de GPU):


apiVersion: v1
kind: Pod
metadata:
  name: test-with-gpu-workload
spec:
  restartPolicy: OnFailure
  containers:
    - name: cuda-vector-add
      image: k8s.gcr.io/cuda-vector-add:v0.1
      resources:
        limits:
          nvidia.com/gpu: 1

Definición de un pod para que se ejecute solo en nodos que no tengan una GPU

El siguiente archivo de configuración define un pod para que se ejecute sólo en los nodos del cluster que no tienen una GPU:


apiVersion: v1
kind: Pod
metadata:
  name: test-with-non-gpu-workload
spec:
  restartPolicy: OnFailure
  containers:
    - name: test-with-non-gpu-workload
      image: "oraclelinux:8"

Unidades de GPU soportadas por Container Engine for Kubernetes

Container Engine for Kubernetes soporta diferentes unidades de GPU para pools y nodos de nodos gestionados, así como para nodos autogestionados.

Tenga en cuenta que, debido a los límites de servicio y las cuotas de compartimento, puede que algunas de las unidades de GPU soportadas no estén disponibles en su arrendamiento concreto.

Unidades de GPU soportadas para pools de nodos gestionados y nodos gestionados

Para pools de nodos gestionados y nodos gestionados, Container Engine for Kubernetes soporta las siguientes unidades de GPU:

  • Unidades de GPU de máquina virtual (VM) soportadas por Container Engine for Kubernetes para pools de nodos gestionados y nodos gestionados:

    • VM.GPU2.1
    • VM.GPU3.1
    • VM.GPU3.2
    • VM.GPU3.4
    • VM.GPU.A10.1
    • VM.GPU.A10.2
  • Unidades de GPU con hardware dedicado (BM) soportadas por Container Engine for Kubernetes para pools de nodos gestionados y nodos gestionados:

    • BM.GPU2.2
    • BM.GPU3.8
    • BM.GPU4,8
    • BM.GPU.A100-v2.8
    • BM.GPU.A10.4

Tenga en cuenta que, debido a los límites de servicio y las cuotas de compartimento, puede que algunas de las unidades de GPU soportadas no estén disponibles en su arrendamiento concreto.

Unidades de GPU soportadas para nodos autogestionados

Para los nodos autogestionados, Container Engine for Kubernetes soporta las unidades de GPU disponibles para la imagen de Oracle Linux 7 (OL7) u Oracle Linux 8 (OL8) de OKE que seleccione al crear la instancia informática para alojar el nodo autogestionado.

Tenga en cuenta que, debido a los límites de servicio y las cuotas de compartimento, puede que algunas de las unidades de GPU soportadas no estén disponibles en su arrendamiento concreto.