Administra cargas de trabajo de contenedores de GPU

Puedes habilitar y administrar los recursos de la unidad de procesamiento de gráficos (GPU) en tus contenedores. Por ejemplo, es posible que prefieras ejecutar notebooks de inteligencia artificial (IA) y aprendizaje automático (AA) en un entorno de GPU. Para ejecutar cargas de trabajo de contenedores de GPU, debes tener un clúster de Kubernetes que admita dispositivos de GPU. La compatibilidad con GPU está habilitada de forma predeterminada para los clústeres de Kubernetes que tienen máquinas con GPU aprovisionadas.

Antes de comenzar

Para implementar GPUs en tus contenedores, debes tener lo siguiente:

  • Un clúster de Kubernetes con una clase de máquina de GPU Consulta la sección sobre tarjetas de GPU compatibles para conocer las opciones de configuración de las máquinas de tu clúster.

  • El rol de visualizador de nodos del clúster de usuarios (user-cluster-node-viewer) para verificar las GPU y el rol de administrador de espacios de nombres (namespace-admin) para implementar cargas de trabajo de GPU en el espacio de nombres de tu proyecto

  • Es la ruta de kubeconfig para el servidor de la API de administración zonal que aloja tu clúster de Kubernetes. Accede y genera el archivo kubeconfig si no tienes uno.

  • Es la ruta de acceso a kubeconfig para el clúster de infraestructura de la organización en la zona en la que se alojarán tus GPUs. Accede y genera el archivo kubeconfig si no tienes uno.

  • El nombre del clúster de Kubernetes. Si no tienes esta información, pídele a tu administrador de la plataforma que te la proporcione.

  • Es la ruta de kubeconfig del clúster de Kubernetes. Accede y genera el archivo kubeconfig si no tienes uno.

Configura un contenedor para que use recursos de GPU

Para usar estas GPUs en un contenedor, completa los siguientes pasos:

  1. Verifica que tu clúster de Kubernetes tenga grupos de nodos que admitan GPUs:

    kubectl describe nodepoolclaims -n KUBERNETES_CLUSTER_NAME \
        --kubeconfig ORG_INFRASTRUCTURE_CLUSTER
    

    El resultado pertinente es similar al siguiente fragmento:

    Spec:
      Machine Class Name:  a2-ultragpu-1g-gdc
      Node Count:          2
    

    Para obtener una lista completa de los tipos de máquinas con GPU compatibles y los perfiles de GPU multiinstancia (MIG), consulta Tipos de máquinas de nodos de clúster.

  2. Agrega los campos .containers.resources.requests y .containers.resources.limits a la especificación de tu contenedor. Cada nombre de recurso es diferente según la clase de tu máquina. Verifica la asignación de recursos de GPU para encontrar los nombres de tus recursos de GPU.

    Por ejemplo, la siguiente especificación del contenedor solicita tres particiones de una GPU de un nodo a2-ultragpu-1g-gdc:

     ...
     containers:
     - name: my-container
       image: "my-image"
       resources:
         requests:
           nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 3
         limits:
           nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 3
     ...
    
  3. Los contenedores también requieren permisos adicionales para acceder a las GPUs. Para cada contenedor que solicite GPUs, agrega los siguientes permisos a la especificación del contenedor:

    ...
    securityContext:
     seLinuxOptions:
       type: unconfined_t
    ...
    
  4. Aplica el archivo de manifiesto del contenedor:

    kubectl apply -f CONTAINER_MANIFEST_FILE \
        -n NAMESPACE \
        --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
    

Verifica la asignación de recursos de GPU

  • Para verificar la asignación de recursos de GPU, usa el siguiente comando:

    kubectl describe nodes NODE_NAME
    

    Reemplaza NODE_NAME por el nodo que administra las GPUs que deseas inspeccionar.

    El resultado pertinente es similar al siguiente fragmento:

    Capacity:
      nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7
    Allocatable:
      nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7
    

Ten en cuenta los nombres de los recursos de tus GPU, ya que debes especificarlos cuando configures un contenedor para usar recursos de GPU.