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 implementar GPUs en tus contenedores, debes tener lo siguiente:

  • El rol de administrador de espacio de nombres (namespace-admin) para implementar cargas de trabajo de GPU en el espacio de nombres de tu proyecto

  • Es la ruta de acceso a kubeconfig para el clúster de Kubernetes de Bare Metal. Accede y genera el archivo kubeconfig si no tienes uno.

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 carga de trabajo de 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