Utilizar VMs Spot com cargas de trabalho do Batch

Azure Batch oferece máquinas virtuais (VMs) Spot para reduzir o custo das cargas de trabalho do Batch. As VMs Spot possibilitam novos tipos de cargas de trabalho do Batch ao permitir a utilização de uma grande quantidade de poder de computação a baixo custo.

As VMs Spot tiram partido da capacidade excedentária no Azure. Quando especificaR VMs Spot nos conjuntos, Azure Batch pode utilizar este excedente, quando disponível.

A desvantagem da utilização de VMs Spot é que essas VMs podem nem sempre estar disponíveis ou podem ser impedidas em qualquer altura, dependendo da capacidade disponível. Por este motivo, as VMs Spot são mais adequadas para cargas de trabalho de processamento em lote e assíncronas em que o tempo de conclusão da tarefa é flexível e o trabalho é distribuído por muitas VMs.

As VMs Spot são oferecidas a um preço reduzido em comparação com as VMs dedicadas. Para saber mais sobre os preços, veja Preços do Batch.

Diferenças entre VMs Spot e de baixa prioridade

O Batch oferece dois tipos de VMs preempíveis de baixo custo:

  • VMs Spot, uma oferta moderna ao nível do Azure, também disponível como VMs de instância única ou Conjuntos de Dimensionamento de Máquinas Virtuais.
  • VMs de baixa prioridade, uma oferta legada disponível apenas através de Azure Batch.

O tipo de nó que obtém depende do modo de alocação de conjuntos da sua conta do Batch, que pode ser definido durante a criação da conta. As contas do Batch que utilizam o modo de alocação do conjunto de subscrições do utilizador obtêm sempre VMs Spot. As contas do Batch que utilizam o modo de alocação de conjuntos geridos do Batch obtêm sempre VMs de baixa prioridade.

Aviso

As VMs de baixa prioridade serão descontinuadas após 30 de setembro de 2025. Migre para VMs Spot no Batch antes disso.

As VMs Spot do Azure e as VMs de baixa prioridade do Batch são semelhantes, mas têm algumas diferenças de comportamento.

Spot VMs VMs de baixa prioridade
Contas do Batch suportadas Contas do Batch de subscrição de utilizador Contas do Batch geridas pelo Batch
Configurações de conjuntos do Batch suportadas Configuração da Máquina Virtual Configuração da Máquina Virtual e Configuração do Serviço Cloud (preterido)
Regiões disponíveis Todas as regiões que suportam VMs Spot Todas as regiões exceto o Microsoft Azure operado pela 21Vianet
Elegibilidade dos clientes Não está disponível para alguns tipos de oferta de subscrição. Veja mais sobre as limitações do Spot. Disponível para todos os clientes do Batch
Possíveis motivos para expulsão Capacidade Capacidade
Modelo de Preços Descontos variáveis relativos aos preços padrão da VM Descontos fixos relativos aos preços padrão da VM
Modelo de quota Sujeito a quotas principais na sua subscrição Sujeito a quotas principais na sua conta do Batch
SLA de Disponibilidade Nenhuma Nenhuma

Suporte do Batch para VMs Spot

Azure Batch fornece várias capacidades que facilitam o consumo e o benefício das VMs Spot:

  • Os conjuntos do Batch podem conter VMs dedicadas e VMs Spot. O número de cada tipo de VM pode ser especificado quando um conjunto é criado ou alterado em qualquer altura para um conjunto existente, utilizando a operação de redimensionamento explícito ou utilizando o dimensionamento automático. A submissão de tarefas e tarefas pode permanecer inalterada, independentemente dos tipos de VM no conjunto. Também pode configurar um conjunto para utilizar completamente as VMs Spot para executar tarefas o mais barato possível, mas criar VMs dedicadas se a capacidade ficar abaixo de um limiar mínimo, para manter os trabalhos em execução.
  • Os conjuntos do Batch procuram automaticamente o número de destino de VMs Spot. Se as VMs estiverem preempidas ou indisponíveis, o Batch tentará substituir a capacidade perdida e regressar ao destino.
  • Quando as tarefas são interrompidas, o Batch deteta e coloca automaticamente em fila tarefas para serem executadas novamente.
  • As VMs Spot têm uma quota de vCPU separada que difere da das VMs dedicadas. A quota para VMs Spot é superior à quota das VMs dedicadas, porque as VMs Spot custam menos. Para obter mais informações, veja Quotas e limites do serviço Batch.

Considerações e casos de utilização

Muitas cargas de trabalho do Batch são uma boa opção para VMs Spot. Considere utilizar VMs Spot quando as tarefas são divididas em muitas tarefas paralelas ou quando tiver muitas tarefas que são reduzidas horizontalmente e distribuídas em muitas VMs.

Alguns exemplos de casos de utilização de processamento em lotes adequados para VMs Spot são:

  • Desenvolvimento e teste: em particular, se estiverem a ser desenvolvidas soluções em grande escala, podem ser realizadas poupanças significativas. Todos os tipos de testes podem beneficiar, mas os testes de carga e regressão em grande escala são excelentes utilizações.
  • Complemento da capacidade a pedido: as VMs Spot podem ser utilizadas para complementar VMs dedicadas regulares. Quando disponíveis, as tarefas podem ser dimensionadas e, portanto, concluídas mais rapidamente para um custo mais baixo; quando não estiver 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 as tarefas têm de ser concluídas, as potenciais descidas de capacidade podem ser toleradas. No entanto, com a adição de VMs Spot, as tarefas são frequentemente executadas mais rapidamente e com um custo mais baixo.

Os conjuntos do Batch podem ser configurados para utilizar VMs Spot de algumas formas:

  • Um conjunto só pode utilizar VMs Spot. Neste caso, o Batch recupera qualquer capacidade preempida quando disponível. Esta configuração é a forma mais barata de executar tarefas.
  • As VMs Spot podem ser utilizadas com uma linha de base fixa de VMs dedicadas. O número fixo de VMs dedicadas garante que há sempre alguma capacidade para manter um trabalho a progredir.
  • Um conjunto pode utilizar uma combinação dinâmica de VMs dedicadas e Spot, para que as VMs Spot mais baratas sejam utilizadas apenas quando disponíveis, mas as VMs dedicadas a preços completos aumentam verticalmente quando necessário. Esta configuração mantém uma quantidade mínima de capacidade disponível para manter o progresso dos trabalhos.

Tenha em atenção as seguintes práticas ao planear a utilização de VMs Spot:

  • Para maximizar a utilização de capacidade excedentária no Azure, as tarefas adequadas podem aumentar horizontalmente.
  • Ocasionalmente, as VMs podem não estar disponíveis ou estar preempidas, o que resulta numa capacidade reduzida para tarefas e pode levar à interrupção e nova execução de tarefas.
  • As tarefas com tempos de execução mais curtos tendem a funcionar melhor com VMs Spot. Os trabalhos com tarefas mais longas podem ser mais afetados se forem interrompidos. Se as tarefas de execução prolongada implementarem pontos de verificação para guardar o progresso à medida que são executadas, este impacto poderá ser reduzido.
  • As tarefas de MPI de execução prolongada que utilizam várias VMs não são adequadas para VMs Spot, uma vez que uma VM preempida pode fazer com que todo o trabalho tenha de ser executado novamente.
  • Os nós spot podem ser marcados como inutilizáveis se as regras do grupo de segurança de rede (NSG) estiverem configuradas incorretamente.

Criar e gerir conjuntos com VMs Spot

Um conjunto do Batch pode conter VMs dedicadas e Spot (também referidas como nós de computação). Pode definir o número de destino 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 pretende ter no conjunto.

O exemplo seguinte cria um conjunto com máquinas virtuais do Azure, neste caso VMs do Linux, com um destino de 5 VMs dedicadas e 20 VMs Spot:

ImageReference imageRef = new ImageReference(
    publisher: "Canonical",
    offer: "UbuntuServer",
    sku: "20.04-LTS",
    version: "latest");

// Create the pool
VirtualMachineConfiguration virtualMachineConfiguration =
    new VirtualMachineConfiguration("batch.node.ubuntu 20.04", imageRef);

pool = batchClient.PoolOperations.CreatePool(
    poolId: "vmpool",
    targetDedicatedComputeNodes: 5,
    targetLowPriorityComputeNodes: 20,
    virtualMachineSize: "Standard_D2_v2",
    virtualMachineConfiguration: virtualMachineConfiguration);

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 conjunto têm uma propriedade para indicar se o nó é uma VM dedicada ou Spot:

bool? isNodeDedicated = poolNode.IsDedicated;

As VMs Spot podem ocasionalmente ser preempidas. Quando ocorre a preempção, as tarefas que estavam em execução nas VMs de nó preempidas são colocadas em fila e executadas novamente quando a capacidade é devolvida.

Para conjuntos de Configuração de Máquina Virtual, o Batch também executa os seguintes comportamentos:

  • As VMs preempidas têm o estado atualizado para Preempted.
  • A VM é efetivamente eliminada, o que leva à perda de quaisquer dados armazenados localmente na VM.
  • Uma operação de nós de lista no conjunto ainda devolve os nós preempidos.
  • O conjunto 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 respetivos IDs, mas são reinstalados, passando por Criar e Iniciar estados antes de estarem disponíveis para agendamento de tarefas.
  • As contagens de preempção estão disponíveis como uma métrica no portal do Azure.

Dimensionar conjuntos que contêm VMs Spot

Tal como acontece com os conjuntos que consistem apenas em VMs dedicadas, é possível dimensionar um conjunto que contenha VMs Spot ao chamar o método ou ao utilizar o Resize dimensionamento automático.

A operação de redimensionamento do conjunto utiliza um segundo parâmetro opcional que atualiza o valor de targetLowPriorityNodes:

pool.Resize(targetDedicatedComputeNodes: 0, targetLowPriorityComputeNodes: 25);

A fórmula de dimensionamento automático do conjunto suporta VMs Spot da seguinte forma:

  • Pode obter ou definir o valor da variável $TargetLowPriorityNodesdefinida pelo serviço .
  • Pode obter o valor da variável $CurrentLowPriorityNodesdefinida pelo serviço .
  • Pode obter o valor da variável $PreemptedNodeCountdefinida pelo serviço . Esta variável devolve o número de nós no estado preempido e permite-lhe aumentar ou reduzir verticalmente o número de nós dedicados, consoante o número de nós preemptados indisponíveis.

Configurar tarefas e tarefas

Os trabalhos e as tarefas podem exigir alguma configuração adicional para nós Spot:

  • A JobManagerTask propriedade de uma tarefa tem uma AllowLowPriorityNode propriedade. Quando esta propriedade é verdadeira, a tarefa do gestor de tarefas pode ser agendada num nó dedicado ou Spot. Se for falso, a tarefa do gestor de tarefas está agendada apenas para um nó dedicado.
  • A AZ_BATCH_NODE_IS_DEDICATEDvariável de ambiente está disponível para uma aplicação de tarefas para que possa determinar se está a ser executada num Spot ou num nó dedicado.

Ver métricas para VMs Spot

Estão disponíveis novas métricas no portal do Azure para nós Spot. Estas métricas são:

  • Contagem de Nós de Low-Priority
  • Contagem de Núcleos do Low-Priority
  • Contagem de Nós Preempted

Para ver estas métricas no portal do Azure:

  1. No portal do Azure, navegue para a sua conta do Batch.
  2. Selecione Métricas na secção Monitorização .
  3. Selecione as métricas pretendidas 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 expulsões baseadas em preços. Só podem ser expulsos por motivos de capacidade.
  • As VMs Spot só estão disponíveis para conjuntos de Configuração de Máquinas Virtuais e não para conjuntos de Configuração do Serviço Cloud, que são preteridos.
  • As VMs spot não estão disponíveis para algumas clouds, tamanhos de VM e tipos de oferta de subscrição. Veja mais sobre as limitações da VM Spot.
  • Atualmente, os discos de SO efémeros não são suportados com VMs Spot devido à política de expulsão gerida pelo serviço de Stop-Deallocate.

Passos seguintes