Executar workloads de machine learning em instâncias spot é uma forma eficiente de reduzir custos de infraestrutura, mas exige arquitetura e práticas que tolerem preempção. Este guia apresenta estratégias práticas — desde escolha de instâncias até padrões de checkpoint, agendamento e automação — para manter jobs de treinamento e inferência robustos frente a interrupções.
Por que usar instâncias spot para ML
As instâncias spot oferecem acesso a capacidade ociosa do provedor de nuvem a preços muito menores que instâncias on-demand. Para treinos longos ou pipelines de batch que não precisam de latência constante, elas representam uma economia relevante. No entanto, esse desconto vem com um custo: o provedor pode preemptar a instância com aviso curto quando a capacidade for necessária para clientes pagantes por preço integral.
Para workloads de ML, onde treinos podem durar horas ou dias e inferência em lote pode ser intensiva, as instâncias spot fazem sentido quando a arquitetura admite perda temporária de capacidade e recuperação automática.
Entendendo a preempção e suas implicações
Preempção é o processo pelo qual o provedor de nuvem encerra instâncias spot para recuperar recursos, normalmente avisando com poucos segundos ou minutos. Isso impacta diretamente:
- Progresso do treino: perda de etapas e epochs não persistidas pode significar retrabalho significativo.
- Disponibilidade de inferência: redução de capacidade pode aumentar latência ou causar erros em endpoints mal dimensionados.
- Consistência de dados: término abrupto pode corromper checkpoints incompletos ou estados transitórios em discos locais.
Entender a janela de aviso do provedor e como ele lida com operações de shutdown é o primeiro passo para projetar tolerância.
Estratégias de tolerância a preempção em instâncias spot
Combinar várias práticas reduz exposição à preempção e minimiza perda de trabalho. Abaixo, estratégias que funcionam bem para workloads de ML.
1. Checkpointing frequente e atomizado
Salvar estados do modelo, otimizador e metadados em intervalos definidos permite retomar treinos sem recomeçar do zero. Para ser eficaz, checkpoints devem ser:
- Atomizados: escreva arquivos completos e consistentes, não apenas dumps parciais.
- Persistidos em armazenamento durável compartilhado, como buckets de objetos ou volumes de rede.
- Versionados com metadados que identifiquem época, etapa e métricas associadas.
Combine checkpoints periódicos por tempo (por exemplo, a cada N minutos) e por progresso (a cada N iterações) para equilibrar custo I/O e segurança.
2. Preemption-aware orchestration
Orquestradores e schedulers podem reagir ao sinal de preempção: ao receber aviso, devem disparar um flush de checkpoints e tentar finalizar tarefas críticas. Ferramentas como Kubernetes com provisionadores de nós spot, ou serviços gerenciados que expõem eventos de interrupção, permitem integrar handlers que executam shutdown controlado.
Outra técnica é etiquetar workloads com prioridade e tolerância, permitindo que controladores movam jobs sensíveis para on-demand quando houver risco maior de preempção.
3. Reexecução automática e resiliência na camada de job
Projete pipelines para serem idempotentes e reexecutáveis: jobs que podem executar de novo sobre dados já processados sem efeitos colaterais. Use filas de trabalho e controladores que detectem falhas por preempção e relancem com o último checkpoint disponível.
Frameworks de orquestração de ML e workflow engines devem manter estado do job separado da instância de execução, assim a perda de uma instância não perde a definição do trabalho.
4. Distribuição e redundância
Evitar concentrar toda a carga em poucas instâncias reduz impacto da perda. Estratégias incluem:
- Treino distribuído com sharding de dados e sincronização de parâmetros que tolerem nós faltantes.
- Replicação de tarefas de inferência crítica em diferentes pools, garantindo que a falha de alguns nós não degrade o serviço.
Modelos que aceitam treino assíncrono ou técnicas como elastic training facilitam aproveitar capacidade spot variável.
5. Uso de instâncias mistas e fallback automático
Combine instâncias spot com on-demand ou reserved: mantenha um pequeno pool on-demand que suporte o progresso mínimo enquanto o pool spot completa a maior parte do trabalho. Em picos de preempção, autoscale o pool on-demand para assumir carga crítica automaticamente.
6. Armazenamento externo e stateless design
Mantenha dados de entrada, checkpoints e logs em armazenamento externo resiliente: buckets de objetos, sistemas de arquivos distribuídos ou volumes de rede. Evite depender de discos locais para estados persistentes. Isso garante que qualquer instância nova pode retomar trabalhos com acesso imediato aos artefatos.
Arquitetura recomendada para treinos em instâncias spot
Uma arquitetura robusta combina orquestração, armazenamento durável e automação:
- Orquestrador (Kubernetes, batch scheduler gerenciado) com suporte a grupos de nós spot e políticas de tolerância.
- Pipeline de jobs em que cada etapa salva checkpoint e registra progresso em um banco de metadados ou workflow engine.
- Storage centralizado para datasets e checkpoints, com throughput adequado para grandes dumps de modelo.
- Mecanismo de monitoramento que detecta eventos de preempção do provedor e dispara ações automatizadas.
- Pool de fallback on-demand que pode crescer automaticamente para manter SLAs de inferência ou finalizar treinos urgentes.
Essa arquitetura favorece isolamento entre a definição do trabalho e sua execução, o que é essencial quando instâncias podem desaparecer a qualquer momento.
Ferramentas e padrões práticos
Algumas ferramentas e padrões aceleram a implementação da tolerância a preempção:
- Kubernetes com Cluster Autoscaler e Node Pools spot, usando DaemonSets ou PodDisruptionBudgets para controlar disponibilidade.
- Frameworks de treino como PyTorch Lightning e TensorFlow que têm hooks para checkpoint automático e reidratação do estado do otimizer.
- Workflow engines (Airflow, Prefect, Argo Workflows) que mantêm estado de execução e facilitam reexecução de tarefas falhas.
- Sistemas de storage: S3 ou equivalentes para checkpoints e dados, e volumes persistentes gerenciados para necessidades de I/O mais intenso.
- Ferramentas de observabilidade que capturam sinais de preempção e métricas de retrabalho para otimização contínua.
Integrar esses componentes permite montar pipelines que automaticamente salvam progresso, detectam preempção e reiniciam sem intervenção manual.
Planejamento de custos e trade-offs
Reduzir custos com instâncias spot envolve trade-offs claros:
- Economia direta: spot é mais barato, mas nem sempre previsível.
- Custo operacional: implementar checkpointing frequente, replicação e fallback adiciona complexidade e custo em armazenamento e orquestração.
- Latência e throughput: treinos distribuídos podem ter overhead de sincronização e I/O ao persistir checkpoints mais frequentemente.
A decisão depende do perfil do workload: para treinos experimentais ou batch de baixa prioridade, spot traz grandes ganhos. Para inferência crítica com SLA rígido, um mix híbrido é mais apropriado.
Exemplo prático: pipeline de treino tolerante a preempção
Um fluxo simples e eficiente para treinos em instâncias spot pode seguir essas etapas:
- Preparação: armazenar dataset em bucket e preparar imagem/container com dependências.
- Lançamento: orquestrador cria job em pool spot, com fallback configurado para on-demand se não houver capacidade.
- Execução: treino salva checkpoints a cada N minutos e a cada K iterações; logs e métricas são enviados a um storage centralizado e a um sistema de monitoramento.
- Preempção: ao sinal de encerramento, o handler tenta salvar um último checkpoint consistente e marca o job como interrompido no workflow engine.
- Retomada: o controlador relança o job em outro nó spot (ou on-demand se necessário), reidratando o estado a partir do último checkpoint disponível.
- Finalização: quando o treino completa, artefatos finais são versionados no storage e o job é marcado como concluído.
Automatizar essas transições evita que equipes precisem intervir manualmente a cada interrupção e reduz tempo ocioso nos treinos.
Boas práticas operacionais
Para manter pipelines spot saudáveis na prática, siga recomendações operacionais:
- Monitore métricas de preempção e retrabalho, use esses dados para ajustar frequência de checkpoints e tamanho de pools on-demand.
- Teste frequentemente: execute cenários de falha controlada para validar handlers de preempção. Aplicar abordagens semelhantes às de chaos engineering ajuda a descobrir lacunas. Para idéias sobre como testar defesas aplicacionais com injeções controladas de falhas, veja este artigo sobre chaos security.
- Padronize imagens/containeres para reduzir tempo de inicialização e garantir que novas instâncias possam reiniciar jobs rapidamente.
- Automatize rotinas de limpeza de checkpoints antigos e jobs retrabalhados para controlar custos de armazenamento.
- Documente SLAs internos e defina claramente que tipos de workloads podem usar spot, e quais exigem on-demand.
Quando evitar instâncias spot
Instâncias spot não são a escolha certa para todos os cenários. Evite utilizá-las quando:
- Existirem SLAs rígidos de latência para inferência online e pouca margem para queda de capacidade.
- O custo do retrabalho for maior que a economia obtida com spot, por exemplo em experimentos raros ou hiperparâmetros que exigem semanas de treino sem checkpoints confiáveis.
- Regulamentações ou requisitos de conformidade imponham controle estrito sobre localização e estabilidade das instâncias.
Nesses casos, um pool on-demand ou instâncias reservadas é mais seguro, possivelmente combinado com uso pontual de spot para tarefas auxiliares.
Resumo operacional e próximos passos
Rodar workloads de ML em instâncias spot é viável e economicamente atraente quando se aplica uma combinação de checkpointing, orquestração tolerante a preempção, armazenamento durável e fallback on-demand. O esforço de engenharia compensa em muitos cenários por causa da redução de custos. Para evoluir sua implementação, priorize automação de reexecução e testes controlados de falha.
Se sua equipe tem pipelines CI/CD para modelos, alinhar rotinas de deploy e testes de segurança e resiliência ao fluxo de treino ajuda a manter confiabilidade operacional. Se interessar, confira também nosso checklist sobre CI/CD seguro para integrar validações e deploys automatizados às rotinas de ML.
Quer aprofundar um ponto específico do pipeline ou revisar uma arquitetura existente da sua equipe? Deixe um comentário ou leia outro post relacionado para continuar aprendendo.
Chaos security: testar defesas aplicacionais com injeções controladas de falhas
Checklist definitivo para um CI CD seguro: práticas e verificação passo a passo








