En esta página, se describe cómo implementar cargas de trabajo de contenedores de GPU en la SKU de Google Distributed Cloud (GDC) Sandbox AI Optimized.
Implementa cargas de trabajo de contenedores de GPU
La SKU de GDC Sandbox AI Optimized incluye cuatro GPU NVIDIA H100 de 80 GB HBM3 dentro del clúster org-infra. Se puede acceder a estas GPU con el nombre del recurso nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3. En esta sección, se describe cómo actualizar una configuración de contenedor para usar estas GPU.
Las GPU en la SKU de GDC Sandbox AI Optimized están asociadas con un proyecto preconfigurado, "sandbox-gpu-project". Debes implementar tu contenedor con este proyecto dentro del clúster org-1-infra para usar las GPU.
Antes de comenzar
Para ejecutar comandos en el clúster de infraestructura de la organización, asegúrate de que tienes el kubeconfig del clúster
org-1-infra, como se describe en Trabaja con clústeres:- Configura y autentica con la línea de comandos de
gdcloud. - Genera el archivo kubeconfig para el clúster de infraestructura de la organización y asigna su ruta de acceso a la variable de entorno
KUBECONFIG.
- Configura y autentica con la línea de comandos de
Para ejecutar las cargas de trabajo, debes tener asignado el rol
sandbox-gpu-admin. De forma predeterminada, el rol se asigna al usuarioplatform-admin. Para asignar el rol a otros usuarios, accede comoplatform-adminy ejecuta el siguiente comando:kubectl --kubeconfig ${KUBECONFIG} create rolebinding ${NAME} --role=sandbox-gpu-admin \ --user=${USER} --namespace=sandbox-gpu-projectPara permitir el tráfico de red a tu contenedor, debes tener una política de red del proyecto. Para obtener más información, consulta Crea una política de red.
Configura un contenedor para usar recursos de GPU
Agrega los campos
.containers.resources.requestsy.containers.resources.limitsa la especificación del contenedor para solicitar GPU para la carga de trabajo. Todos los contenedores dentro de sandbox-gpu-project pueden solicitar hasta un total de 4 GPU en todo el proyecto. En el siguiente ejemplo, se solicita una GPU como parte de la especificación del contenedor.apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment namespace: sandbox-gpu-project labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest resources: requests: nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3: 1 limits: nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3: 1
Los contenedores también requieren permisos adicionales para acceder a las GPU. Para cada contenedor que solicite GPU, agrega un
.containers.securityContextque otorguesecurityContext.seLinuxOptionsde tipounconfined_tal contenedor.apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment namespace: sandbox-gpu-project labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest resources: requests: nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3: 1 limits: nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3: 1 securityContext: seLinuxOptions: type: unconfined_tAplica el archivo de manifiesto del contenedor:
kubectl apply -f ${CONTAINER_MANIFEST_FILE_PATH} \ -n sandbox-gpu-project \ --kubeconfig ${KUBECONFIG}