Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se para: AKS no Windows Server
As Unidades de Processamento Gráfico (GPU) são usadas para cargas de trabalho intensivas em computação, como aprendizagem automática, aprendizagem profunda e mais. Este artigo descreve como usar GPUs para cargas de trabalho intensivas em computação no AKS no Windows Server.
Antes de começares
Se estiver a atualizar o AKS a partir de uma versão de pré-visualização anterior a outubro de 2022 que utiliza conjuntos de nós com GPU, certifique-se de remover todos os clusters de carga de trabalho que utilizam GPUs antes de começar. Siga os passos nesta secção.
Passo 1: Desinstalar o driver anfitrião Nvidia
Em cada máquina anfitriã, navegue até ao Painel de Controlo > Adicionar ou Remover programas, desinstale o driver 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 | findstr /i /c:"3d video"
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 2: Desinstalar o controlador do host
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 foram corretamente desmontadas do host, execute o seguinte comando. Deves colocar as GPUs num Unknown estado:
Get-PnpDevice | select status, class, friendlyname, instanceid | findstr /i /c:"3d video"
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 3: 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.
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, navegue até à pasta que contém os ficheiros extraídos, clique com o botão direito no ficheiro nvidia_azure_stack_T4_base.inf e selecione Instalar. Verifica se tens o driver correto; O AKS atualmente suporta apenas a GPU NVIDIA Tesla T4.
Também pode instalar usando a linha de comandos, navegando até à pasta e executando os seguintes comandos para instalar o driver de mitigação:
pnputil /add-driver nvidia_azure_stack_T4_base.inf /install
pnputil /scan-devices
Depois de instalar o driver de mitigação, as GPUs ficam listadas no estado OK na Nvidia T4_base - Desmontadas:
Get-PnpDevice | select status, class, friendlyname, instanceid | findstr /i /c:"nvidia"
OK Nvidia T4_base - Dismounted PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&32EEF88F&0&0000
OK Nvidia T4_base - Dismounted PCI\VEN_10DE&DEV_1EB8&SUBSYS_12A210DE&REV_A1\4&3569C1D3&0&0000
Passo 4: Repita os passos 1 a 3
Repita os passos 1 a 3 para cada nó do seu cluster de failover.
Importante
As máquinas virtuais com GPU não são adicionadas à clusterização de ativação pós-falha no Windows Server 2019 e no Windows Server 2022.
Instalar ou atualizar o AKS
Consulta o quickstart do AKS usando PowerShell ou usando o Windows Admin Center para instalar ou atualizar o AKS no Windows Server.
Criar um novo cluster de carga de trabalho com um pool de nós compatível com GPU
Atualmente, o uso de pools de nós com GPU está disponível apenas para pools de nós Linux.
New-AksHciCluster -Name "gpucluster" -nodePoolName "gpunodepool" -nodeCount 2 -osType linux -nodeVmSize Standard_NK6
Depois de instalar o cluster da carga de trabalho, execute o seguinte comando para obter o seu Kubeconfig:
Get-AksHciCredential -Name gpucluster
Confirme se é possível agendar GPUs
Com o pool de nós da GPU criado, confirme que pode 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 as GPUs podem ser agendadas. Na secção Capacidade , a GPU deve aparecer como nvidia.com/gpu: 1.
kubectl describe <node> | findstr "gpu"
A saída deve mostrar a(s) GPU(s) do nó trabalhador e ser semelhante a isto:
nvidia.com/gpu.compute.major=7
nvidia.com/gpu.compute.minor=5
nvidia.com/gpu.count=1
nvidia.com/gpu.family=turing
nvidia.com/gpu.machine=Virtual-Machine
nvidia.com/gpu.memory=16384
nvidia.com/gpu.product=Tesla-T4
Annotations: cluster.x-k8s.io/cluster-name: gpucluster
cluster.x-k8s.io/machine: gpunodepool-md-58d9b96dd9-vsdbl
cluster.x-k8s.io/owner-name: gpunodepool-md-58d9b96dd9
nvidia.com/gpu: 1
nvidia.com/gpu: 1
ProviderID: moc://gpunodepool-97d9f5667-49lt4
kube-system gpu-feature-discovery-gd62h 0 (0%) 0 (0%) 0 (0%) 0 (0%) 7m1s
nvidia.com/gpu 0 0
Executar uma carga de trabalho que utiliza GPU
Depois de completar os passos anteriores, crie um novo ficheiro YAML para testes; por exemplo, 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 pools de nós com GPU ativada numa nova VM sejam criados com sucesso na máquina anfitriã física, é necessário que uma ou mais GPUs físicas estejam disponíveis para que a atribuição dos dispositivos seja bem-sucedida. 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 2 GPUs extra se estiveres a usar Standard_NK12. Se estiveres a funcionar a plena capacidade e não tiveres uma GPU extra, recomendamos que reduzas o teu pool de nós para um único nó antes da atualização, e depois aumentes depois de a atualização ser bem-sucedida.
O que acontece se eu não tiver GPUs físicas extras na minha máquina física durante uma atualização?
Se uma atualização for acionada num cluster sem recursos adicionais da GPU para facilitar a atualização contínua, o processo de atualização fica suspenso até que uma GPU esteja disponível. Se estiver a funcionar a plena capacidade e não tiver uma GPU extra, recomendamos reduzir o seu pool de nós para um único nó antes da atualização, e depois aumentar depois de a atualização ter sucesso.