Visão geral da criação e execução de jobs

Neste documento, explicamos o processo de execução e as opções de criação de jobs. Os jobs em lote permitem executar cargas de trabalho de processamento em lote no Google Cloud. Para saber mais sobre os componentes de um job e os pré-requisitos para usar o Batch, consulte Primeiros passos com o Batch.

Como funciona a criação e a execução do job

Para usar o Batch, crie um job que especifique a carga de trabalho e os requisitos e, em seguida, o execute automaticamente.

Os detalhes de como a criação e a execução de jobs funcionam são descritos nas seções a seguir:

Ciclo de vida do job

Nesta seção, descrevemos o ciclo de vida de um job e as tarefas dele, desde a criação até a exclusão.

Para cada carga de trabalho que você quiser executar no Batch, é preciso passar pelo seguinte processo básico:

  1. Crie um job: defina a carga de trabalho que você quer executar especificando os executáveis, as tarefas e outros requisitos de um job. Os detalhes para criar um job são apresentados na seção Opções de criação de jobs deste documento.
  2. Monitorar e solucionar problemas do job: quando você concluir a criação de um job, ele será colocado na fila, programado e executado automaticamente nos recursos especificados. É possível ver os detalhes de um job criado ou de qualquer tarefa dele para ver o estado atual. Depois que um job estiver em execução ou concluído, você também pode monitorá-lo e analisá-lo usando registros. Se um job falhar, será possível solucioná-lo usando mensagens de erro, eventos de status ou registros para diagnosticar o problema antes de recriar o job.
  3. Exclua ou exporte o job: os registros de um job são mantidos e excluídos automaticamente de acordo com a política de retenção do Cloud Logging. Outras informações de um job permanecem disponíveis no Batch até que sejam excluídas por você ou pelo Google Cloud. O Google Cloud exclui automaticamente um job 60 dias após a conclusão. Antes disso, você pode excluir o job ou, se precisar manter as informações, exportar o job antes que ele seja excluído.

Depois que você cria um job, ele passa pelos seguintes estados:

  1. Na fila (QUEUED): a solicitação do job foi aceita e está aguardando na fila. O job permanece na fila até que os recursos necessários estejam disponíveis e os jobs anteriores sejam avaliados.
  2. Programado (SCHEDULED): o job foi selecionado na fila para começar a ser executado e os recursos estão sendo alocados.
  3. Em execução (RUNNING): os recursos do job foram criados com sucesso e as tarefas podem começar a ser executadas.

    Quando um job está em execução, cada uma das tarefas dele avança pelos seguintes estados:

    1. Pendente (PENDING): a tarefa está aguardando uma VM ser executada.
    2. Atribuída (ASSIGNED): a tarefa recebeu uma VM para execução.
    3. Em execução (RUNNING): a tarefa está sendo executada em uma VM.
    4. Uma tarefa é concluída em um dos seguintes estados:
      • Concluído (SUCCEEDED): a tarefa foi bem-sucedida porque cada um dos executáveis foi bem-sucedido (retornau um código de saída de zero) ou foi marcado como não crítico usando o campo ignorar status de saída (ignoreExitStatus).
      • Com falha (FAILED):a tarefa falhou porque pelo menos um dos executáveis críticos falhou (retornou um código de saída diferente de zero).
  4. Um job é concluído em um dos seguintes estados:

    • Concluído (SUCCEEDED): todas as tarefas do job foram bem-sucedidas.
    • Com falha (FAILED): pelo menos uma tarefa do job falhou.

Para mais informações, consulte estados de jobs e estados de tarefas na documentação de referência.

Programação e enfileiramento de jobs

Geralmente, é mais provável que os jobs sejam executados e concluídos mais cedo se forem menores e exigirem apenas alguns recursos comuns. Para os exemplos de jobs na documentação do Batch, que normalmente são muito pequenos e usam recursos mínimos, eles podem acabar sendo executados em poucos minutos.

Especificamente, o tempo que um job leva para terminar a fila e o agendamento varia de acordo com os jobs e em horários diferentes com base nos seguintes fatores:

  • Disponibilidade de recursos do job: a disponibilidade dos recursos necessários do job nos locais permitidos.

    Primeiro, um job não poderá ser executado se você especificar algum recurso que não esteja disponível nesse local. Quando isso acontece, o job falha com um erro de disponibilidade de zona.

    Segundo, é mais provável que um job seja atrasado ou falhe se algum dos recursos necessários estiver em baixa capacidade em relação à demanda atual devido a erros de disponibilidade de recursos. Como resultado, seu job pode ser executado mais cedo quando você precisar de menos recursos comuns e não restringir a execução dele em nenhuma zona de uma região.

    Para mais informações sobre os recursos de um job, consulte Execução de jobs neste documento. Para mais informações sobre os locais que podem ser especificados para um job do Batch e os recursos relacionados, consulte a página Locais.

  • Prioridade do job: a prioridade de um job em relação às prioridades de outros jobs no projeto.

    Como opção, é possível especificar a prioridade de um job incluindo a sinalização --priority para a CLI gcloud ou o campo JSON priority. É possível definir a prioridade de um job como um número entre 0 (prioridade mais baixa) e 99 (prioridade mais alta). Definir uma prioridade mais alta pode ajudar um job a ser executado antes do que aqueles de prioridade mais baixa no projeto.

    Se você não configurar a prioridade de um job, o padrão será usar a prioridade mais baixa, 0. Se dois jobs na fila tiverem a mesma prioridade, o job criado primeiro terá a prioridade mais alta.

  • Cotas e limites:os limites que seu projeto tem para recursos e solicitações do Google Cloud.

    Um job não poderá ser executado se exceder um limite ou a cota do projeto para qualquer um dos recursos ou solicitações necessários. Quando isso acontece, o Batch pode atrasar um job e tentar novamente mais tarde, ou falhar no job e exibir um erro relacionado.

    Você pode ajudar a evitar atrasos e erros no job criando jobs que obedeçam a todos os limites relevantes e garantindo que o projeto tenha uma cota relevante suficiente. Para mais informações, consulte Cotas e limites de lote.

Execução do trabalho

O tempo que um job leva para ser executado pode variar de acordo com a programação da tarefa e os recursos do job.

Agendamento de tarefas

Quando um job é executado, as tarefas são programadas de acordo com o campo da política de programação (schedulingPolicy), que permite especificar uma das seguintes opções:

  • O mais rápido possível (AS_SOON_AS_POSSIBLE) (padrão): as tarefas são executadas assim que os recursos estão disponíveis e podem ser executadas em paralelo. A quantidade de tarefas executadas de cada vez depende das tarefas paralelas por VM permitidas pelos recursos do job e outras opções de configuração, conforme explicado em Recursos do job neste documento.
  • Em ordem (IN_ORDER): as tarefas são executadas uma por vez, em ordem de índice crescente.

Recursos do job

Cada job do Batch é executado em um grupo gerenciado de instâncias (MIG, na sigla em inglês) regional, que é um grupo de uma ou mais instâncias de máquina virtual (VM) do Compute Engine correspondentes que estão localizadas em uma das zonas incluídas. Cada VM tem hardware dedicado para núcleos de CPU (especificamente CPUs virtuais (vCPUs)) e memória, que afetam o desempenho do job, e um disco de inicialização, que armazena uma imagem de sistema operacional (SO) e instruções para executar seu job.

Durante o ambiente de execução de um job, o Batch cria e exclui automaticamente os recursos que atendem às especificações. Ao criar um job, você configura os recursos especificando o seguinte:

  • Especifique os recursos de computação (vCPUs, memória e armazenamento extra em disco de inicialização) necessários para que cada tarefa seja executada, a menos que os valores padrão sejam suficientes. Para mais informações, consulte o campo Recursos de computação por tarefa (computeResource) e os subcampos.

  • Se preferir, especifique também os tipos de VMs a serem usadas e outros recursos para cada VM, como GPUs e volumes de armazenamento. Se você não especificar essas opções, o Batch selecionará tipos compatíveis de VMs e não adicionará nenhum outro recurso. Para mais informações, consulte o campo Recursos da instância de VM (instances[]) e os subcampos.

O número de VMs e a quantidade de tarefas que podem ser executadas simultaneamente em cada VM variam de acordo com os jobs diferentes com base na programação de tarefas e nos requisitos de hardware especificados. Se você especificar que as tarefas de um job executem IN_ORDER, o job terá uma VM e executará apenas uma tarefa por vez. Caso contrário, se as tarefas de um job executarem AS_SOON_AS_POSSIBLE, será possível estimar o número de VMs e o número de tarefas simultâneas usando a seguinte fórmula:

\[{vmsPerJob}=\frac{taskCount}{parallelTasksPerVm}\]

Esta fórmula tem os seguintes valores:

  • \({vmsPerJob}\): o número máximo de VMs para um job. A quantidade real de VMs criadas para um job pode ser menor que isso. Por exemplo, se o Batch esperar que é mais rápido executar um job em menos recursos do que esperar por mais recursos. Esse valor também é limitado pelos limites de VMs simultâneas por job.
  • \({taskCount}\): o número total de tarefas para o job, que é definido usando o campo de contagem de tarefas (taskCount).
  • \({parallelTasksPerVM}\): o número máximo de tarefas que podem ser executadas em uma VM simultaneamente.

    Esse valor é determinado por todos estes critérios:

    • O valor mínimo é uma tarefa.

    • O valor máximo é o menor entre 20 tarefas e, se definido, o valor do campo máximo de tarefas paralelas por job (parallelism).

    • Se o campo máximo de tarefas paralelas por VM (taskCountPerNode) for definido, esse valor será usado.

      Caso contrário, se taskCountPerNode for indefinido, o Batch decidirá um valor dividindo o número total de recursos de computação (especificamente vCPUs) por VM no valor necessário para cada tarefa:

      \[{parallelTasksPerVm}=\frac{vcpusPerVm}{vcpusPerTask}\]

      Esta fórmula tem os seguintes valores:

      • \({vcpusPerVm}\): o número total de vCPUs por VM, que é determinado pelo tipo de máquina das VMs do job.

      • \({vcpusPerTask}\): o número de vCPUs por tarefa, que é determinado pela conversão das unidades do campo de vCPUs por tarefa (cpuMilli).

Opções de criação de jobs

Criar e executar um job básico explica os fundamentos, incluindo como definir um executável usando um script ou imagem de contêiner e como configurar variáveis de ambiente predefinidas e personalizadas.

Depois de entender os fundamentos da criação de jobs, pense em criar um que use uma ou mais das seguintes opções de configuração extras:

  • Controlar o acesso a um job:

  • Configure mais opções para um job:

    • Configurar a comunicação de tarefas usando uma biblioteca MPI explica como configurar um job com tarefas interdependentes que se comunicam entre diferentes VMs usando uma biblioteca de interface de transmissão de mensagens (MPI, na sigla em inglês). Um caso de uso comum para MPI são as cargas de trabalho de computação de alto desempenho (HPC) com acoplamento rígido.

    • Personalize os recursos em que um job é executado:

      • O artigo Definir recursos do job usando um modelo de instância de VM explica como especificar um modelo de VM do Compute Engine para definir os recursos de um job na criação dele.

      • Usar GPUs para um job explica como definir um job que usa uma ou mais unidades de processamento gráfico (GPUs). Casos de uso comuns para jobs que usam GPUs incluem processamento intensivo de dados ou cargas de trabalho de machine learning (ML).

      • Usar volumes de armazenamento para um job explica como definir um job que pode acessar um ou mais volumes de armazenamento externo. As opções de armazenamento incluem discos permanentes novos ou atuais, novos SSDs locais, buckets atuais do Cloud Storage e um sistema de arquivos de rede (NFS, na sigla em inglês), como um compartilhamento de arquivos do Filestore.

      • A Visão geral do ambiente do SO da VM fornece uma visão geral de quando e como é possível personalizar o ambiente do sistema operacional (SO) de VM para um job, incluindo a imagem do SO da VM do job e os discos de inicialização.

    • Otimizar vários aspectos de um job:

      • Melhore o monitoramento e a análise:

      • Automatizar novas tentativas de tarefa explica como repetir automaticamente as tarefas de um job após todas as falhas ou especificadas. Novas tentativas automatizadas podem ajudar a reduzir o atrito da solução de problemas e o tempo de execução geral necessário para jobs com erros temporários. Por exemplo, use novas tentativas automáticas para um job executado em VMs spot, que fornecem descontos significativos, mas podem nem sempre estar disponíveis e podem ser interrompidos a qualquer momento.

      • O artigo Colocar VMs para reduzir a latência explica como reduzir a latência de rede entre as VMs de um job, exigindo que elas estejam localizadas fisicamente próximas umas das outras. Esse benefício de desempenho pode ser especialmente útil para jobs que têm comunicações de rede frequentes entre VMs, como tarefas que se comunicam usando bibliotecas de MPI.

      • Garantir a disponibilidade de recursos usando reservas de VM, que explica como configurar um job que possa ser executado em VMs reservadas. O uso de VMs reservadas ajuda a minimizar o tempo de agendamento de um job, evitar erros de disponibilidade de recursos e otimizar custos.

      • Usar streaming de imagens explica como melhorar o tempo de inicialização do job fazendo streaming de imagens de contêiner do Artifact Registry.

  • Use serviços adicionais para criar e executar jobs:

A seguir