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. 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.
Antes de comenzar
Para implementar GPUs en tus contenedores, debes tener lo siguiente:
Un clúster de Kubernetes con una clase de máquina de GPU Consulta la sección sobre tarjetas de GPU compatibles para conocer las opciones de configuración de las máquinas de tu clúster.
El rol de visualizador de nodos del clúster de usuarios (
user-cluster-node-viewer
) para verificar las GPU y el rol de administrador de espacios de nombres (namespace-admin
) para implementar cargas de trabajo de GPU en el espacio de nombres de tu proyectoEs la ruta de kubeconfig para el servidor de la API de administración zonal que aloja tu clúster de Kubernetes. Accede y genera el archivo kubeconfig si no tienes uno.
Es la ruta de acceso a kubeconfig para el clúster de infraestructura de la organización en la zona en la que se alojarán tus GPUs. Accede y genera el archivo kubeconfig si no tienes uno.
El nombre del clúster de Kubernetes. Si no tienes esta información, pídele a tu administrador de la plataforma que te la proporcione.
Es la ruta de kubeconfig del clúster de Kubernetes. Accede y genera el archivo kubeconfig si no tienes uno.
Configura un contenedor para que use recursos de GPU
Para usar estas GPUs en un contenedor, completa los siguientes pasos:
Verifica que tu clúster de Kubernetes tenga grupos de nodos que admitan GPUs:
kubectl describe nodepoolclaims -n KUBERNETES_CLUSTER_NAME \ --kubeconfig ORG_INFRASTRUCTURE_CLUSTER
El resultado pertinente es similar al siguiente fragmento:
Spec: Machine Class Name: a2-ultragpu-1g-gdc Node Count: 2
Para obtener una lista completa de los tipos de máquinas con GPU compatibles y los perfiles de GPU multiinstancia (MIG), consulta Tipos de máquinas de nodos de clúster.
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 tu 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 del 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. Para cada contenedor que solicite GPUs, agrega 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
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
Reemplaza
NODE_NAME
por el nodo que administra las GPUs que deseas inspeccionar.El resultado pertinente 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
Ten en cuenta los nombres de los recursos de tus GPU, ya que debes especificarlos cuando configures un contenedor para usar recursos de GPU.