Administra cargas de trabajo de contenedores de GPU

Puedes habilitar y administrar recursos de unidades 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 de GPU aprovisionadas para ellos.

Este documento está destinado 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 Google Distributed Cloud 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 GPU en tus contenedores. Los roles que necesitas dependen de si trabajas en un clúster compartido con alcance de la organización o en un clúster estándar con alcance del proyecto. Para obtener más información, consulta Configuraciones de clústeres de Kubernetes .

Roles de clúster compartido

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 debe realizar:

  • Administrador del clúster 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 del 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 IAM del proyecto que te otorgue los siguientes roles:

  • Administrador del clúster 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 dentro del clúster estándar. Este rol está vinculado al espacio de nombres de tu proyecto.

Prepara el entorno

Para configurar un contenedor para 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 de tarjetas de GPU compatibles.

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

Configura un contenedor para que use 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 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 de GPU compatibles y los perfiles de GPU de varias instancias (MIG) , consulta Tipos de máquinas de nodos de clústeres.

  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 máquina. Verifica la asignación de recursos de GPU para encontrar los nombres de los recursos de GPU.

    Por ejemplo, la siguiente especificación de contenedor solicita tres particiones de una GPU de 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 GPU, 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 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 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 para tus GPU. Debes especificarlos cuando configures un contenedor para que use recursos de GPU.

¿Qué sigue?