Implantar cargas de trabalho de contêineres de GPU

Esta página descreve como implantar cargas de trabalho de contêiner de GPU na SKU otimizada para IA do Google Distributed Cloud (GDC) Sandbox.

Implantar cargas de trabalho de contêiner de GPU

A SKU otimizada para IA do GDC Sandbox inclui quatro GPUs NVIDIA H100 80GB HBM3 no cluster org-infra. Essas GPUs podem ser acessadas usando o nome do recurso nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3. Esta seção descreve como atualizar uma configuração de contêiner para usar essas GPUs.

As GPUs na SKU otimizada para IA do GDC Sandbox estão associadas a um projeto pré-configurado, "sandbox-gpu-project". É necessário implantar o contêiner usando esse projeto no cluster org-1-infra para usar as GPUs.

Antes de começar

  • Para executar comandos no cluster de infraestrutura da organização, verifique se você tem o kubeconfig do cluster org-1-infra, conforme descrito em Trabalhar com clusters:

    • Configure e autentique com a linha de comando gdcloud e
    • gere o arquivo kubeconfig para o cluster de infraestrutura da organização e atribua o caminho dele à variável de ambiente KUBECONFIG.
  • Para executar as cargas de trabalho, é necessário ter o papel sandbox-gpu-admin atribuído. Por padrão, o papel é atribuído ao usuário platform-admin. Para atribuir o papel a outros usuários, faça login como platform-admin e execute o seguinte comando:

    kubectl --kubeconfig ${KUBECONFIG} create rolebinding ${NAME} --role=sandbox-gpu-admin \
    --user=${USER} --namespace=sandbox-gpu-project
    
  • Para permitir o tráfego de rede para o contêiner, é necessário ter uma política de rede de projeto. Para mais informações, consulte Criar uma política de rede.

Configurar um contêiner para usar recursos de GPU

  1. Adicione os campos .containers.resources.requests e .containers.resources.limits à especificação do contêiner para solicitar GPUs para a carga de trabalho. Todos os contêineres no sandbox-gpu-project podem solicitar até quatro GPUs no total em todo o projeto. O exemplo a seguir solicita uma GPU como parte da especificação do contêiner.

    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. Os contêineres também exigem permissões adicionais para acessar GPUs. Para cada contêiner que solicita GPUs, adicione um .containers.securityContext que conceda securityContext.seLinuxOptions do tipo unconfined_t ao contêiner.

    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. Aplique o arquivo de manifesto do contêiner:

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