Compartilhar via


Use Máquinas Virtuais Spot com cargas de trabalho em lote

Lote do Azure oferece VMs (máquinas virtuais) Spot para reduzir o custo dos trabalhos em lote. As VMs Spot possibilitam novos tipos de workloads do Azure Batch ao permitir que uma grande quantidade de capacidade de computação seja utilizada a um custo baixo.

As VMs spot aproveitam a capacidade excedente em Azure. A quantidade de capacidade excedente disponível varia dependendo de fatores como família de VM, tamanho da VM, região e hora do dia. Quando você especifica VMs Spot em seus pools, o Lote do Azure pode usar o excedente, quando disponível.

A desvantagem de usar VMs spot é que essas VMs não têm SLA nem garantias de disponibilidade. As VMs spot podem ser interrompidas a qualquer momento, incluindo mesmo imediatamente após a criação da VM. Por esse motivo, as VMs spot são mais adequadas para cargas de trabalho de processamento assíncronas e em lote, em que o tempo para conclusão do trabalho é flexível e o trabalho é distribuído entre várias VMs.

Se ocorrer uma preempção, o nó de computação Spot será interrompido e todo o trabalho que não foi devidamente checkpointado será perdido. O ponto de verificação é opcional e cabe ao usuário final do Lote implementar. A tarefa em execução do Lote que foi interrompida devido à preempção será automaticamente colocada na fila para execução por um nó de computação diferente. Uma VM preempvida pode ser restaurada posteriormente pela plataforma Azure, mas a restauração só é tentada nas primeiras 48 horas após a preempção e não é garantida a êxito eventualmente.

VMs spot são oferecidas a um preço menor em comparação com as VMs dedicadas. Para aprender mais sobre preço, consulte Batch pricing.

Suporte em lote para VMs Spot

Lote do Azure fornece vários recursos que facilitam o consumo e o aproveitamento das VMs Spot:

  • Pools do Lote podem conter VMs dedicadas e VMs de baixa prioridade. 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 explícita de redimensionamento ou usando o dimensionamento automático. O envio de trabalhos e tarefas pode permanecer inalterado, independentemente dos tipos de VM no pool. Também é possível configurar um pool a fim de usar completamente as VMs spot para executar trabalhos da forma mais econômica possível, mas usar VMs dedicadas se a capacidade cair abaixo do limite mínimo, a fim de manter os trabalhos em execução.
  • Pools do Lote buscam automaticamente usar o número predeterminado de VMs spot. Se as VMs sofrerem preempção ou estiverem indisponíveis, o Batch tentará substituir a capacidade perdida e retornar ao alvo.
  • Quando as tarefas são interrompidas, o Batch detecta e as coloca automaticamente em fila para executar novamente.
  • VMs de baixa prioridade têm uma cota de CPU virtual separada e diferente da cota das VMs dedicadas. A cota para VMs spot é maior do que a cota para VMs dedicadas, pois as VMs spot têm menor custo. Para saber mais, confira Limites e cotas do serviço de Lote.

Considerações e casos de uso

Muitas cargas de trabalho do Lote são uma boa opção para VMs spot. Considere o uso de VMs Spot quando os trabalhos são divididos em muitas tarefas paralelas, ou quando você tem muitos trabalhos que são expandidos e distribuídos em várias VMs.

Alguns exemplos de casos de uso de processamento em lotes que são adequados ao uso de VMs Spot são:

  • Desenvolvimento e teste: Em particular, se soluções de grande escala estiverem sendo desenvolvidas, economias significativas podem ser obtidas. Todos os tipos de testes podem ser beneficiados, mas testes de carga de larga escala e testes de regressão são ótimas opções.
  • Complementar a capacidade sob demanda: as VMs spot podem ser usadas para complementar as VMs dedicadas regulares. Quando isso estiver disponível, os trabalhos poderão ser escalonados e, portanto, concluídos mais rapidamente com um custo menor. Quando não estiver disponível, a linha de base das VMs dedicadas permanecerá disponível.
  • Flexibilidade no tempo de execução dos trabalhos: Se houver flexibilidade no tempo que os trabalhos têm de ser concluídos, então potenciais quedas na capacidade podem ser toleradas. No entanto, com a adição de VMs Spot, os trabalhos frequentemente são executados mais rapidamente e por um custo mais baixo.

Pools de processamento em lote podem ser configurados para usar Spot VMs de algumas maneiras:

  • Um pool pode usar apenas VMs spot. Nesse caso, o Batch recupera a capacidade preemptada quando estiver disponível. Essa configuração é a maneira mais econômica 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 em andamento.
  • Um pool pode usar uma combinação dinâmica de VMs Spot dedicadas, de modo que as VMs Spot mais econômicas são usadas apenas quando disponíveis, mas as VMs dedicadas de preço total, são dimensionadas verticalmente quando necessário. Esta configuração mantém uma quantidade mínima de capacidade disponível para manter trabalhos em andamento.

Tenha em mente as seguintes práticas ao planejar o uso de VMs Spot:

  • Para maximizar o uso da capacidade excedente na Azure, tarefas adequadas podem ser ampliadas horizontalmente.
  • Ocasionalmente, as VMs podem não estar disponíveis ou serem preemptadas, o que resulta em capacidade reduzida para execução de tarefas e pode levar à interrupção e repetição de tarefas.
  • Tarefas com tempos de execução menores tendem a funcionar melhor com VMs spot. Trabalhos com tarefas mais longas podem ser mais impactados se interrompidos. Se as tarefas de longa duração implementarem pontos de verificação para salvar o progresso enquanto forem executadas, este impacto pode ser reduzido.
  • Trabalhos de MPI de longa duração que utilizam várias VMs não são bem adequados para VMs Spot, pois uma VM interrompida pode fazer com que todo o trabalho precise ser executado novamente.
  • Os nós spot poderão ser marcados como inutilizáveis se as regras do NSG (grupo de segurança de rede) estiverem configuradas incorretamente.

Criar e gerenciar pools com VMs spot

Um Batch pool pode conter tanto VMs dedicadas quanto VMs Spot (também conhecidas como nós de computação). É possível definir o número desejado de nós de computação para VMs dedicadas e VMs spot. O número alvo de nós especifica o número de VMs que você deseja ter no pool.

As VMs Spot podem ocasionalmente ser preemptadas. Quando essa aceitação acontece, as tarefas que estavam em execução VMs do nó que sofreu preempção serão recolocadas na fila e executadas novamente. Batch também executa as seguintes ações:

  • As VMs que sofreram preempção têm seu estado atualizado para Preemptado.
  • A VM é excluída efetivamente, causando a perda de todos os dados armazenados localmente na VM.
  • Uma operação de nós de lista no pool ainda retornará os nós que foram aceitos.
  • O pool tentará continuamente alcançar o número predeterminado de nós spot disponíveis. Quando a capacidade de substituição for encontrada, os nós manterão suas IDs, mas serão reinicializados, passando pelos estados Criando e Inicial antes que fiquem disponíveis para o agendamento de tarefas.
  • As contagens de preempção estão disponíveis como uma métrica no portal Azure.

SDK do Lote do Azure

O exemplo a seguir cria um pool usando máquinas virtuais do 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);

É possível obter o número atual de nós para VMs dedicadas e VMs 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 os pools constituídos exclusivamente de VMs dedicadas, é possível dimensionar um pool que contém VMs Spot chamando o método 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 do 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"

Dimensionar 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"

Verificar o estado do conjunto 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

Criar pool com instâncias do 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

Valide com o PowerShell:

$pool = Get-AzBatchPool -Id "vmpool" -BatchContext $context
$pool | Select-Object Id, VmSize, @{Name="SpotNodes";Expression={$_.TargetLowPriorityComputeNodes}}, State

portal do Azure

  1. No portal do Azure, selecione a conta do Batch e visualize um pool existente ou crie um novo pool.

  2. Em Escala, selecione Nós dedicados de destino ou Spot de Destino/nós de baixa prioridade.

    Captura de tela mostrando como dimensionar nós de destino.

  3. Para um pool existente, selecione o pool e selecione Escala para atualizar o número de nós spot necessários.

  4. Clique em Salvar.

Dimensionamento automático com VMs spot

Além de definir as contagens de VM de destino diretamente, você pode, opcionalmente, definir uma fórmula de dimensionamento automático para o pool. A fórmula de dimensionamento automático do pool dá suporte a VMs spot da seguinte maneira:

  • Você pode obter ou definir o valor da variável definida pelo serviço $TargetLowPriorityNodes.
  • Você pode obter o valor da variável definida pelo serviço $CurrentLowPriorityNodes.
  • Você pode obter o valor da variável definida pelo serviço $PreemptedNodeCount. Essa variável retorna o número de nós com estado "admitiu preempção" e permite que você expanda ou reduza o número de nós dedicados, dependendo do número de nós que admitiram preempção e que estão indisponíveis.

Para obter mais informações, consulte o Guia de Dimensionamento Automático do Lote.

Configurar trabalhos e tarefas

Trabalhos e tarefas podem exigir alguma configuração extra para nós spot:

  • A propriedade JobManagerTask de um trabalho tem uma propriedade AllowLowPriorityNode. Quando essa propriedade tiver o valor "true", a tarefa do gerenciador de trabalhos poderá ser agendada em um nó dedicado ou em um nós spot. Se ela for false, a tarefa do gerenciador de trabalho será agendada apenas para um nó dedicado.
  • A AZ_BATCH_NODE_IS_DEDICATEDvariável de ambiente está disponível para um aplicativo de tarefas para que ele possa determinar se ela está em execução em um nó Spot ou dedicado.

Exibir métricas de VMs Spot

Novas métricas estão disponíveis no Azure portal para nós Spot. Essas métricas são:

  • Contagem de nós de baixa prioridade
  • Contagem de núcleos de baixa prioridade
  • Contagem de nós com preempção

Para exibir essas métricas no portal do Azure:

  1. Navegue até sua conta do Batch no portal do Azure.
  2. Selecione Métricas na seção Monitoramento.
  3. Selecione as métricas desejadas na lista Métrica.

Limitações

  • As VMs spot no Lote não têm suporte à definição de um preço máximo e nem a remoções baseadas em preço. Elas só podem ser removidas por motivos de capacidade.
  • As VMs Spot não estão disponíveis para determinadas nuvens, tamanhos de VM e tipos de oferta de assinatura. Veja mais sobre limitações da VM Spot.
  • Atualmente, os discos do SO efêmeros não são suportados com VMs Spot devido à política de remoção gerenciada pelo serviço Parar/Desalocar.

Próximas etapas