Compartilhar via


Usar GPUs AMD para cargas de trabalho com uso intensivo de computação no AKS (Serviço de Kubernetes do Azure)

Os tamanhos da VM (Máquina Virtual) amd gpu no Azure podem fornecer flexibilidade no desempenho e no custo, oferecendo alta capacidade de computação, permitindo que você escolha a configuração certa para seus requisitos de carga de trabalho. O AKS dá suporte a pools de nós Linux habilitados para GPU AMD para executar cargas de trabalho do Kubernetes computacionalmente intensivas.

Este artigo ajuda você a provisionar nós com GPUs AMD programáveis em clusters novos e existentes do AKS.

Limitações

  • Atualmente, o AKS dá suporte ao dimensionamento de VM do Azure Standard_ND96isr_MI300X_v5 da plataforma GPU AMD série MI300.
  • Atualizar um pool de nós existente para adicionar um tamanho de VM com GPU AMD não é suportado no AKS.
  • Não há suporte para atualização de um pool de nós sem GPU AMD para um dimensionamento de VM com GPU AMD.
  • AzureLinux Windows, AzureLinuxOSGuarde flatcar não são compatíveis com a GPU AMD.

Antes de começar

  • Este artigo considera que você tenha um cluster do AKS. Se você não tiver um cluster, crie um usando a CLI do Azure, Azure PowerShell, ou o portal do Azure.
  • Você precisa da CLI do Azure versão 2.72.2 ou posterior instalada para definir o --gpu-driver campo. Execute az --version para encontrar a versão. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure.
  • Se você tiver a extensão da CLI do aks-preview Azure instalada, atualize a versão para 18.0.0b2 ou posterior.

Observação

As VMs habilitadas para GPU contêm um hardware especializado sujeito a preços mais altos e disponibilidade da região. Para obter mais informações, confira a ferramenta preço e a disponibilidade de região.

Obter as credenciais para o cluster

Obtenha as credenciais do cluster do AKS usando o comando az aks get-credentials. O seguinte comando de exemplo obtém as credenciais do cluster myAKSCluster no myResourceGroup grupo de recursos:

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster

Opções para usar GPUs AMD

O uso de GPUs AMD envolve a instalação de vários componentes de software de GPU AMD, como o plug-in de dispositivo AMD para Kubernetes, drivers de GPU e muito mais.

Observação

Atualmente, o AKS não gerencia nem automatiza a instalação de drivers de GPU ou do plugin do dispositivo de GPU AMD em pools de nós habilitados para GPU AMD.

Registrar o recurso AKSInfinibandSupport

  1. Se o dimensionamento da sua VM com GPU AMD for habilitado para RDMA com a convenção de nomenclatura r (por exemplo, Standard_ND96isr_MI300X_v5), será necessário garantir que os computadores no pool de nós estejam na mesma rede física Infiniband. Para isso, registre o sinalizador de recurso AKSInfinibandSupport usando o comando az feature register:

    az feature register --name AKSInfinibandSupport --namespace Microsoft.ContainerService
    
  2. Verifique o status do registro usando o comando az feature show:

    az feature show \
    --namespace "Microsoft.ContainerService" \
    --name AKSInfinibandSupport
    
  3. Crie um pool de nós habilitado para GPU AMD usando o comando az aks nodepool add e ignore a instalação do driver padrão definindo o campo de API --gpu-driver como o valor none:

    az aks nodepool add \
        --resource-group myResourceGroup \
        --cluster-name myAKSCluster \
        --name gpunp \
        --node-count 1 \
        --node-vm-size Standard_ND96isr_MI300X_v5 \
        --gpu-driver none
    

    Observação

    Atualmente, o AKS impõe o uso do campo gpu-driver para ignorar a instalação automática do driver no momento da criação do pool de nós de GPU AMD.

Implantar o Operador de GPU da AMD no AKS

O Operador de GPU AMD automatiza o gerenciamento e a implantação de todos os componentes de software AMD necessários para provisionar a GPU, incluindo a instalação do driver, o plug-in de dispositivo AMD para Kubernetes, o runtime de contêiner AMD e muito mais. Como o Operador de GPU AMD manipula esses componentes, não é necessário instalar separadamente o plug-in de dispositivo AMD no cluster do AKS. Isso também significa que não deve ocorrer a instalação automática dos drivers de GPU para utilizar o operador de GPU AMD no AKS.

  1. Siga a documentação da AMD para instalar o operador de GPU.

  2. Verifique o status das GPUs AMD no pool de nós usando o kubectl get nodes comando:

    kubectl get nodes -o custom-columns=NAME:.metadata.name,GPUs:.status.capacity.'amd\.com/gpu'
    

    Seu resultado deve ser semelhante ao seguinte exemplo de saída:

    NAME                    STATUS   ROLES   AGE    VERSION
    aks-gpunp-00000000      Ready    agent   2m4s   v1.31.7
    

Confirme se as GPUs AMD são programáveis

Depois de criar o pool de nós, confirme se as GPUs estão agendáveis no cluster do AKS.

  1. Listar os nós em seu cluster usando o comando kubectl get nodes.

    kubectl get nodes
    
  2. Confirme se as GPUs são agendáveis usando o comando kubectl describe node.

    kubectl describe node aks-gpunp-00000000
    

    Na seção Capacidade, a GPU deve ser listada como amd.com/gpu: 1. Seu resultado deve ser semelhante ao seguinte exemplo de saída condensado:

    Name:               aks-gpunp-00000000
    Roles:              agent
    Labels:             accelerator=amd
    
    [...]
    
    Capacity:
    [...]
     amd.com/gpu:                 1
    [...]
    

Executar uma carga de trabalho habilitada para GPU AMD

Para ver a GPU AMD em ação, você pode agendar uma carga de trabalho habilitada para GPU com a solicitação de recurso apropriada. Neste exemplo, vamos executar um trabalho do Tensorflow contra o conjunto de dados do MNIST.

  1. Crie um arquivo nomeado samples-tf-mnist-demo.yaml e cole o seguinte manifesto YAML, que inclui um limite de recursos de amd.com/gpu: 1:

    apiVersion: batch/v1
    kind: Job
    metadata:
      labels:
        app: samples-tf-mnist-demo
      name: samples-tf-mnist-demo
    spec:
      template:
        metadata:
          labels:
            app: samples-tf-mnist-demo
        spec:
          containers:
          - name: samples-tf-mnist-demo
            image: mcr.microsoft.com/azuredocs/samples-tf-mnist-demo:gpu
            args: ["--max_steps", "500"]
            imagePullPolicy: IfNotPresent
            resources:
              limits:
               amd.com/gpu: 1
          restartPolicy: OnFailure
          tolerations:
          - key: "sku"
            operator: "Equal"
            value: "gpu"
            effect: "NoSchedule"
    
  2. Execute o trabalho usando o comando kubectl apply, que analisa o arquivo de manifesto e cria os objetos definidos do Kubernetes.

    kubectl apply -f samples-tf-mnist-demo.yaml
    

Exibir o status da carga de trabalho habilitada para GPU

  1. Monitore o andamento do trabalho usando o comando kubectl get jobs com o sinalizador --watch. Pode levar alguns minutos para primeiro baixar a imagem e processar o conjunto de dados.

    kubectl get jobs samples-tf-mnist-demo --watch
    

    Quando a coluna COMPLETIONS mostra 1/1, o trabalho foi concluído com sucesso, conforme mostrado no exemplo de saída a seguir:

    NAME                    COMPLETIONS   DURATION   AGE
    
    samples-tf-mnist-demo   0/1           3m29s      3m29s
    samples-tf-mnist-demo   1/1   3m10s   3m36s
    
  2. Saia do processo kubectl --watch com Ctrl-C.

  3. Obtenha o nome do pod usando o comando kubectl get pods.

    kubectl get pods --selector app=samples-tf-mnist-demo
    

Limpar os recursos

Remova os objetos do Kubernetes associados que você criou neste artigo usando o comando kubectl delete job.

kubectl delete jobs samples-tf-mnist-demo

Próximas etapas