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 en equipos físicos. 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 conductores externos administran estos recursos.
Con la asignación dinámica de recursos, Kubernetes programa los Pods según la configuración del dispositivo al que se hace referencia. Los operadores de apps no necesitan seleccionar nodos específicos en sus cargas de trabajo ni garantizar que cada Pod solicite exactamente la cantidad de dispositivos conectados a esos nodos. Este proceso es similar a la asignación de volúmenes para el almacenamiento.
Esta capacidad te ayuda a ejecutar cargas de trabajo de IA asignando de forma dinámica y precisa los recursos de GPU dentro de tus clústeres de equipos físicos, lo que mejora la utilización de recursos y el rendimiento para las cargas de trabajo exigentes.
Esta página está destinada a administradores, arquitectos y operadores que administran el ciclo de vida de la infraestructura tecnológica subyacente. Para obtener más información sobre los roles comunes y las tareas de ejemplo a las que hacemos referencia en el contenido de Google Cloud , consulta Roles de usuario y tareas comunes de GKE Enterprise.
Antes de comenzar
Antes de configurar tus cargas de trabajo de GPU para que usen la asignación dinámica de recursos, verifica que se cumplan los siguientes requisitos previos:
- Tu clúster de metal desnudo está en la versión 1.33.0 o posterior.
- Tu sistema operativo es Ubuntu 22.04 o Red Hat Enterprise Linux (RHEL) 9.4.
- Actualizaste tu clúster para habilitar la asignación dinámica de recursos, como se describe en Habilita la asignación dinámica de recursos.
- Tienes al menos una máquina de nodo con una GPU conectada y el controlador de GPU de NVIDIA instalado. Para obtener más información, consulta Cómo instalar o desinstalar el operador de GPU de NVIDIA incluido.
- Seguiste las instrucciones en Controlador DRA de NVIDIA para GPUs para instalar el controlador DRA de NVIDIA en todos los nodos conectados a la GPU.
Crea 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 a ResourceClaim
para que Kubernetes asigne recursos de GPU.
En los siguientes pasos, se configura un entorno en el que tus 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
Reemplaza lo siguiente:
CLUSTER_KUBECONFIG
: Es la ruta de acceso del archivo kubeconfig del clúster de usuario.NAMESPACE_NAME
por el nombre de tu espacio de nombres de asignación de recursos dinámica.
Crea un objeto
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
Reemplaza
RESOURCE_CLAIM_NAME
por el nombre de tu reclamo 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 del Podpod1
son muestras de la arquitectura unificada de dispositivos de procesamiento (CUDA) de NVIDIA diseñadas para ejecutar cargas de trabajo de CUDA en las GPUs. Cuando el Podpod1
se completa correctamente, indica que la capacidad de asignación dinámica de recursos funciona correctamente y que la asignación dinámica de recursos está lista para administrar los recursos de GPU en 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
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 de RHEL, la política de SELinux puede interferir con los contenedores que intentan acceder a las GPU. Para obtener más información, consulta Cómo usar GPUs en contenedores en RHEL 8 de metal desnudo.
Esta función usa el grupo de APIs
resource.k8s.io/v1beta1
, que difiere 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
proporciona más funciones y mejor estabilidad que el grupo de APIs dev1beta1
.
¿Qué sigue?
- Consulta la documentación de Kubernetes para obtener más información sobre la asignación dinámica de recursos.
- Obtén más información para publicar LLMs de terceros en servidores físicos.