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.
O Azure Batch disponibiliza máquinas virtuais Spot para reduzir o custo das cargas de trabalho em lote. As VMs spot possibilitam novos tipos de cargas de trabalho em lote, permitindo que uma grande quantidade de poder de computação seja usada por um baixo custo.
As VMs spot aproveitam a capacidade excedente no Azure. A quantidade de capacidade excedente disponível varia consoante fatores como a família de VMs, tamanho da VM, região e hora do dia. Quando especificas VMs Spot nos teus pools, o Azure Batch pode usar este excedente, quando disponível.
A desvantagem de usar VMs Spot é que estas VMs não têm SLA nem garantias de disponibilidade. As VMs spot podem ser preemptadas a qualquer momento, incluindo imediatamente após a criação da VM. Por esse motivo, as VMs spot são mais adequadas para cargas de trabalho de processamento em lote e assíncrono, onde o tempo de conclusão do trabalho é flexível e o trabalho é distribuído por muitas VMs.
Se ocorrer uma preempção, o nó de computação Spot será despejado e todo o trabalho que não foi devidamente controlado será perdido. O processo de checkpointing é opcional e cabe ao utilizador final do Batch implementá-lo. A tarefa Batch em execução que foi interrompida devido à preempção será automaticamente reencaminhada para execução por outro nó computacional. Uma VM preemptada pode ser restaurada posteriormente pela plataforma Azure, mas a restauração só é tentada durante as primeiras 48 horas após a preempção e não é garantida que tenha sucesso eventualmente.
As VMs spot são oferecidas a um preço reduzido em comparação com as VMs dedicadas. Para saber mais sobre preços, consulte Preços por lote.
Suporte em lote para VMs Spot
O Azure Batch oferece várias funcionalidades que facilitam o consumo e o benefício das VMs Spot:
- Os pools de Batch podem conter VMs dedicadas e VMs Spot. O número de cada tipo de VM pode ser especificado quando um pool é criado ou alterado a qualquer momento para um pool existente, usando a operação de redimensionamento explícito ou usando o dimensionamento automático. O envio de trabalhos e tarefas pode permanecer inalterado, independentemente dos tipos de VM no pool. Você também pode configurar um pool para usar exclusivamente VMs spot para executar trabalhos da forma mais barata possível, mas iniciar VMs dedicadas se a capacidade cair abaixo de um limite mínimo, para manter os trabalhos em execução.
- Os pools de Batch procuram automaticamente o número alvo de VMs Spot. Se as VMs forem preemptadas ou estiverem indisponíveis, o Batch tentará substituir a capacidade perdida e restaurar o nível alvo.
- Quando as tarefas são interrompidas, o Batch deteta e recoloca as tarefas automaticamente na fila para serem executadas novamente.
- As VMs spot têm uma cota de vCPU separada que difere da cota das VMs dedicadas. A cota para VMs spot é maior do que a cota para VMs dedicadas, porque as VMs spot custam menos. Para obter mais informações, consulte Cotas e limites do serviço Batch.
Considerações e casos de uso
Muitas cargas de trabalho em lote são adequadas para VMs Spot. Considere o uso de VMs Spot quando os trabalhos são divididos em muitas tarefas paralelas ou quando tem muitos trabalhos que são dimensionados e distribuídos por muitas VMs.
Alguns exemplos de casos de uso de processamento em lote que são adequados para VMs spot são:
- Desenvolvimento e testes: Em particular, se soluções em larga escala estão sendo desenvolvidas, economias significativas podem ser realizadas. Todos os tipos de teste podem se beneficiar, mas o teste de carga em larga escala e o teste de regressão são ótimos usos.
- Complementando a capacidade a pedido: Spot VMs podem ser usadas para complementar VMs dedicadas regulares. Quando disponíveis, os trabalhos podem ser dimensionados e, portanto, concluídos mais rapidamente por um custo mais baixo; quando não está disponível, a linha de base das VMs dedicadas permanece disponível.
- Tempo de execução flexível do trabalho: Se houver flexibilidade no tempo que os trabalhos têm para concluir, então potenciais quedas na capacidade podem ser toleradas. No entanto, com a adição de VMs spot, os trabalhos geralmente são executados mais rapidamente e por um custo mais baixo.
Os pools de tarefas podem ser configurados para usar VMs Spot de várias maneiras:
- Um pool pode usar apenas VMs Spot. Nesse caso, o Batch recupera qualquer capacidade antecipada quando disponível. Essa configuração é a maneira mais barata de executar trabalhos.
- As VMs spot podem ser usadas com uma linha de base fixa de VMs dedicadas. O número fixo de VMs dedicadas garante que sempre haja alguma capacidade para manter um trabalho progredindo.
- Um pool pode usar uma combinação dinâmica de VMs dedicadas e spot, de modo que as VMs spot mais baratas sejam usadas apenas quando disponíveis, mas as VMs dedicadas com preço total aumentam quando necessário. Essa configuração mantém uma quantidade mínima de capacidade disponível para manter os trabalhos progredindo.
Tenha em mente as seguintes práticas ao planear o uso de VMs spot:
- Para maximizar a utilização da capacidade excedente no Azure, trabalhos adequados podem escalar horizontalmente.
- Ocasionalmente, as VMs podem não estar disponíveis ou são antecipadas, o que resulta em capacidade reduzida para trabalhos e pode levar à interrupção e reexecuções de tarefas.
- Tarefas com tempos de execução mais curtos tendem a funcionar melhor com VMs spot. Trabalhos com tarefas mais longas podem ser mais afetados se forem interrompidos. Se tarefas de longa execução implementarem pontos de verificação para salvar o progresso à medida que são executadas, esse impacto poderá ser reduzido.
- Trabalhos MPI de longa duração que utilizam várias VMs não são adequados para VMs Spot, porque uma VM preemptada pode fazer com que todo o trabalho tenha que ser executado novamente.
- Os nós spot podem ser marcados como inutilizáveis se as regras do NSG (grupo de segurança de rede) estiverem configuradas incorretamente.
Criar e gerir pools com Máquinas Virtuais Spot
Um Batch pool pode conter VMs dedicadas e Spot (também conhecidas como nós de computação). Você pode definir o número alvo de nós de computação para VMs dedicadas e Spot. O número de nós de destino especifica o número de VMs que você deseja ter no pool.
As VMs Spot podem ser interrompidas ocasionalmente. Quando a preempção acontece, as tarefas que estavam a ser executadas nas VMs do nó preemptado são recolocadas na fila e executadas novamente quando a capacidade retorna. O batch também executa os seguintes comportamentos:
- As VMs preemptivas têm o seu estado atualizado para Preempted.
- A VM é efetivamente excluída, levando à perda de quaisquer dados armazenados localmente na VM.
- Uma operação para listar nós no pool ainda retorna os nós preemptados.
- O pool tenta continuamente atingir o número de destino de nós spot disponíveis. Quando a capacidade de substituição é encontrada, os nós mantêm os seus IDs, mas são reinicializados, passando pelos estados de Criando e Iniciando antes de estarem disponíveis para o agendamento de tarefas.
- As contagens de preempção estão disponíveis como métrica no portal Azure.
Azure Batch SDK
O exemplo seguinte cria um pool usando máquinas virtuais Azure, neste caso VMs Linux, com um objetivo de 5 VMs dedicadas e 20 VMs Spot:
ImageReference imageRef = new ImageReference(
publisher: "Canonical",
offer: "ubuntu-24_04-lts",
sku: "server",
version: "latest");
// Create the pool
VirtualMachineConfiguration virtualMachineConfiguration =
new VirtualMachineConfiguration("batch.node.ubuntu 24.04", imageRef);
pool = batchClient.PoolOperations.CreatePool(
poolId: "vmpool",
targetDedicatedComputeNodes: 5,
targetLowPriorityComputeNodes: 20,
virtualMachineSize: "Standard_D4s_v3",
virtualMachineConfiguration: virtualMachineConfiguration);
Você pode obter o número atual de nós para VMs dedicadas e spot:
int? numDedicated = pool1.CurrentDedicatedComputeNodes;
int? numLowPri = pool1.CurrentLowPriorityComputeNodes;
Os nós do pool têm uma propriedade para indicar se o nó é uma VM dedicada ou uma VM Spot.
bool? isNodeDedicated = poolNode.IsDedicated;
Assim como acontece com pools que consistem exclusivamente em VMs dedicadas, é possível dimensionar um pool contendo VMs Spot chamando o Resize ou usando o dimensionamento automático.
A operação de redimensionamento do pool usa um segundo parâmetro opcional que atualiza o valor de targetLowPriorityNodes:
pool.Resize(targetDedicatedComputeNodes: 0, targetLowPriorityComputeNodes: 25);
CLI do Azure
Crie um novo pool com instâncias Spot:
az batch pool create \
--id "vmpool" \
--vm-size "Standard_D4s_v3" \
--target-dedicated-nodes 5 \
--target-low-priority-nodes 20 \
--enable-inter-node-communication false \
--image "Canonical:ubuntu-24_04-lts:server" \
--node-agent-sku-id "batch.node.ubuntu 24.04" \
--account-name <your-batch-account-name> \
--account-endpoint "https://<your-batch-account-name>.<region>.batch.azure.com"
Dimensione o pool existente para usar instâncias Spot:
az batch pool resize \
--pool-id <existing-pool-id> \
--target-dedicated-nodes 5 \
--target-low-priority-nodes 20 \
--account-name <your-batch-account-name> \
--account-endpoint "https://<your-batch-account-name>.<region>.batch.azure.com"
Verifique o estado do pool e a alocação dos nós
az batch pool show \
--account-name <your-batch-account-name> \
--account-endpoint "https://<your-batch-account-name>.<region>.batch.azure.com" \
--pool-id <your-pool-id> \
--query "{State:state, CurrentSpotNodes:currentLowPriorityNodes, TargetSpotNodes:scaleSettings.targetLowPriorityNodes, ResizeErrors:resizeErrors}"
Azure PowerShell
Crie um pool com instâncias Spot:
New-AzBatchPool `
-Id "vmpool" `
-VirtualMachineSize "Standard_D4s_v3" `
-TargetDedicatedComputeNodes 5 `
-TargetLowPriorityComputeNodes 20 `
-VirtualMachineImageId "/subscriptions/{subscription}/resourceGroups/{rg}/providers/Microsoft.Compute/images/{image}" `
-BatchContext $context
Validar com PowerShell:
$pool = Get-AzBatchPool -Id "vmpool" -BatchContext $context
$pool | Select-Object Id, VmSize, @{Name="SpotNodes";Expression={$_.TargetLowPriorityComputeNodes}}, State
Azure portal
No portal do Azure, selecione a conta de lote e visualize um pool existente ou crie um novo pool.
Em Escalar, selecione nós dedicados Target ou Target Spot/nós de baixa prioridade.
Para um pool existente, selecione o pool e depois selecione Escalar para atualizar o número de nós Spot necessários.
Selecione Guardar.
Autoescalar com Spot VMs
Além de definir diretamente as contagens alvo de VMs, podes opcionalmente definir uma fórmula de autoescala para o teu pool. A fórmula de dimensionamento automático do pool oferece suporte a VMs spot da seguinte maneira:
- Você pode obter ou definir o valor da variável
$TargetLowPriorityNodesdefinida pelo serviço. - Você pode obter o valor da variável
$CurrentLowPriorityNodesdefinida pelo serviço. - Você pode obter o valor da variável
$PreemptedNodeCountdefinida pelo serviço. Essa variável retorna o número de nós no estado preemptado e permite aumentar ou diminuir o número de nós dedicados, consoante o número de nós preemptados que se encontram indisponíveis.
Para mais informações, consulte o Guia de Autoescala por Lotes.
Configurar trabalhos e tarefas
Alguns trabalhos e tarefas podem exigir uma configuração extra para instâncias Spot.
- A
JobManagerTaskpropriedade de um trabalho tem umaAllowLowPriorityNodepropriedade. Quando esta propriedade for verdadeira, a tarefa do gestor de tarefas poderá ser agendada num nó dedicado ou Spot. Se for falso, a tarefa do gestor de tarefas será agendada apenas para um nó dedicado. - A
AZ_BATCH_NODE_IS_DEDICATEDvariável de ambiente está disponível para uma aplicação de tarefa para determinar se está a ser executada em um Spot ou em um nó dedicado.
Exibir métricas para VMs Spot
Novas métricas estão disponíveis no portal Azure para instâncias Spot. Essas métricas são:
- Contagem de nós de baixa prioridade
- Número de núcleos de baixa prioridade
- Contagem de nós preemptados
Para visualizar estas métricas no portal Azure:
- Navegue até à sua conta de lote no portal Azure.
- Selecione Métricas na seção Monitoramento.
- Selecione as métricas desejadas na lista Métricas .
Limitações
- As VMs spot no Batch não suportam a definição de um preço máximo e não suportam remoções baseadas em preço. Só podem ser despejados por razões de capacidade.
- As VMs Spot não estão disponíveis para algumas nuvens, tamanhos de VM e tipos de subscrição. Veja mais sobre limitações de VM Spot.
- Atualmente, os discos de SO efémeros não são compatíveis com Spot VMs devido à política de remoção gerida pelo serviço do Stop-Deallocate.
Próximos passos
- Saiba mais sobre o fluxo de trabalho do serviço Batch e os recursos primários, como pools, nós, jobs e tarefas.
- Saiba mais sobre as APIs e ferramentas do Batch disponíveis para construir soluções Batch.
- Para mais informações sobre VMs Spot em Azure, incluindo como consultar preços históricos e taxas de despejo, consulte Spot Máquinas Virtuais.