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. La compatibilidad con GPU está habilitada de forma predeterminada en el dispositivo aislado de Google Distributed Cloud (GDC).

Antes de comenzar

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

Solicita roles de IAM

Para crear, borrar, editar o ver los recursos en un clúster de Kubernetes, pídele al administrador de IAM de tu organización que te otorgue el rol de Administrador de espacios de nombres (namespace-admin) en el espacio de nombres de tu proyecto. Este rol te permite implementar cargas de trabajo de GPU en el espacio de nombres de tu proyecto.

Prepara el entorno

  • Accede y genera el archivo kubeconfig para el clúster de Kubernetes en equipos físicos.

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

Configura un contenedor para que use recursos de GPU

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

  1. Confirma que los nodos de tu clúster de Kubernetes admitan la asignación de recursos de GPU:

    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/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
    Allocatable:
      nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
    
  2. Agrega los campos .containers.resources.requests y .containers.resources.limits a la especificación del contenedor. Dado que tu clúster de Kubernetes ya está configurado con máquinas con GPU, la configuración es la misma para todas las cargas de trabajo:

     ...
     containers:
     - name: CONTAINER_NAME
       image: CONTAINER_IMAGE
       resources:
         requests:
           nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
         limits:
           nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
     ...
    

    Reemplaza lo siguiente:

    • CONTAINER_NAME: Es el nombre del contenedor.
    • CONTAINER_IMAGE: Es la imagen del contenedor para acceder a las máquinas con GPU. Debes incluir la ruta de acceso al registro de contenedores y la versión de la imagen, como REGISTRY_PATH/hello-app:1.0.
  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 CLUSTER_KUBECONFIG
    

    Reemplaza lo siguiente:

    • CONTAINER_MANIFEST_FILE: Es el archivo YAML para el recurso personalizado de la carga de trabajo del contenedor.
    • NAMESPACE: Es el espacio de nombres del proyecto en el que se implementarán las cargas de trabajo del contenedor.
    • CLUSTER_KUBECONFIG: Es el archivo kubeconfig del clúster de Kubernetes de metal desnudo en el que implementas cargas de trabajo de contenedores.
  5. Verifica que tus Pods se estén ejecutando y usando las GPUs:

    kubectl get pods -A | grep CONTAINER_NAME \
        -n NAMESPACE \
        --kubeconfig CLUSTER_KUBECONFIG
    

    El resultado pertinente es similar al siguiente fragmento:

    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
    Ready:          True
    Restart Count:  0
    Limits:
      nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE:  1
    Requests:
      nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE:  1