Administra cargas de trabajo de contenedores de GPU

Puedes habilitar y administrar recursos de unidades de procesamiento gráfico (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 dentro del grupo de operadores de aplicaciones 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 GDC aislado.

Antes de comenzar

Para completar las tareas de este documento, debes solicitar los permisos necesarios y preparar tu entorno.

Solicita roles de IAM

Debes tener roles específicos para obtener los permisos que necesitas para implementar GPUs en tus contenedores. Los roles que necesitas dependen de si trabajas en un clúster compartido con alcance de organización o en un clúster estándar con alcance de proyecto. Para obtener más información, consulta Parámetros de configuración de clústeres de Kubernetes.

Roles de clúster compartidos

Para verificar los grupos de nodos compatibles con GPU y, luego, implementar cargas de trabajo de GPU en un clúster compartido, solicita los siguientes roles según la tarea que se realizará:

  • Administrador de clústeres de usuario (user-cluster-admin): Crea, borra, edita o visualiza los recursos de un clúster compartido alojado en el servidor de la API de administración. Este rol te permite verificar las GPU en el clúster compartido y no está vinculado al espacio de nombres de tu proyecto.
  • Administrador de espacio de nombres (namespace-admin): Crea, borra, edita o visualiza los recursos de un clúster compartido alojado en el proyecto. Este rol te permite implementar cargas de trabajo de GPU en un clúster estándar y está vinculado al espacio de nombres de tu proyecto.

Roles de clúster estándar

Para verificar los grupos de nodos compatibles con GPU y, luego, implementar cargas de trabajo de GPU en un clúster estándar, pídele a tu administrador de proyectos de IAM que te otorgue los siguientes roles:

  • Administrador de clústeres estándar (standard-cluster-admin): Crea, borra, edita o visualiza los recursos de un clúster estándar alojado en el servidor de la API de administración. Este rol te permite verificar las GPU en el clúster compartido y está vinculado al espacio de nombres de tu proyecto.
  • Desarrollador de clústeres (cluster-developer): Crea, borra, edita o visualiza un clúster estándar. Este rol te permite implementar cargas de trabajo de GPU en un clúster estándar, ya que proporciona acceso a las APIs del plano de datos alojadas en el clúster estándar. Este rol está vinculado al espacio de nombres de tu proyecto.

Prepara el entorno

Para configurar un contenedor de modo que use recursos de GPU, asegúrate de tener los siguientes recursos:

  • Un clúster de Kubernetes con una clase de máquina de GPU. Para obtener más información, consulta la sección Tarjetas de GPU compatibles.

  • 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.

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

  • Accede y genera el archivo kubeconfig para el servidor de la API de administración zonal que aloja tu clúster de Kubernetes. Usa esta ruta de acceso para reemplazar MANAGEMENT_API_SERVER en estas instrucciones.

  • Accede y genera el archivo kubeconfig para el clúster de infraestructura de la organización en la zona destinada a alojar tus GPUs.

Configura un contenedor para usar recursos de GPU

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

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

    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 de kubeconfig del servidor de la API zonal en el 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 relevante 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 de GPU y los perfiles de GPU de instancias múltiples (MIG) compatibles, 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 del contenedor. Cada nombre de recurso es diferente según la clase de 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 de contenedor solicita tres particiones de una GPU desde un nodo a2-ultragpu-1g-gdc:

     # Several lines of code are omitted here.
     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
     # Several lines of code are omitted here.
    
  3. Los contenedores también requieren permisos adicionales para acceder a las GPU. Para cada contenedor que solicite GPUs, agrega los siguientes permisos a la especificación del contenedor:

    # Several lines of code are omitted here.
    securityContext:
     seLinuxOptions:
       type: unconfined_t
    # Several lines of code are omitted here.
    
  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 GPU que deseas inspeccionar.
    • KUBERNETES_CLUSTER_KUBECONFIG: Es la ruta de acceso de kubeconfig del clúster.

    El resultado relevante 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.
    

Toma nota de los nombres de los recursos de tus GPU, ya que debes especificarlos cuando configures un contenedor para usar recursos de GPU.

¿Qué sigue?