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

Pode ativar e gerir recursos da unidade de processamento gráfico (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 concluir as tarefas neste documento, tem de pedir as autorizações necessárias e preparar o seu ambiente.

Peça funções de IAM

Tem de ter funções específicas para receber as autorizações necessárias para implementar GPUs nos seus contentores. As funções necessárias dependem de estar a trabalhar num cluster partilhado ao nível da organização ou num cluster padrão ao nível do projeto. Para mais informações, consulte as configurações do cluster do Kubernetes.

Funções de cluster partilhadas

Para validar pools de nós compatíveis com GPU e implementar cargas de trabalho de GPU num cluster partilhado, peça as seguintes funções com base na tarefa a realizar:

  • Administrador do cluster de utilizadores (user-cluster-admin): criar, eliminar, editar ou ver os recursos de um cluster partilhado alojado no servidor da API de gestão. Esta função permite-lhe verificar as GPUs no cluster partilhado e não está associada ao espaço de nomes do seu projeto.
  • Administrador do espaço de nomes (namespace-admin): criar, eliminar, editar ou ver os recursos de um cluster partilhado alojado no projeto. Esta função permite-lhe implementar cargas de trabalho de GPU num cluster padrão e está associada ao espaço de nomes do seu projeto.

Funções de cluster padrão

Para validar os conjuntos de nós suportados pela GPU e implementar cargas de trabalho de GPU num cluster padrão, peça ao administrador de IAM do projeto que lhe conceda as seguintes funções:

  • Administrador do cluster padrão (standard-cluster-admin): criar, eliminar, editar ou ver os recursos de um cluster padrão alojado no servidor da API de gestão. Esta função permite-lhe verificar as GPUs no cluster partilhado e está associada ao espaço de nomes do seu projeto.
  • Programador de clusters (cluster-developer): criar, eliminar, editar ou ver um cluster padrão. Esta função permite-lhe implementar cargas de trabalho de GPU num cluster padrão, concedendo acesso às APIs do plano de dados alojadas no cluster padrão. Esta função está associada ao espaço de nomes do seu projeto.

Prepare o seu ambiente

Para configurar um contentor para usar recursos da GPU, certifique-se de que tem os seguintes recursos:

  • Um cluster do Kubernetes com uma classe de máquina de GPU. Para mais informações, consulte a secção Placas gráficas compatíveis.

  • 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.

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

  • Inicie sessão e gere o ficheiro kubeconfig para o servidor da API de gestão zonal que aloja o seu cluster do Kubernetes. Use este caminho para substituir MANAGEMENT_API_SERVER nestas instruções.

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

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:

     # Several lines of code are omitted here.
     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
     # Several lines of code are omitted here.
    
  3. Os contentores também requerem autorizações adicionais para aceder às GPUs. Para cada contentor que solicite GPUs, adicione as seguintes autorizações à especificação do contentor:

    # Several lines of code are omitted here.
    securityContext:
     seLinuxOptions:
       type: unconfined_t
    # Several lines of code are omitted here.
    
  4. Aplique o ficheiro do 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?