Ejecución de aplicaciones en nodos basados en GPU

Descubra cómo ejecutar aplicaciones en nodos de trabajador basados en GPU en clusters creados con Kubernetes Engine (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 están las formas de GPU (Graphics Processing Unit), con las propias GPU en tarjetas gráficas NVIDIA. Originalmente diseñado 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 seleccionar para los nodos de trabajador, consulte Unidades de GPU soportadas por Kubernetes Engine (OKE).

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 Kubernetes Engine para crear un pool de nodos gestionado y seleccionar una unidad de GPU (y una 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 gestionado.
  • 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 (y una 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 Working with Self-Managed Nodes.

Al desplegar una aplicación en un cluster que ha creado con Kubernetes Engine, debe especificar en la especificación del pod el número de recursos de GPU necesarios. Para desplegar la aplicación, kube-scheduler 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 monta lo siguiente 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 utilizarla 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 Kubernetes Engine (OKE)

Kubernetes Engine soporta diferentes unidades de GPU para pools de nodos gestionados y nodos, 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, Kubernetes Engine soporta las siguientes unidades de GPU:

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

    • VM.GPU.A10.1, VM.GPU.A10.2
    • VM.GPU.A100.40G.1, VM.GPU.A100.40G.2, VM.GPU.A100.40G.4, VM.GPU.A100.40G.8
    • VM.GPU.A100.80G.1, VM.GPU.A100.80G.2, VM.GPU.A100.80G.4, VM.GPU.A100.80G.8
    • VM.GPU.A100B40G.1, VM.GPU.A100. B40G.2, VM.GPU.A100. B40G.4
    • VM.GPU.GU1.1, VM.GPU.GU1.2,
    • VM.GPU.L40S.1, VM.GPU.L40S.2
    • VM.GPU2.1
    • VM.GPU3.1, VM.GPU3.2, VM.GPU3.4
  • Unidades de GPU con hardware dedicado (BM) soportadas por el motor de Kubernetes para pools de nodos gestionados y nodos gestionados:

    • BM.GPU.A10.4
    • BM.GPU.A100-v2.8
    • BM.GPU.B4.8
    • BM.GPU.GM4.8
    • BM.GPU.GU1.4
    • BM.GPU.H100.8
    • BM.GPU.L40S.4
    • BM.GPU.T1.2
    • BM.GPU.T1-2.4
    • BM.GPU2.2
    • BM.GPU3.8
    • BM.GPU4,8

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 nodos autogestionados, Kubernetes Engine 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.