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.
Este documento está dirigido a los desarrolladores de aplicaciones del grupo de operadores de aplicaciones que se encargan de crear cargas de trabajo de aplicaciones para su organización. Para obtener más información, consulta Audiencias de la documentación aislada de GDC.
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 de administrador de clúster de usuario (
user-cluster-admin) para comprobar las GPUs de un clúster compartido y el rol de administrador de espacio de nombres (namespace-admin) en el espacio de nombres de tu proyecto para desplegar cargas de trabajo de GPU en un clúster compartido.El rol Administrador de clúster estándar (
standard-cluster-admin) para comprobar las GPUs de un clúster estándar y el rol Desarrollador de clúster (cluster-developer) en tu clúster estándar para desplegar cargas de trabajo de GPU en un clúster estándar.Para ejecutar comandos en un clúster de Kubernetes, asegúrate de tener los siguientes recursos:
Busca el nombre del clúster de Kubernetes o pregunta a un miembro del grupo de administradores de la plataforma cuál es el nombre del clúster.
Inicia sesión y genera el archivo kubeconfig del clúster de Kubernetes si no tienes uno.
Usa la ruta kubeconfig del clúster de Kubernetes para sustituir
KUBERNETES_CLUSTER_KUBECONFIGen estas instrucciones.
La 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 tus GPUs. 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 clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME \ -n KUBERNETES_CLUSTER_NAMESPACE \ --kubeconfig MANAGEMENT_API_SERVERHaz los cambios siguientes:
KUBERNETES_CLUSTER_NAME: el nombre del clúster.KUBERNETES_CLUSTER_NAMESPACE: el espacio de nombres del clúster. En el caso de los clústeres compartidos, usa el espacio de nombresplatform. En el caso de los clústeres estándar, usa el espacio de nombres del proyecto del clúster.MANAGEMENT_API_SERVER: la ruta kubeconfig del servidor de la API zonal donde se aloja el clúster de Kubernetes. Si aún no has generado un archivo kubeconfig para el servidor de la API en tu zona de destino, consulta Iniciar sesión.
La salida correspondiente 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 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.requestsy.containers.resources.limitsa 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 KUBERNETES_CLUSTER_NAMESPACE \ --kubeconfig KUBERNETES_CLUSTER_KUBECONFIGHaz los cambios siguientes:
CONTAINER_MANIFEST_FILE: el archivo de manifiesto YAML de tu carga de trabajo de contenedor.KUBERNETES_CLUSTER_NAMESPACE: el espacio de nombres del clúster. En el caso de los clústeres compartidos, usa el espacio de nombresplatform. En el caso de los clústeres estándar, usa el espacio de nombres del proyecto del clúster.KUBERNETES_CLUSTER_KUBECONFIG: la ruta de kubeconfig del clúster.
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 --kubeconfig KUBERNETES_CLUSTER_KUBECONFIGHaz los cambios siguientes:
NODE_NAME: el nodo que gestiona las GPUs que quieres inspeccionar.KUBERNETES_CLUSTER_KUBECONFIG: la ruta de kubeconfig del clúster.
La salida correspondiente 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.
Anota los nombres de los recursos de tus GPUs. Debes especificarlos al configurar un contenedor para que use recursos de GPU.