Faça a gestão das cargas de trabalho de contentores de GPU

Pode ativar e gerir recursos da unidade de processamento de gráficos (GPU) nos seus contentores. Por exemplo, pode preferir executar blocos de notas de inteligência artificial (IA) e aprendizagem automática (AA) num ambiente de GPU. Para executar cargas de trabalho de contentores de GPU, tem de ter um cluster do Kubernetes que suporte dispositivos de GPU. O suporte de GPU está ativado por predefinição para clusters do Kubernetes que tenham máquinas com GPU aprovisionadas para os mesmos.

Este documento destina-se aos programadores de aplicações no grupo de operadores de aplicações que são responsáveis pela criação de cargas de trabalho de aplicações para a respetiva organização. Para mais informações, consulte a documentação sobre públicos-alvo para GDC com isolamento de ar.

Antes de começar

Para implementar GPUs nos seus contentores, tem de ter o seguinte:

  • Um cluster do Kubernetes com uma classe de máquina de GPU. Consulte a secção cartões de GPU suportados para ver opções sobre o que pode configurar para as máquinas do cluster.

  • A função de administrador do cluster de utilizadores (user-cluster-admin) para verificar as GPUs num cluster partilhado e a função de administrador do espaço de nomes (namespace-admin) no espaço de nomes do seu projeto para implementar cargas de trabalho de GPU num cluster partilhado.

  • A função de administrador do cluster padrão (standard-cluster-admin) para verificar as GPUs num cluster padrão e a função de programador do cluster (cluster-developer) no seu cluster padrão para implementar cargas de trabalho de GPU num cluster padrão.

  • Para executar comandos num cluster do Kubernetes, certifique-se de que tem os seguintes recursos:

    • Localize o nome do cluster do Kubernetes ou pergunte a um membro do grupo de administradores da plataforma qual é o nome do cluster.

    • Inicie sessão e gere o ficheiro kubeconfig para o cluster do Kubernetes, se não tiver um.

    • Use o caminho kubeconfig do cluster Kubernetes para substituir KUBERNETES_CLUSTER_KUBECONFIG nestas instruções.

  • O caminho kubeconfig para o servidor da API de gestão zonal que aloja o seu cluster do Kubernetes. Inicie sessão e gere o ficheiro kubeconfig se não tiver um.

  • O caminho kubeconfig para o cluster de infraestrutura da organização na zona destinada a alojar as suas GPUs. Inicie sessão e gere o ficheiro kubeconfig se não tiver um.

Configure um contentor para usar recursos da GPU

Para usar estas GPUs num contentor, conclua os seguintes passos:

  1. Verifique se o cluster do Kubernetes tem pools de nós que suportam GPUs:

    kubectl describe clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME \
        -n KUBERNETES_CLUSTER_NAMESPACE \
        --kubeconfig MANAGEMENT_API_SERVER
    

    Substitua o seguinte:

    • KUBERNETES_CLUSTER_NAME: o nome do cluster.
    • KUBERNETES_CLUSTER_NAMESPACE: o espaço de nomes do cluster. Para clusters partilhados, use o espaço de nomes platform. Para clusters padrão, use o espaço de nomes do projeto do cluster.
    • MANAGEMENT_API_SERVER: o caminho kubeconfig do servidor da API zonal onde o cluster Kubernetes está alojado. Se ainda não gerou um ficheiro kubeconfig para o servidor da API na zona de destino, consulte Iniciar sessão.

    A saída relevante é semelhante ao seguinte fragmento:

    # Several lines of code are omitted here.
    spec:
      nodePools:
      - machineTypeName: a2-ultragpu-1g-gdc
        nodeCount: 2
    # Several lines of code are omitted here.
    

    Para ver uma lista completa dos tipos de máquinas com GPU compatíveis e dos perfis de GPU multi-instância (MIG), consulte o artigo Tipos de máquinas de nós de cluster.

  2. Adicione os campos .containers.resources.requests e .containers.resources.limits à especificação do contentor. Cada nome de recurso é diferente consoante a classe da máquina. Verifique a atribuição de recursos da GPU para encontrar os nomes dos recursos da GPU.

    Por exemplo, a seguinte especificação do contentor pede três partições de uma GPU de um nó a2-ultragpu-1g-gdc:

     ...
     containers:
     - name: my-container
       image: "my-image"
       resources:
         requests:
           nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 3
         limits:
           nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 3
     ...
    
  3. Os contentores também requerem autorizações adicionais para aceder às GPUs. Para cada contentor que peça GPUs, adicione as seguintes autorizações à especificação do contentor:

    ...
    securityContext:
     seLinuxOptions:
       type: unconfined_t
    ...
    
  4. Aplique o ficheiro de manifesto do contentor:

    kubectl apply -f CONTAINER_MANIFEST_FILE \
        -n KUBERNETES_CLUSTER_NAMESPACE \
        --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
    

    Substitua o seguinte:

    • CONTAINER_MANIFEST_FILE: o ficheiro de manifesto YAML para a carga de trabalho do contentor.
    • KUBERNETES_CLUSTER_NAMESPACE: o espaço de nomes do cluster. Para clusters partilhados, use o espaço de nomes platform. Para clusters padrão, use o espaço de nomes do projeto do cluster.
    • KUBERNETES_CLUSTER_KUBECONFIG: o caminho kubeconfig do cluster.

Verifique a atribuição de recursos da GPU

  • Para verificar a atribuição de recursos da GPU, use o seguinte comando:

    kubectl describe nodes NODE_NAME --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
    

    Substitua o seguinte:

    • NODE_NAME: o nó que gere as GPUs que quer inspecionar.
    • KUBERNETES_CLUSTER_KUBECONFIG: o caminho kubeconfig do cluster.

    A saída relevante é semelhante ao seguinte fragmento:

    # Several lines of code are omitted here.
    Capacity:
      nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7
    Allocatable:
      nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7
    # Several lines of code are omitted here.
    

Tenha em atenção os nomes dos recursos das suas GPUs. Tem de especificá-los quando configurar um contentor para usar recursos de GPU.

O que se segue?