In diesem Dokument wird erläutert, wie Sie Ihre Batch-Ressourcen mit Labels organisieren.
Labels sind Schlüssel/Wert-Paare, die auf Ressourcen angewendet werden, um sie zu gruppieren und zu beschreiben. Batch hat vordefinierte Labels, die automatisch auf Ressourcen angewendet werden, und benutzerdefinierte Labels, die Sie beim Erstellen eines Jobs definieren und anwenden können.
Mit Labels können Sie die Ergebnisse von Ressourcenlisten und Cloud Billing-Berichten filtern. Sie können Labels beispielsweise für Folgendes verwenden:
Die Liste der Jobs in Ihrem Projekt übersichtlicher gestalten und organisieren
Unterscheiden Sie die Runnables eines Jobs, indem Sie Labels verwenden, um den Typ des Containers oder Scripts zu beschreiben, den sie angeben.
Analysieren Sie die Kosten, indem Sie Cloud Billing-Berichte nach den von Batch erstellten Ressourcen oder nach bestimmten Jobs filtern.
Weitere Informationen zu Labels finden Sie auch in der Compute Engine-Dokumentation zu Labels.
Hinweise
- Wenn Sie Batch noch nicht verwendet haben, lesen Sie den Abschnitt Erste Schritte mit Batch und aktivieren Sie Batch, indem Sie die Voraussetzungen für Projekte und Nutzer erfüllen.
-
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Erstellen eines Jobs benötigen:
-
Batch-Job-Editor (
roles/batch.jobsEditor
) für das Projekt -
Dienstkontonutzer (
roles/iam.serviceAccountUser
) für das Dienstkonto des Jobs, das standardmäßig das Compute Engine-Standarddienstkonto ist
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
-
Batch-Job-Editor (
Beschränkungen
Zusätzlich zu den Anforderungen für Labels, die in der Compute Engine-Dokumentation angegeben sind, gelten beim Anwenden von Labels auf einen Batchjob und seine Ressourcen die folgenden Einschränkungen:
Batch unterstützt nur Labels für Ressourcen, die mit Batch erstellt wurden und die folgenden Typen haben:
Jobs
Ausführbare
Grafikprozessoren (GPUs) für einen Job (falls vorhanden)
Nichtflüchtige Speicher (Bootlaufwerke und Speicher-Volumes) für einen Job
VM-Instanzen für einen Job
Nachdem Sie die vordefinierten Labels berücksichtigt haben, die Batch automatisch auf einen Job anwendet, können Sie die folgenden Mengen an benutzerdefinierten Labels definieren:
Sie können maximal 63 benutzerdefinierte Labels definieren, die auf den Job und seine ausführbaren Elemente angewendet werden sollen.
Sie können maximal 61 benutzerdefinierte Labels definieren, die auf jede GPU, jede nichtflüchtige Festplatte und jede VM angewendet werden, die für den Job erstellt wurde.
In Batch können nur benutzerdefinierte Labels mit eindeutigen Namen definiert werden. Das hat folgende Konsequenzen:
Der Versuch, ein vordefiniertes Label zu überschreiben, führt zu Fehlern.
Wenn Sie ein benutzerdefiniertes Label definieren, das bereits vorhanden ist, wird das vorhandene benutzerdefinierte Label überschrieben.
In Batch können Labels nur beim Erstellen eines Jobs definiert werden.
Labels für Jobs und Runnables können nicht hinzugefügt, aktualisiert oder entfernt werden.
Es ist zwar möglich, mit Compute Engine Labels für die nichtflüchtigen Speicher und VMs hinzuzufügen, zu aktualisieren oder zu entfernen, die für Jobs erstellt wurden, dies wird jedoch nicht empfohlen. Der Zeitraum, in dem die Ressourcen für einen Job vorhanden sind, kann nicht zuverlässig geschätzt werden. Änderungen funktionieren möglicherweise nicht richtig mit Batch.
Wenn Sie Labels verwenden möchten, um Ihre Liste von Jobs zu filtern, müssen Sie Ihre Liste von Jobs mit der gcloud CLI oder der Batch API aufrufen.
Vordefinierte Labels
Jedes vordefinierte Label hat einen Schlüssel, der mit dem Präfix batch-
beginnt. Standardmäßig wendet Batch automatisch die folgenden vordefinierten Labels an:
Für jeden Job, den Sie erstellen:
batch-job-id
: Der Wert dieses Labels wird auf den Namen des Jobs festgelegt.
Für jede GPU, jeden nichtflüchtigen Speicher und jede VM, die für einen Job erstellt wird:
batch-job-id
: Der Wert dieses Labels wird auf den Namen des Jobs festgelegt.batch-job-uid
: Der Wert dieses Labels wird auf die eindeutige Kennung (UID) des Jobs festgelegt.batch-node
: Der Wert dieses Labels ist null. Es werden lediglich alle GPUs, persistenten Laufwerke und VMs gruppiert, die für Jobs erstellt werden. Verwenden Sie dieses Label beispielsweise, wenn Sie einen Cloud-Abrechnungsbericht aufrufen, um die Kosten aller GPUs, nichtflüchtigen Speicher und VMs zu ermitteln, die von Batch erstellt wurden.
Benutzerdefinierte Labels definieren
Sie können beim Erstellen eines Jobs optional ein oder mehrere benutzerdefinierte Labels definieren. Sie können benutzerdefinierte Labels mit neuen Schlüsseln oder Schlüsseln definieren, die bereits in Ihrem Projekt verwendet werden. Wenn Sie benutzerdefinierte Labels definieren möchten, wählen Sie je nach Zweck des Labels eine oder mehrere der folgenden Methoden in diesem Dokument aus:
Benutzerdefinierte Labels für den Job und seine Ressourcen definieren
In diesem Abschnitt wird erläutert, wie Sie dem Job und jeder GPU, jedem nichtflüchtigen Speicher und jeder VM, die für den Job erstellt wurden, ein oder mehrere benutzerdefinierte Labels zuweisen. Nachdem Sie den Job erstellt haben, können Sie diese Labels verwenden, um Cloud Billing-Berichte und die Listen der Jobs, Persistent Disks und VMs Ihres Projekts zu filtern.
Benutzerdefinierte Labels für den Job definieren
In diesem Abschnitt wird beschrieben, wie Sie dem Job ein oder mehrere benutzerdefinierte Labels zuweisen. Nachdem Sie den Job erstellt haben, können Sie die Listen der Jobs Ihres Projekts anhand dieser Labels filtern.
Benutzerdefinierte Labels für ausführbare Dateien definieren:
In diesem Abschnitt wird beschrieben, wie Sie einem oder mehreren Runnables für den Job ein oder mehrere benutzerdefinierte Labels zuweisen. Nachdem Sie den Job erstellt haben, können Sie diese Labels verwenden, um die Joblisten Ihres Projekts zu filtern.
Benutzerdefinierte Labels für den Job und seine Ressourcen definieren
Labels, die im Feld labels
für die Zuweisungsrichtlinie eines Jobs definiert sind, werden auf den Job sowie auf jede GPU (falls vorhanden), jeden nichtflüchtigen Speicher (alle Bootlaufwerke und alle neuen Speichervolumes) und jede für den Job erstellte VM angewendet.
Sie können Labels für einen Job und seine Ressourcen definieren, wenn Sie einen Job mit der gcloud CLI oder der Batch API erstellen.
gcloud
Wenn Sie beispielsweise einen einfachen Container-Job in us-central1
erstellen möchten, in dem zwei benutzerdefinierte Labels definiert werden, die für den Job und die für den Job erstellten Ressourcen gelten, gehen Sie so vor:
Erstellen Sie eine JSON-Datei, in der die Konfigurationsdetails des Jobs und das Feld
allocationPolicy.labels
angegeben werden.{ "allocationPolicy": { "instances": [ { "policy": { "machineType": "e2-standard-4" } } ], "labels": { "VM_LABEL_NAME1": "VM_LABEL_VALUE1", "VM_LABEL_NAME2": "VM_LABEL_VALUE2" } }, "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { "imageUri": "gcr.io/google-containers/busybox", "entrypoint": "/bin/sh", "commands": [ "-c", "echo Hello world!" ] } } ] } } ] }
Ersetzen Sie Folgendes:
VM_LABEL_NAME1
: Der Name des ersten Labels, das auf die für den Job erstellten VMs angewendet werden soll.VM_LABEL_VALUE1
: Der Wert des ersten Labels, das auf die für den Job erstellten VMs angewendet werden soll.VM_LABEL_NAME2
: Der Name des zweiten Labels, das auf die für den Job erstellten VMs angewendet werden soll.VM_LABEL_VALUE2
: Der Wert des zweiten Labels, das auf die für den Job erstellten VMs angewendet werden soll.
Erstellen Sie den Job in
us-central1
mit demgcloud batch jobs submit
-Befehl.gcloud batch jobs submit example-job \ --config=JSON_CONFIGURATION_FILE \ --location=us-central1
Ersetzen Sie
JSON_CONFIGURATION_FILE
durch den Pfad zur JSON-Datei mit den Konfigurationsdetails des Jobs, die Sie im vorherigen Schritt erstellt haben.
API
Wenn Sie beispielsweise einen einfachen Containerjob in us-central1
erstellen möchten, der zwei benutzerdefinierte Labels definiert, die auf den Job und die für den Job erstellten Ressourcen angewendet werden, stellen Sie eine POST
-Anfrage an die jobs.create
-Methode und geben Sie das allocationPolicy.labels
-Feld an.
POST https://batch.googleapis.com/v1/projects/example-project/locations/us-central1/jobs?job_id=example-job
{
"allocationPolicy": {
"instances": [
{
"policy": {
"machineType": "e2-standard-4"
}
}
],
"labels": {
"VM_LABEL_NAME1": "VM_LABEL_VALUE1",
"VM_LABEL_NAME2": "VM_LABEL_VALUE2"
}
},
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
"imageUri": "gcr.io/google-containers/busybox",
"entrypoint": "/bin/sh",
"commands": [
"-c",
"echo Hello world!"
]
}
}
]
}
}
]
}
Ersetzen Sie Folgendes:
VM_LABEL_NAME1
: Der Name des ersten Labels, das auf die für den Job erstellten VMs angewendet werden soll.VM_LABEL_VALUE1
: Der Wert des ersten Labels, das auf die für den Job erstellten VMs angewendet werden soll.VM_LABEL_NAME2
: Der Name des zweiten Labels, das auf die für den Job erstellten VMs angewendet werden soll.VM_LABEL_VALUE2
: Der Wert des zweiten Labels, das auf die für den Job erstellten VMs angewendet werden soll.
Java
Node.js
Python
Benutzerdefinierte Labels für den Job definieren
Labels, die im Feld labels
für den Job definiert sind, werden nur auf den Job angewendet.
Sie können Labels für einen Job definieren, wenn Sie einen Job mit der gcloud CLI oder der Batch API erstellen.
gcloud
Wenn Sie beispielsweise einen einfachen Containerjob in us-central1
erstellen möchten, in dem zwei benutzerdefinierte Labels für den Job selbst definiert werden, gehen Sie so vor:
Erstellen Sie eine JSON-Datei, in der die Konfigurationsdetails des Jobs und das Feld
labels
angegeben werden.{ "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { "imageUri": "gcr.io/google-containers/busybox", "entrypoint": "/bin/sh", "commands": [ "-c", "echo Hello World!" ] } } ] } } ], "labels": { "JOB_LABEL_NAME1": "JOB_LABEL_VALUE1", "JOB_LABEL_NAME2": "JOB_LABEL_VALUE2" } }
Ersetzen Sie Folgendes:
JOB_LABEL_NAME1
: Der Name des ersten Labels, das auf Ihren Job angewendet werden soll.JOB_LABEL_VALUE1
: Der Wert des ersten Labels, das auf Ihren Job angewendet werden soll.JOB_LABEL_NAME2
: Der Name des zweiten Labels, das auf Ihren Job angewendet werden soll.JOB_LABEL_VALUE2
: Der Wert des zweiten Labels, das auf Ihren Job angewendet werden soll.
Erstellen Sie den Job in
us-central1
mit demgcloud batch jobs submit
-Befehl und den folgenden Flags:gcloud batch jobs submit example-job \ --config=JSON_CONFIGURATION_FILE \ --location=us-central1
Ersetzen Sie
JSON_CONFIGURATION_FILE
durch den Pfad zur JSON-Datei mit den Konfigurationsdetails des Jobs, die Sie im vorherigen Schritt erstellt haben.
API
Wenn Sie beispielsweise einen Containerjob in us-central1
erstellen möchten, der zwei benutzerdefinierte Labels definiert, die auf die Jobs selbst angewendet werden sollen, senden Sie eine POST
-Anfrage an die Methode jobs.create
und geben Sie das Feld labels
an.
POST https://batch.googleapis.com/v1/projects/example-project/locations/us-central1/jobs?job_id=example-job
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
"imageUri": "gcr.io/google-containers/busybox",
"entrypoint": "/bin/sh",
"commands": [
"-c",
"echo Hello World!"
]
}
}
]
}
}
],
"labels": {
"JOB_LABEL_NAME1": "JOB_LABEL_VALUE1",
"JOB_LABEL_NAME2": "JOB_LABEL_VALUE2"
}
}
Ersetzen Sie Folgendes:
JOB_LABEL_NAME1
: Der Name des ersten Labels, das auf Ihren Job angewendet werden soll.JOB_LABEL_VALUE1
: Der Wert des ersten Labels, das auf Ihren Job angewendet werden soll.JOB_LABEL_NAME2
: Der Name des zweiten Labels, das auf Ihren Job angewendet werden soll.JOB_LABEL_VALUE2
: Der Wert des zweiten Labels, das auf Ihren Job angewendet werden soll.
Java
Node.js
Python
Benutzerdefinierte Labels für ausführbare Dateien definieren
Labels, die im Feld labels
für eine ausführbare Datei definiert sind, werden nur auf diese ausführbare Datei angewendet.
Sie können Labels für ein oder mehrere ausführbare Elemente definieren, wenn Sie einen Job mit der gcloud CLI oder der Batch API erstellen.
gcloud
Wenn Sie beispielsweise einen Job in us-central1
erstellen möchten, der zwei benutzerdefinierte Labels definiert, ein benutzerdefiniertes Label für jedes der beiden Runnables des Jobs, gehen Sie so vor:
Erstellen Sie eine JSON-Datei, in der die Konfigurationsdetails des Jobs und die
runnables.labels
-Felder angegeben sind.{ "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { "imageUri": "gcr.io/google-containers/busybox", "entrypoint": "/bin/sh", "commands": [ "-c", "echo Hello from task ${BATCH_TASK_INDEX}!" ] }, "labels": { "RUNNABLE1_LABEL_NAME1": "RUNNABLE1_LABEL_VALUE1" } }, { "script": { "text": "echo Hello from task ${BATCH_TASK_INDEX}!" }, "labels": { "RUNNABLE2_LABEL_NAME1": "RUNNABLE2_LABEL_VALUE1" } } ] } } ] }
Ersetzen Sie Folgendes:
RUNNABLE1_LABEL_NAME1
: Der Name des Labels, das auf die erste ausführbare Einheit des Jobs angewendet werden soll.RUNNABLE1_LABEL_VALUE1
: Der Wert des Labels, der auf den ersten ausführbaren Teil des Jobs angewendet werden soll.RUNNABLE2_LABEL_NAME1
: Der Name des Labels, das auf das zweite ausführbare Element des Jobs angewendet werden soll.RUNNABLE2_LABEL_VALUE1
: Der Wert des Labels, das auf den zweiten Runnable des Jobs angewendet werden soll.
Erstellen Sie den Job in
us-central1
mit demgcloud batch jobs submit
-Befehl.gcloud batch jobs submit example-job \ --config=JSON_CONFIGURATION_FILE \ --location=us-central1
Ersetzen Sie
JSON_CONFIGURATION_FILE
durch den Pfad zur JSON-Datei mit den Konfigurationsdetails des Jobs, die Sie im vorherigen Schritt erstellt haben.
API
Wenn Sie beispielsweise einen Job in us-central1
erstellen möchten, der zwei benutzerdefinierte Labels definiert, eines für jedes der beiden Runnables des Jobs, stellen Sie eine POST
-Anfrage an die jobs.create
-Methode und geben Sie die runnables.labels
-Felder an.
POST https://batch.googleapis.com/v1/projects/example-project/locations/us-central1/jobs?job_id=example-job
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
"imageUri": "gcr.io/google-containers/busybox",
"entrypoint": "/bin/sh",
"commands": [
"-c",
"echo Hello from ${BATCH_TASK_INDEX}!"
]
},
"labels": {
"RUNNABLE1_LABEL_NAME1": "RUNNABLE1_LABEL_VALUE1"
}
},
{
"script": {
"text": "echo Hello from ${BATCH_TASK_INDEX}!"
},
"labels": {
"RUNNABLE2_LABEL_NAME1": "RUNNABLE2_LABEL_VALUE1"
}
}
]
}
}
]
}
Ersetzen Sie Folgendes:
RUNNABLE1_LABEL_NAME1
: Der Name des Labels, das auf das ausführbare Element des ersten Jobs angewendet werden soll.RUNNABLE1_LABEL_VALUE1
: Der Wert des Labels, das auf die ausführbare Datei des ersten Jobs angewendet werden soll.RUNNABLE2_LABEL_NAME1
: Der Name des Labels, das auf das ausführbare Element des zweiten Jobs angewendet werden soll.RUNNABLE2_LABEL_VALUE1
: Der Wert des Labels, das auf das ausführbare Element des zweiten Jobs angewendet werden soll.
Java
Node.js
Python
Nächste Schritte
Verwenden Sie Labels als Filter, wenn Sie Folgendes tun: