Definir o tempo limite da tarefa para jobs

Por padrão, cada tarefa é executada por no máximo 10 minutos: é possível alterar esse tempo para um tempo mais curto ou um tempo mais longo de até 168 horas (7 dias). Para tarefas que usam GPUs, o tempo limite máximo disponível é de 12 horas (pré-lançamento).

Defina o tempo limite da tarefa conforme descrito nesta página. Não há tempo limite explícito na execução de um job: a execução do job é concluída quando todas as tarefas forem concluídas.

As unidades especificam uma duração. Você pode especificar a duração do tempo limite como um valor inteiro em segundos, minutos ou horas. Por exemplo, para definir o tempo limite como 10 minutos e 5 segundos, especifique o valor como 605 segundos.

Se o job tiver novas tentativas ativadas, a configuração de tempo limite será aplicada a cada tentativa de uma tarefa. Se a tentativa da tarefa não for concluída nesse período, ela será interrompida. Quanto mais tempo um job leva para ser executado, maior é a probabilidade de ele encontrar problemas que causem falhas, como falhas de dependência downstream, erros de memória insuficiente ou problemas de infraestrutura. Recomendamos ativar as novas tentativas para todos os jobs, mas especialmente para aqueles com tarefas de longa duração.

Eventos de manutenção

As tarefas que não usam GPUs são migradas em tempo real durante eventos de manutenção. As tarefas que usam GPUs não podem ser migradas em tempo real e são encerradas. Saiba mais.

O processo de migração preserva o estado da tarefa, com uma exceção notável: as conexões de rede VPC de saída são interrompidas durante eventos de manutenção. Recomendamos que você use bibliotecas de cliente capazes de processar redefinições de conexão ocasionais.

O Cloud Run imprime uma mensagem de registro sempre que uma tarefa é iniciada e termina a migração.

Além disso, se você quiser monitorar ou manipular eventos de manutenção de maneira específica, poderá capturar o sinal SIGTSTP, que é enviado 10 segundos antes de uma tarefa ser migrada. Após a migração, a tarefa recebe um sinal SIGCONT imediatamente após a reinicialização.

A amostra em Go a seguir é uma função que captura esses sinais e imprime uma entrada de registro:

func testSignals() {
    sigs := make(chan os.Signal, 1)
    signal.Notify(sigs, syscall.SIGTSTP, syscall.SIGCONT)
    go func() {
        for  {
            sig := <-sigs
            log.Printf("Got Signal: %v", sig)
        }
    }()
 }
 

Jobs de GPU de longa duração

Em alguns casos, como jobs de GPU de longa duração, os eventos de manutenção podem resultar em preempção ou encerramento de instâncias sem migração em tempo real.

Para lidar com esses eventos de maneira adequada, uma opção é capturar o sinal SIGTERM, que o Cloud Run envia 10 segundos antes do encerramento da tarefa, para salvar o progresso gravando pontos de verificação finais e salvando o estado no armazenamento permanente. Consulte Projetar jobs de GPU resilientes de longa duração para mais detalhes.

No entanto, você tem aproximadamente 10 segundos após SIGTERM antes que a tarefa seja encerrada. Esse tempo não é suficiente para gravar um checkpoint de modelo grande. Trate o gerenciador SIGTERM como uma limpeza de melhor esforço apenas de estado pequeno e use o checkpoint periódico como sua proteção principal. Escolha o intervalo de checkpoint com base na quantidade de trabalho que você pode perder.

Como as tarefas de GPU não são migradas em tempo real, uma tarefa configurada com um tempo limite de várias horas pode ser interrompida pelo menos uma vez antes de ser concluída. O tempo limite da tarefa é um limite máximo, não uma garantia de execução ininterrupta.

Funções exigidas

Para receber as permissões necessárias para configurar os jobs do Cloud Run, peça ao administrador para conceder a você os seguintes papéis do IAM:

Para uma lista de papéis e permissões do IAM associados ao Cloud Run, consulte Papéis do IAM do Cloud Run e Permissões do IAM do Cloud Run. Se o job do Cloud Run interagir com APIs doGoogle Cloud , como bibliotecas de cliente do Cloud, consulte o guia de configuração de identidade de serviço. Para mais informações sobre como conceder papéis, consulte permissões de implantação e gerenciar acesso.

Definir tempo limite da tarefa

Para especificar o tempo limite da tarefa para um job do Cloud Run:

Console

  1. No console do Google Cloud , acesse a página do Cloud Run:

    Acessar o Cloud Run

  2. Selecione Jobs no menu de navegação do Cloud Run:

    1. Se você estiver criando um novo job, clique em Implantar contêiner para preencher a página inicial de configurações do job.

    2. Se você estiver configurando um job, clique nele e em Ver e editar a configuração do job.

  3. Clique em Contêineres, conexões, segurança para expandir a página de propriedades do job.

  4. No campo Tempo limite da tarefa, especifique a duração máxima das tarefas do job em job atual e selecione uma Unidade de tempo. Só é possível especificar a duração do tempo limite como um valor inteiro em segundo, minuto ou hora. Por exemplo, para definir uma duração de 10 minutos e 5 segundos, no campo Tempo limite da tarefa, especifique 605 e selecione a Unidade de tempo como segundo.

  5. Clique em Criar ou Atualizar.

gcloud

  1. Para um job que você está criando:

    gcloud run jobs create JOB_NAME --image IMAGE_URL --task-timeout TIMEOUT

    Substituir

    • JOB_NAME pelo nome do job.
    • IMAGE_URL: uma referência à imagem do contêiner, por exemplo, us-docker.pkg.dev/cloudrun/container/job:latest.
    • TIMEOUT com a duração máxima das tarefas do job, especificando a quantidade de tempo e as unidades. Por exemplo, 10m5s é de 10 minutos e 5 segundos.
  2. Para um job que você está atualizando, faça o seguinte:

    gcloud run jobs update JOB_NAME --task-timeout TIMEOUT

YAML

  1. Se você estiver criando um novo serviço, pule esta etapa. Se você estiver atualizando um serviço existente, faça o download da configuração YAML correspondente:

    gcloud run jobs describe JOB --format export > job.yaml
  2. Atualize o atributo timeoutSeconds::

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB
    spec:
      template:
        spec:
          template:
            spec:
              containers:
              - image: IMAGE
              timeoutSeconds: TIMEOUT

    Substitua:

    • JOB_NAME pelo nome do job.
    • IMAGE_URL: uma referência à imagem do contêiner, por exemplo, us-docker.pkg.dev/cloudrun/container/job:latest.
    • TIMEOUT pela duração máxima das tarefas do job; especificando a quantidade de tempo e as unidades. Só é possível especificar o horário como um valor inteiro em segundos, minutos ou horas. Por exemplo, para definir com duração de 10 minutos e 5 segundos, especifique 605.

    Também é possível definir outros detalhes de configurações, como variáveis de ambiente ou limites de memória.

  3. Atualize a configuração do job que já existe:

    gcloud run jobs replace job.yaml

Terraform

Para saber como aplicar ou remover uma configuração do Terraform, consulte Comandos básicos do Terraform.

Adicione o seguinte a um recurso google_cloud_run_v2_job na configuração do Terraform:
resource "google_cloud_run_v2_job" "default" {
  name     = "cloud-run-job-timeout"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    template {
      timeout = "3.500s"

      containers {
        image = "us-docker.pkg.dev/cloudrun/container/job:latest"
      }
    }
  }
}

Ver configurações de tempo limite da tarefa

Para ver as configurações atuais de tempo limite da tarefa do job do Cloud Run, use o console do Google Cloud ou a Google Cloud CLI:

Console

  1. No console do Google Cloud , acesse a página de jobs do Cloud Run:

    Acessar jobs do Cloud Run

  2. Clique no job para abrir a página Detalhes do job.

  3. Clique em Exibir e editar a configuração do job.

  4. Localize a definição do tempo limite da tarefa nos detalhes de configuração.

gcloud

  1. Execute este comando:

    gcloud run jobs describe JOB
  2. Localize a configuração de tempo limite da tarefa na configuração retornada.