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 para ellos.

Este documento está dirigido a los desarrolladores de aplicaciones que forman parte del grupo de operadores de aplicaciones y que son responsables de crear cargas de trabajo de aplicaciones para su organización. Para obtener más información, consulta Públicos de la documentación de Google Distributed Cloud aislado.

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 administrador de clúster de usuario (user-cluster-admin) para verificar las GPUs en un clúster compartido y el rol de administrador de espacio de nombres (namespace-admin) en el espacio de nombres de tu proyecto para implementar cargas de trabajo de GPU en un clúster compartido

  • El rol de administrador de clúster estándar (standard-cluster-admin) para verificar las GPUs en un clúster estándar y el rol de desarrollador de clúster (cluster-developer) en tu clúster estándar para implementar cargas de trabajo de GPU en un clúster estándar

  • Para ejecutar comandos en un clúster de Kubernetes, asegúrate de tener los siguientes recursos:

    • Busca el nombre del clúster de Kubernetes o pregúntale a un miembro del grupo de administradores de la plataforma cuál es el nombre del clúster.

    • Accede y genera el archivo kubeconfig para el clúster de Kubernetes si no tienes uno.

    • Usa la ruta de acceso de kubeconfig del clúster de Kubernetes para reemplazar KUBERNETES_CLUSTER_KUBECONFIG en estas instrucciones.

  • 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 destinada a alojar tus GPUs. 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 clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME \
        -n KUBERNETES_CLUSTER_NAMESPACE \
        --kubeconfig MANAGEMENT_API_SERVER
    

    Reemplaza lo siguiente:

    • KUBERNETES_CLUSTER_NAME: Es el nombre del clúster.
    • KUBERNETES_CLUSTER_NAMESPACE: Es el espacio de nombres del clúster. Para los clústeres compartidos, usa el espacio de nombres platform. Para los clústeres estándar, usa el espacio de nombres del proyecto del clúster.
    • MANAGEMENT_API_SERVER: Es la ruta de acceso a kubeconfig del servidor de la API zonal en la que se aloja el clúster de Kubernetes. Si aún no generaste un archivo kubeconfig para el servidor de la API en tu zona de destino, consulta Accede.

    El resultado pertinente es similar al siguiente fragmento:

    # Several lines of code are omitted here.
    spec:
      nodePools:
      - machineTypeName: a2-ultragpu-1g-gdc
        nodeCount: 2
    # Several lines of code are omitted here.
    

    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 KUBERNETES_CLUSTER_NAMESPACE \
        --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
    

    Reemplaza lo siguiente:

    • CONTAINER_MANIFEST_FILE: Es el archivo de manifiesto YAML para tu carga de trabajo de contenedor.
    • KUBERNETES_CLUSTER_NAMESPACE: Es el espacio de nombres del clúster. Para los clústeres compartidos, usa el espacio de nombres platform. Para los clústeres estándar, usa el espacio de nombres del proyecto del clúster.
    • KUBERNETES_CLUSTER_KUBECONFIG: Es la ruta de acceso de kubeconfig del clúster.

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 --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
    

    Reemplaza lo siguiente:

    • NODE_NAME: Es el nodo que administra las GPUs que deseas inspeccionar.
    • KUBERNETES_CLUSTER_KUBECONFIG: Es la ruta de acceso de kubeconfig del clúster.

    El resultado pertinente es similar al siguiente fragmento:

    # Several lines of code are omitted here.
    Capacity:
      nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7
    Allocatable:
      nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7
    # Several lines of code are omitted here.
    

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

¿Qué sigue?