Puedes habilitar y gestionar recursos de unidad de procesamiento gráfico (GPU) en tus contenedores. Por ejemplo, puede que prefieras ejecutar notebooks de inteligencia artificial (IA) y aprendizaje automático (ML) 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 en los clústeres de Kubernetes que tienen máquinas con GPU aprovisionadas.
Antes de empezar
Para desplegar GPUs en tus contenedores, debes tener lo siguiente:
Un clúster de Kubernetes con una clase de máquina con GPU. Consulta la sección sobre tarjetas GPU compatibles para ver las opciones que puedes configurar en las máquinas de tu clúster.
El rol Lector de nodos de clúster de usuario (
user-cluster-node-viewer
) para comprobar las GPUs y el rol Administrador de espacio de nombres (namespace-admin
) para desplegar cargas de trabajo de GPU en el espacio de nombres de tu proyecto.Ruta de kubeconfig del servidor de la API de gestión zonal que aloja tu clúster de Kubernetes. Inicia sesión y genera el archivo kubeconfig si no tienes uno.
La ruta de kubeconfig del clúster de infraestructura de la organización en la zona en la que se van a alojar las GPUs. Inicia sesión y genera el archivo kubeconfig si no tienes uno.
Nombre del clúster de Kubernetes. Si no la tienes, pídele esta información a tu administrador de la plataforma.
Ruta de kubeconfig del clúster de Kubernetes. Inicia sesión y genera el archivo kubeconfig si no tienes uno.
Configurar un contenedor para que use recursos de GPU
Para usar estas GPUs en un contenedor, sigue estos pasos:
Comprueba que tu clúster de Kubernetes tenga grupos de nodos que admitan GPUs:
kubectl describe nodepoolclaims -n KUBERNETES_CLUSTER_NAME \ --kubeconfig ORG_INFRASTRUCTURE_CLUSTER
La salida correspondiente es similar al siguiente fragmento:
Spec: Machine Class Name: a2-ultragpu-1g-gdc Node Count: 2
Para ver una lista completa de los tipos de máquinas con GPU y los perfiles de GPU multiinstancia (MIG) compatibles, consulta Tipos de máquinas de nodos de clúster.
Añade los campos
.containers.resources.requests
y.containers.resources.limits
a la especificación de tu contenedor. Cada nombre de recurso es diferente en función de la clase de tu máquina. Consulta 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 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 ...
Los contenedores también requieren permisos adicionales para acceder a las GPUs. Por cada contenedor que solicite GPUs, añade los siguientes permisos a la especificación del contenedor:
... securityContext: seLinuxOptions: type: unconfined_t ...
Aplica el archivo de manifiesto del contenedor:
kubectl apply -f CONTAINER_MANIFEST_FILE \ -n NAMESPACE \ --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
Comprobar la asignación de recursos de GPU
Para comprobar la asignación de recursos de GPU, usa el siguiente comando:
kubectl describe nodes NODE_NAME
Sustituye
NODE_NAME
por el nodo que gestiona las GPUs que quieras inspeccionar.La salida correspondiente es similar al siguiente fragmento:
Capacity: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7 Allocatable: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7
Anota los nombres de los recursos de tus GPUs. Debes especificarlos al configurar un contenedor para que use recursos de GPU.