Implementa cargas de trabajo de contenedores de GPU

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.
  • Para ejecutar las cargas de trabajo, debes tener asignado el rol sandbox-gpu-admin. De forma predeterminada, el rol se asigna al usuario platform-admin. Para asignar el rol a otros usuarios, accede como platform-admin y ejecuta el siguiente comando:

    kubectl --kubeconfig ${KUBECONFIG} create rolebinding ${NAME} --role=sandbox-gpu-admin \
    --user=${USER} --namespace=sandbox-gpu-project
    
  • Para 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

  1. Agrega los campos .containers.resources.requests y .containers.resources.limits a 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
    
  1. Los contenedores también requieren permisos adicionales para acceder a las GPU. Para cada contenedor que solicite GPU, agrega un .containers.securityContext que otorgue securityContext.seLinuxOptions de tipo unconfined_t al 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_t
    
  2. Aplica el archivo de manifiesto del contenedor:

    kubectl apply -f ${CONTAINER_MANIFEST_FILE_PATH} \
        -n sandbox-gpu-project \
        --kubeconfig ${KUBECONFIG}