Zeitlimit für Aufgaben für Jobs festlegen

Standardmäßig wird jede Aufgabe maximal 10 Minuten lang ausgeführt. Sie können dies auf eine kürzere oder längere Zeit von bis zu 168 Stunden (7 Tage) ändern. Für Aufgaben, die GPUs verwenden, beträgt das maximal verfügbare Zeitlimit 12 Stunden (Vorabversion).

Sie können das Zeitlimit für Aufgaben wie auf dieser Seite beschrieben festlegen. Es gibt kein explizites Zeitlimit für die Ausführung eines Jobs: Wenn alle Aufgaben abgeschlossen sind, ist die Jobausführung abgeschlossen.

Die Einheiten geben eine Dauer an. Sie können die Zeitüberschreitung als Ganzzahlwert in Sekunden, Minuten oder Stunden angeben. Wenn Sie beispielsweise ein Zeitlimit von 10 Minuten und 5 Sekunden festlegen möchten, geben Sie den Wert als 605 Sekunden an.

Wenn für Ihren Job Wiederholungsversuche aktiviert sind, gilt die Zeitlimitseinstellung für jeden Versuch einer Aufgabe. Wenn der Aufgabenversuch nicht innerhalb dieser Zeit abgeschlossen ist, wird er beendet. Je länger ein Job ausgeführt wird, desto wahrscheinlicher ist es, dass Probleme auftreten, die zu einem Fehler führen, z. B. Fehler bei nachgelagerten Abhängigkeiten, Out of Memory-Fehler oder Infrastrukturprobleme. Wir empfehlen, Wiederholungsversuche für alle Jobs zu aktivieren, insbesondere für Jobs mit Aufgaben mit langer Ausführungszeit.

Wartungsereignisse

Aufgaben, die keine GPUs verwenden, werden während Wartungsereignissen live migriert. Aufgaben, die GPUs verwenden, können nicht live migriert werden und werden stattdessen beendet. Weitere Informationen

Der Migrationsprozess behält den Status der Aufgabe bei, mit einer wichtigen Ausnahme: Ausgehende VPC-Netzwerkverbindungen werden während Wartungsereignissen unterbrochen. Wir empfehlen die Verwendung von Clientbibliotheken, bei denen gelegentlich Verbindungen zurückgesetzt werden können, ohne dass es Probleme gibt.

Cloud Run gibt jedes Mal, wenn eine Aufgabe startet und die Migration abschließt, einen Logeintrag aus.

Wenn Sie Wartungsereignisse jedoch auf eine bestimmte Weise überwachen oder verarbeiten möchten, können Sie das Signal SIGTSTP abfangen, das 10 Sekunden vor der Migration einer Aufgabe gesendet wird. Nach der Migration erhält die Aufgabe sofort nach dem Neustart ein SIGCONT-Signal.

Das folgende Go-Beispiel ist eine Funktion, die diese Signale erfasst und einen Logeintrag ausgibt:

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)
        }
    }()
 }
 

Lang andauernde GPU-Jobs

In bestimmten Fällen, z. B. bei lang andauernden GPU-Jobs, können Wartungsereignisse dazu führen, dass Instanzen ohne Live-Migration vorzeitig beendet oder beendet werden.

Eine Möglichkeit, diese Ereignisse ordnungsgemäß zu verarbeiten, besteht darin, das SIGTERM-Signal abzufangen, das Cloud Run 10 Sekunden vor dem Beenden der Aufgabe sendet. So können Sie den Fortschritt speichern, indem Sie endgültige Prüfpunkte schreiben und den Status im nichtflüchtigen Speicher speichern. Weitere Informationen finden Sie unter Ausfallsichere, lang andauernde GPU-Jobs entwerfen.

Beachten Sie jedoch, dass Sie nach SIGTERM etwa 10 Sekunden Zeit haben, bevor die Aufgabe beendet wird. Das ist nicht genug Zeit, um einen großen Modellprüfpunkt zu schreiben. Behandeln Sie den SIGTERM-Handler als Best-Effort-Flush nur für kleine Zustände und verlassen Sie sich auf regelmäßige Prüfpunkte als primären Schutz. Wählen Sie das Prüfpunktintervall danach aus, wie viel Arbeit Sie sich leisten können, zu verlieren.

Da GPU-Aufgaben nicht live migriert werden, ist bei einer Aufgabe, die mit einem mehrstündigen Zeitlimit konfiguriert ist, damit zu rechnen, dass sie mindestens einmal unterbrochen wird, bevor sie abgeschlossen ist. Das Zeitlimit für Aufgaben ist ein Höchstwert und keine Garantie für eine unterbrechungsfreie Ausführung.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zu gewähren, um die zum Konfigurieren von Cloud Run-Jobs erforderlichen Berechtigungen zu erhalten:

Eine Liste der IAM-Rollen und -Berechtigungen im Zusammenhang mit Cloud Run finden Sie unter IAM-Rollen für Cloud Run und IAM-Berechtigungen für Cloud Run. Wenn Ihr Cloud Run-Job mitGoogle Cloud APIs wie Cloud-Clientbibliotheken verknüpft ist, lesen Sie die Konfigurationsanleitung für Dienstidentitäten. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Bereitstellungsberechtigungen und Zugriff verwalten.

Zeitlimit für Aufgaben festlegen

So geben Sie das Aufgabenzeitlimit für einen Cloud Run-Job an:

Console

  1. Rufen Sie in der Google Cloud Console die Seite „Cloud Run“ auf:

    Zu Cloud Run

  2. Wählen Sie im Cloud Run-Navigationsmenü die Option Jobs aus:

    1. Wenn Sie einen neuen Job erstellen, klicken Sie auf Container bereitstellen, um die Seite mit den anfänglichen Jobeinstellungen auszufüllen.

    2. Wenn Sie einen vorhandenen Job konfigurieren, wählen Sie den Job aus und klicken Sie dann auf Jobkonfiguration ansehen und bearbeiten.

  3. Klicken Sie auf Container, Verbindungen, Sicherheit, um die Seite mit den Jobattributen zu maximieren.

  4. Geben Sie im Feld Zeitlimit der Aufgabe die maximale Dauer für die Jobaufgaben im aktuellen Job an und wählen Sie eine Zeiteinheit aus. Sie können die Zeitüberschreitung nur als Ganzzahlwert in Sekunden, Minuten oder Stunden angeben. Wenn Sie beispielsweise eine Dauer von 10 Minuten und 5 Sekunden festlegen möchten, geben Sie im Feld Zeitlimit der Aufgabe den Wert 605 ein und wählen Sie als Zeiteinheit Sekunde aus.

  5. Klicken Sie auf Erstellen oder Aktualisieren.

gcloud

  1. Für einen Job, den Sie erstellen:

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

    Ersetzen

    • JOB_NAME durch den Namen des Jobs.
    • IMAGE_URL: Ein Verweis auf das Container-Image, z. B. us-docker.pkg.dev/cloudrun/container/job:latest.
    • TIMEOUT durch die maximale Dauer für die Jobaufgaben und die Angabe der Zeit und der Einheiten. Beispiel: 10m5s ist zehn Minuten und fünf Sekunden.
  2. Für einen Job, den Sie aktualisieren:

    gcloud run jobs update JOB_NAME --task-timeout TIMEOUT

YAML

  1. Wenn Sie einen neuen Job erstellen, überspringen Sie diesen Schritt. Wenn Sie einen vorhandenen Job aktualisieren, laden Sie die zugehörige YAML-Konfiguration herunter:

    gcloud run jobs describe JOB --format export > job.yaml
  2. Aktualisieren Sie das Attribut timeoutSeconds::

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

    Ersetzen Sie:

    • JOB_NAME durch den Namen des Jobs.
    • IMAGE_URL: Ein Verweis auf das Container-Image, z. B. us-docker.pkg.dev/cloudrun/container/job:latest.
    • TIMEOUT durch die maximale Dauer für die Jobaufgaben und die Angabe der Zeit und der Einheiten. Sie können die Zeit nur als Ganzzahl in Sekunden, Minuten oder Stunden angeben. Wenn Sie beispielsweise eine Dauer von 10 Minuten und 5 Sekunden festlegen möchten, geben Sie 605 an.

    Sie können auch weitere Konfigurationsdetails angeben, z. B. Umgebungsvariablen oder Speicherlimits.

  3. Aktualisieren Sie die vorhandene Jobkonfiguration:

    gcloud run jobs replace job.yaml

Terraform

Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.

Fügen Sie einer google_cloud_run_v2_job-Ressource in Ihrer Terraform-Konfiguration Folgendes hinzu:
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"
      }
    }
  }
}

Einstellungen für Aufgabenzeitlimits ansehen

Verwenden Sie die Google Cloud Console oder die Google Cloud CLI, um die aktuellen Zeitlimiteinstellungen für Aufgaben für Ihren Cloud Run-Job aufzurufen:

Console

  1. Wechseln Sie in der Google Cloud Console zur Seite „Cloud Run-Jobs“:

    Zu Cloud Run-Jobs

  2. Klicken Sie auf den gewünschten Job, um die Seite Jobdetails zu öffnen.

  3. Klicken Sie auf Jobkonfiguration ansehen und bearbeiten.

  4. Suchen Sie in den Konfigurationsdetails nach der Einstellung für das Zeitlimit der Aufgabe.

gcloud

  1. Führen Sie dazu diesen Befehl aus:

    gcloud run jobs describe JOB
  2. Suchen Sie in der zurückgegebenen Konfiguration nach der Zeitlimiteinstellung der Aufgabe.