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 completar las tareas de este documento, debes solicitar los permisos necesarios y preparar tu entorno.
Solicita roles de IAM
Para crear, borrar, editar o ver los recursos en un clúster de Kubernetes, pídele al administrador de IAM de tu organización que te otorgue el rol de Administrador de espacios de nombres (namespace-admin) en el espacio de nombres de tu proyecto. Este rol te permite implementar cargas de trabajo de GPU en el espacio de nombres de tu proyecto.
Prepara el entorno
Accede y genera el archivo kubeconfig para el clúster de Kubernetes en equipos físicos.
Usa la ruta de acceso de kubeconfig del clúster de Kubernetes para reemplazar
CLUSTER_KUBECONFIGen estas instrucciones.
Configura un contenedor para que use recursos de GPU
Para usar GPUs en un contenedor, completa los siguientes pasos:
Confirma que los nodos de tu clúster de Kubernetes admitan la asignación de recursos de GPU:
kubectl describe nodes NODE_NAMEReemplaza
NODE_NAMEpor 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: 1Agrega los campos
.containers.resources.requestsy.containers.resources.limitsa 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, comoREGISTRY_PATH/hello-app:1.0.
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 CLUSTER_KUBECONFIGReemplaza lo siguiente:
CONTAINER_MANIFEST_FILE: Es el archivo YAML para el recurso personalizado de la carga de trabajo del 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.
Verifica que tus Pods se estén ejecutando y usando las GPUs:
kubectl get pods -A | grep CONTAINER_NAME \ -n NAMESPACE \ --kubeconfig CLUSTER_KUBECONFIGEl 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