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 GPUs 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 completar las tareas de este documento, debes solicitar los permisos necesarios y preparar tu entorno.
Solicitar roles de gestión de identidades y accesos
Debes tener roles específicos para obtener los permisos que necesitas para desplegar GPUs en tus contenedores. Los roles que necesitas dependen de si trabajas en un clúster compartido con ámbito de organización o en un clúster estándar con ámbito de proyecto. Para obtener más información, consulta las configuraciones de clúster de Kubernetes.
Roles de clúster compartidos
Para verificar los grupos de nodos compatibles con GPU e implementar cargas de trabajo de GPU en un clúster compartido, solicita los siguientes roles en función de la tarea que quieras realizar:
- Administrador de clúster de usuario (
user-cluster-admin): crea, elimina, edita o consulta los recursos de un clúster compartido alojado en el servidor de la API Management. Este rol te permite comprobar las GPUs del clúster compartido y no está vinculado al espacio de nombres de tu proyecto. - Administrador de espacio de nombres (
namespace-admin): crea, elimina, edita o consulta los recursos de un clúster compartido alojado en el proyecto. Este rol te permite implementar cargas de trabajo de GPU en un clúster estándar y está vinculado al espacio de nombres de tu proyecto.
Roles de clúster estándar
Para verificar los grupos de nodos compatibles con GPU e implementar cargas de trabajo de GPU en un clúster estándar, pide al administrador de gestión de identidades y accesos de tu proyecto que te conceda los siguientes roles:
- Administrador de clúster estándar (
standard-cluster-admin): crea, elimina, edita o consulta los recursos de un clúster estándar alojado en el servidor de la API de gestión. Este rol te permite comprobar las GPUs del clúster compartido y está vinculado al espacio de nombres de tu proyecto. - Desarrollador de clústeres (
cluster-developer): crea, elimina, edita o consulta un clúster estándar. Este rol te permite implementar cargas de trabajo de GPU en un clúster estándar proporcionando acceso a las APIs del plano de datos alojadas en el clúster estándar. Este rol está vinculado al espacio de nombres de tu proyecto.
Prepara tu entorno
Para configurar un contenedor de forma que use recursos de GPU, asegúrate de tener los siguientes recursos:
Un clúster de Kubernetes con una clase de máquina con GPU. Para obtener más información, consulta la sección sobre tarjetas GPU compatibles.
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.
Usa la ruta kubeconfig del clúster de Kubernetes para sustituir
KUBERNETES_CLUSTER_KUBECONFIGen estas instrucciones.Inicia sesión y genera el archivo kubeconfig del servidor de la API de gestión zonal que aloja tu clúster de Kubernetes. Usa esta ruta para sustituir
MANAGEMENT_API_SERVERen estas instrucciones.Inicia sesión y genera el archivo kubeconfig del clúster de infraestructura de la organización en la zona en la que quieras alojar tus GPUs.
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.
El resultado pertinente 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:# Several lines of code are omitted here. 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 # Several lines of code are omitted here.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:
# Several lines of code are omitted here. securityContext: seLinuxOptions: type: unconfined_t # Several lines of code are omitted here.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.
El resultado pertinente 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.