Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a: AKS no Azure Local
Nota
Para obter informações sobre GPUs no AKS no Windows Server, consulte Usar GPUs no AKS no Windows Server.
As Unidades de Processamento Gráfico (GPUs) são úteis para cargas de trabalho intensivas em computação, como machine learning, deep learning e muito mais. Este artigo descreve como usar GPUs para cargas de trabalho de computação intensiva no AKS habilitado pelo Azure Arc.
Modelos de GPU suportados
Os seguintes modelos de GPU são suportados pelo AKS na Azure Local. Observe que as GPUs só são suportadas em pools de nós do sistema operacional Linux. As GPUs não são suportadas em pools de nós do sistema operacional Windows.
| Fabricante | Modelo de GPU | Versão suportada |
|---|---|---|
| NVidia | A2 | 2311.2 |
| NVidia | A16 | 2402.0 |
| NVidia | T4 | 2408.0 |
| NVidia | L4 | 2512.0 |
| NVidia | L40 | 2512.0 |
| NVidia | L40S | 2512.0 |
Tamanhos de VM GPU suportados
Os seguintes tamanhos de VM para cada modelo de GPU são suportados pelo AKS no Azure Local.
Nvidia T4 é suportado por NK T4 SKUs
| Tamanho da VM | GPUs | Memória GPU: GiB | vCPU | Memória: GiB |
|---|---|---|---|---|
| Padrão_NK6 | 1 | 8 | 6 | 12 |
| Standard_NK12 | 2 | 16 | 12 | 24 |
Nvidia A2 é suportado por NC2 A2 SKUs
| Tamanho da VM | GPUs | Memória GPU: GiB | vCPU | Memória: GiB |
|---|---|---|---|---|
| Standard_NC4_A2 | 1 | 16 | 4 | 8 |
| Standard_NC8_A2 | 1 | 16 | 8 | 16 |
| Standard_NC16_A2 | 2 | 32 | 16 | 64 |
| Standard_NC32_A2 | 2 | 32 | 32 | 128 |
Nvidia A16 é suportado por NC2 A16 SKUs
| Tamanho da VM | GPUs | Memória GPU: GiB | vCPU | Memória: GiB |
|---|---|---|---|---|
| Standard_NC4_A16 | 1 | 16 | 4 | 8 |
| Standard_NC8_A16 | 1 | 16 | 8 | 16 |
| Standard_NC16_A16 | 2 | 32 | 16 | 64 |
| Standard_NC32_A16 | 2 | 32 | 32 | 128 |
A Nvidia L4 é suportada por SKUs NC2 L4 (Pré-visualização)
| Tamanho da VM | GPUs | Memória GPU: GiB | vCPU | Memória: GiB |
|---|---|---|---|---|
| Standard_NC16_L4_1 | 1 | 24 | 16 | 64 |
| Standard_NC16_L4_2 | 2 | 48 | 16 | 64 |
| Standard_NC32_L4_1 | 1 | 24 | 32 | 128 |
| Standard_NC32_L4_2 | 2 | 48 | 32 | 128 |
A Nvidia L40 é suportada por SKUs NC2 L40 (Pré-visualização)
| Tamanho da VM | GPUs | Memória GPU: GiB | vCPU | Memória: GiB |
|---|---|---|---|---|
| Standard_NC16_L40_1 | 1 | 48 | 16 | 64 |
| Standard_NC16_L40_2 | 2 | 96 | 16 | 64 |
| Standard_NC32_L40_1 | 1 | 48 | 32 | 128 |
| Standard_NC32_L40_2 | 2 | 96 | 32 | 128 |
A Nvidia L40S é suportada por SKUs NC2 L40S (Pré-visualização)
| Tamanho da VM | GPUs | Memória GPU: GiB | vCPU | Memória: GiB |
|---|---|---|---|---|
| Standard_NC16_L40S_1 | 1 | 48 | 16 | 64 |
| Standard_NC16_L40S_2 | 2 | 96 | 16 | 64 |
| Standard_NC32_L40S_1 | 1 | 48 | 32 | 128 |
| Standard_NC32_L40S_2 | 2 | 96 | 32 | 128 |
Antes de começar
Para usar GPUs no AKS Arc, certifique-se de instalar os drivers de GPU necessários antes de começar a implantação do cluster. Siga os passos nesta secção.
Passo 1: instalar o SO
Instale o sistema operacional Azure Local localmente em cada servidor em seu cluster Local do Azure.
Etapa 2: desinstalar o driver de host NVIDIA
Em cada máquina anfitriã, vá ao Painel > de Controlo Adicionar ou Remover programas, desinstale o driver anfitrião NVIDIA e depois reinicie a máquina. Após a reinicialização da máquina, confirme se o driver foi desinstalado com êxito. Abra um terminal do PowerShell com privilégios elevados e execute o seguinte comando:
Get-PnpDevice | select status, class, friendlyname, instanceid | where {$_.friendlyname -eq "3D Video Controller"}
Você deve ver os dispositivos GPU aparecerem em um estado de erro, conforme mostrado neste exemplo de saída:
Error 3D Video Controller PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000
Error 3D Video Controller PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&3569C1D3&0&0000
Passo 3: Remover o driver do sistema anfitrião
Quando você desinstala o driver de host, a GPU física entra em um estado de erro. Você deve desmontar todos os dispositivos GPU do host.
Para cada dispositivo GPU (3D Video Controller), execute os seguintes comandos no PowerShell. Copie o ID da instância; Por exemplo, PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000 da saída do comando anterior:
$id1 = "<Copy and paste GPU instance id into this string>"
$lp1 = (Get-PnpDeviceProperty -KeyName DEVPKEY_Device_LocationPaths -InstanceId $id1).Data[0]
Disable-PnpDevice -InstanceId $id1 -Confirm:$false
Dismount-VMHostAssignableDevice -LocationPath $lp1 -Force
Para confirmar que as GPUs estão corretamente desmontadas do host, execute o seguinte comando. Deverá ver as GPUs em Unknown estado:
Get-PnpDevice | select status, class, friendlyname, instanceid | where {$_.friendlyname -eq "3D Video Controller"}
Unknown 3D Video Controller PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000
Unknown 3D Video Controller PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&3569C1D3&0&0000
Passo 4: Descarregue e instale o driver de mitigação da NVIDIA
O software pode incluir componentes desenvolvidos e de propriedade da NVIDIA Corporation ou de seus licenciantes. O uso desses componentes é regido pelo contrato de licença de usuário final da NVIDIA.
Consulte a documentação do data center da NVIDIA para baixar o driver de mitigação da NVIDIA. Depois de baixar o driver, expanda o arquivo e instale o driver de mitigação em cada máquina host. Você pode seguir este script do PowerShell para baixar o driver de mitigação e extraí-lo:
Invoke-WebRequest -Uri "https://docs.nvidia.com/datacenter/tesla/gpu-passthrough/nvidia_azure_stack_inf_v2022.10.13_public.zip" -OutFile "nvidia_azure_stack_inf_v2022.10.13_public.zip"
mkdir nvidia-mitigation-driver
Expand-Archive .\nvidia_azure_stack_inf_v2022.10.13_public.zip .\nvidia-mitigation-driver\
Para instalar o driver de mitigação, vá à pasta que contém os ficheiros extraídos e selecione o ficheiro do driver da GPU com base no tipo real de GPU instalado nos seus hosts locais Azure. Por exemplo, se o tipo for A2 GPU, clique com o botão direito do rato no ficheiro nvidia_azure_stack_A2_base.inf e selecione Instalar.
Também pode instalar o driver de mitigação executando os seguintes comandos a partir da linha de comandos:
pnputil /add-driver nvidia_azure_stack_A2_base.inf /install
pnputil /scan-devices
Depois de instalar o driver de mitigação, as GPUs são listadas no estado OK em Nvidia A2_base - Desmontado:
Get-PnpDevice | select status, class, friendlyname, instanceid | where {$_.friendlyname -match "Nvidia"}"
OK Nvidia A2_base - Dismounted PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000
OK Nvidia A2_base - Dismounted PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&3569C1D3&0&0000
Passo 5: repita os passos 1 a 4
Repita as etapas 1 a 4 para cada servidor em seu cluster Local do Azure.
Etapa 6: continuar a implantação do cluster Local do Azure
Continue a implantação do cluster Local do Azure seguindo as etapas na implantação Local do Azure.
Obtenha uma lista dos SKUs disponíveis de VMs habilitadas para GPU
Quando a implementação do cluster Azure Local terminar, execute o seguinte comando CLI para mostrar os SKUs VM disponíveis na sua implementação. Se instalares corretamente os drivers da tua GPU, o comando lista os SKUs correspondentes da VM da GPU:
az aksarc vmsize list --custom-location <custom location ID> -g <resource group name>
Criar um novo cluster de carga de trabalho com um pool de nós compatível com GPU
Atualmente, só podes usar pools de nós com GPU para pools de nós Linux. Para criar um novo cluster Kubernetes:
az aksarc create -n <aks cluster name> -g <resource group name> --custom-location <custom location ID> --vnet-ids <vnet ID>
O exemplo seguinte adiciona um pool de nós com dois nós habilitados para GPU (NVIDIA A2) e um SKU VM Standard_NC4_A2 :
az aksarc nodepool add --cluster-name <aks cluster name> -n <node pool name> -g <resource group name> --node-count 2 --node-vm-size Standard_NC4_A2 --os-type Linux
Confirme se é possível agendar GPUs
Depois de criares o teu pool de nós de GPU, confirma que podes agendar GPUs no Kubernetes. Primeiro, liste os nós em seu cluster usando o comando kubectl get nodes :
kubectl get nodes
NAME STATUS ROLES AGE VERSION
moc-l9qz36vtxzj Ready control-plane,master 6m14s v1.22.6
moc-lhbkqoncefu Ready <none> 3m19s v1.22.6
moc-li87udi8l9s Ready <none> 3m5s v1.22.6
Agora usa o comando kubectl describe node para confirmar que podes agendar as GPUs. Na secção Capacidade , a GPU aparece como nvidia.com/gpu: 1.
kubectl describe <node> | findstr "gpu"
A saída mostra as GPUs do nó trabalhador e é semelhante ao seguinte exemplo:
Capacity:
cpu: 4
ephemeral-storage: 103110508Ki
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 7865020Ki
nvidia.com/gpu: 1
pods: 110
Executar uma carga de trabalho capaz de utilizar GPU
Depois de completares os passos anteriores, cria um novo ficheiro YAML para testes, como gpupod.yaml. Copie e cole o seguinte YAML no novo arquivo chamado gpupod.yaml e salve-o:
apiVersion: v1
kind: Pod
metadata:
name: cuda-vector-add
spec:
restartPolicy: OnFailure
containers:
- name: cuda-vector-add
image: "k8s.gcr.io/cuda-vector-add:v0.1"
resources:
limits:
nvidia.com/gpu: 1
Execute o seguinte comando para implantar o aplicativo de exemplo:
kubectl apply -f gpupod.yaml
Verifique se o pod foi iniciado, concluiu a execução e se a GPU está atribuída:
kubectl describe pod cuda-vector-add | findstr 'gpu'
O comando anterior deve mostrar uma GPU atribuída:
nvidia.com/gpu: 1
nvidia.com/gpu: 1
Verifique o arquivo de log do pod para ver se o teste foi aprovado:
kubectl logs cuda-vector-add
Segue-se um exemplo de saída do comando anterior:
[Vector addition of 50000 elements]
Copy input data from the host memory to the CUDA device
CUDA kernel launch with 196 blocks of 256 threads
Copy output data from the CUDA device to the host memory
Test PASSED
Done
Se receber um erro de incompatibilidade de versão ao chamar drivers, como "A versão do driver CUDA é insuficiente para a versão de tempo de execução do CUDA", reveja a tabela de compatibilidade dos drivers NVIDIA.
FAQ
O que acontece durante a atualização de um pool de nós habilitado para GPU?
A atualização de pools de nós habilitados para GPU segue o mesmo padrão de atualização contínua usado para pools de nós regulares. Para que a atualização tenha sucesso, o Kubernetes precisa de criar novas VMs na máquina anfitriã física que tenham uma ou mais GPUs físicas disponíveis para atribuição de dispositivos. Essa disponibilidade garante que as suas aplicações possam continuar a funcionar quando o Kubernetes agenda pods neste nó atualizado.
Antes de atualizar:
- Planeje o tempo de inatividade durante a atualização.
- Tem uma GPU extra por host físico se estiveres a usar o Standard_NK6 ou duas GPUs extra se estiveres a usar Standard_NK12. Se estiveres a funcionar a plena capacidade e não tiveres uma GPU extra, reduz o teu pool de nós para um único nó antes da atualização, depois aumenta depois de a atualização ter sucesso.
O que acontece se eu não tiver GPUs físicas extras na minha máquina física durante uma atualização?
Se desencadear uma atualização num cluster sem recursos adicionais de GPU para facilitar a atualização progressiva, o processo de atualização ficará bloqueado até que uma GPU esteja disponível. Se funcionares a plena capacidade e não tiveres uma GPU extra, reduz o teu pool de nós para um único nó antes da atualização, depois aumenta depois de a atualização ter sucesso.