En esta página se describe cómo configurar tus cargas de trabajo de GPU para que usen la asignación dinámica de recursos en tus clústeres de Google Distributed Cloud bare metal. La asignación dinámica de recursos es una API de Kubernetes que te permite solicitar y compartir recursos genéricos, como GPUs, entre pods y contenedores. Los controladores de terceros gestionan estos recursos.
Con la asignación dinámica de recursos, Kubernetes programa los pods en función de la configuración del dispositivo al que se hace referencia. Los operadores de aplicaciones no tienen que seleccionar nodos específicos en sus cargas de trabajo ni asegurarse de que cada pod solicite exactamente el número de dispositivos conectados a esos nodos. Este proceso es similar a la asignación de volúmenes para el almacenamiento.
Esta función te ayuda a ejecutar cargas de trabajo de IA asignando de forma dinámica y precisa los recursos de GPU de tus clústeres de hardware desnudo, lo que mejora el uso de los recursos y el rendimiento de las cargas de trabajo exigentes.
Esta página está dirigida a administradores, arquitectos y operadores que gestionan el ciclo de vida de la infraestructura tecnológica subyacente. Para obtener más información sobre los roles habituales y las tareas de ejemplo a las que hacemos referencia en el contenido, consulta Roles y tareas habituales de los usuarios de GKE Enterprise. Google Cloud
Antes de empezar
Antes de configurar tus cargas de trabajo de GPU para que usen la asignación dinámica de recursos, comprueba que se cumplen los siguientes requisitos:
- Tu clúster de Bare Metal tiene la versión 1.33.0 o una posterior.
- Tu sistema operativo es Ubuntu 22.04 o Red Hat Enterprise Linux (RHEL) 9.4.
- Has actualizado tu clúster para habilitar la asignación dinámica de recursos, tal como se describe en Habilitar la asignación dinámica de recursos.
- Tienes al menos una máquina de nodo con una GPU conectada y el controlador de GPU NVIDIA instalado. Para obtener más información, consulta Instalar o desinstalar el operador de GPU NVIDIA incluido.
- Has seguido las instrucciones de Controlador NVIDIA DRA para GPUs para instalar el controlador NVIDIA DRA en todos los nodos conectados a la GPU.
Crear cargas de trabajo de GPU que usen la asignación dinámica de recursos
Para que tus cargas de trabajo de GPU aprovechen la asignación dinámica de recursos para solicitar GPUs, deben estar en un espacio de nombres compartido con un ResourceClaim
que describa la solicitud de asignación de dispositivos de GPU. Tus cargas de trabajo deben hacer referencia al ResourceClaim
para que Kubernetes asigne recursos de GPU.
En los pasos siguientes se configura un entorno en el que las cargas de trabajo usan la asignación dinámica de recursos para solicitar recursos de GPU:
Para crear recursos relacionados con la asignación dinámica de recursos, crea un nuevo
Namespace
en tu clúster:cat <<EOF | kubectl apply --kubeconfig=CLUSTER_KUBECONFIG -f - apiVersion: v1 kind: Namespace metadata: name: NAMESPACE_NAME EOF
Haz los cambios siguientes:
CLUSTER_KUBECONFIG
: la ruta del archivo kubeconfig del clúster de usuario.NAMESPACE_NAME
con el nombre del espacio de nombres de asignación dinámica de recursos.
Crea un
ResourceClaim
para describir la solicitud de acceso a la GPU:cat <<EOF | kubectl apply --kubeconfig=CLUSTER_KUBECONFIG -f - apiVersion: resource.k8s.io/v1beta1 kind: ResourceClaim metadata: namespace: NAMESPACE_NAME name: RESOURCE_CLAIM_NAME spec: devices: requests: - name: gpu deviceClassName: gpu.nvidia.com EOF
Sustituye
RESOURCE_CLAIM_NAME
por el nombre de tu reclamación de recursos para las solicitudes de GPU.Crea cargas de trabajo que hagan referencia al
ResourceClaim
creado en el paso anterior.En los siguientes ejemplos de cargas de trabajo se muestra cómo hacer referencia a un objeto
ResourceClaim
llamadogpu-claim
en el espacio de nombresdra-test
. Los contenedores delpod1
pod son muestras de la arquitectura unificada de dispositivos informáticos (CUDA) de NVIDIA diseñadas para ejecutar cargas de trabajo de CUDA en las GPUs. Cuando el podpod1
se complete correctamente, significa que la función de asignación dinámica de recursos funciona correctamente y que está lista para gestionar los recursos de GPU de tu clúster.Ubuntu
Usa el siguiente comando para aplicar el manifiesto a tu clúster:
cat <<EOF | kubectl apply --kubeconfig=CLUSTER_KUBECONFIG -f - apiVersion: v1 kind: Pod metadata: name: pod1 namespace: dra-test spec: restartPolicy: OnFailure resourceClaims: - name: gpu resourceClaimName: gpu-claim containers: - name: ctr0 image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0 resources: claims: - name: gpu - name: ctr1 image: nvcr.io/nvidia/k8s/cuda-sample:devicequery resources: claims: - name: gpu EOF
RHEL - 6, 7
Descarga e instala el módulo de política de SELinux
nvidia_container_t
, que es necesario para acceder a las GPUs.Para obtener más información, consulta el repositorio dgx-selinux de NVIDIA.
Usa el siguiente comando para aplicar el manifiesto a tu clúster:
cat <<EOF | kubectl apply --kubeconfig=CLUSTER_KUBECONFIG -f - apiVersion: v1 kind: Pod metadata: name: pod1 namespace: dra-test spec: restartPolicy: OnFailure securityContext: seLinuxOptions: type: nvidia_container_t resourceClaims: - name: gpu resourceClaimName: gpu-claim containers: - name: ctr0 image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0 resources: claims: - name: gpu - name: ctr1 image: nvcr.io/nvidia/k8s/cuda-sample:devicequery resources: claims: - name: gpu EOF
Limitaciones
Ten en cuenta las siguientes limitaciones cuando uses la asignación dinámica de recursos:
Cuando usas el SO RHEL, la política de SELinux puede interferir con los contenedores que intentan acceder a las GPUs. Para obtener más información, consulta Cómo usar GPUs en contenedores en RHEL 8 sin sistema operativo.
Esta función usa el grupo de APIs
resource.k8s.io/v1beta1
, que es diferente del grupo de APIs de Kubernetes de código abierto para esta función,resource.k8s.io/v1
. El grupo de APIs de código abiertov1
ofrece más funciones y una mayor estabilidad que el grupo de APIsv1beta1
.
Siguientes pasos
- Consulta la documentación de Kubernetes para obtener más información sobre la asignación dinámica de recursos.
- Consulta cómo servir LLMs de terceros en hardware desnudo.