本文档介绍了如何使用标签来整理您的 Batch。 资源。
标签是应用于资源以进行分组和描述的键值对 。Batch 具有预定义标签,这些标签会自动 以及自定义标签(可在您使用 创建作业的过程。
通过标签,您可以过滤资源列表和 Cloud Billing 的结果 报告。例如,您可以使用标签执行以下操作:
阐明并整理项目的作业列表。
通过使用标签来描述作业的可运行对象, 容器或脚本。
通过过滤所创建的资源的 Cloud Billing 报告来分析费用 批量作业或特定作业。
有关标签的详细信息,另请参阅 关于标签的 Compute Engine 文档
准备工作
- 如果您以前没有使用过 Batch,请参阅 Batch 使用入门 并通过填写 针对项目和用户的前提条件。
-
如需获取创建作业所需的权限, 请让管理员授予您 以下 IAM 角色:
-
Batch Job Editor (
roles/batch.jobsEditor
) 针对项目 -
作业的服务账号(默认为默认的 Compute Engine 服务账号)上的 Service Account User (
roles/iam.serviceAccountUser
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
-
Batch Job Editor (
限制
除了 针对标签的要求 为 Compute Engine 应用标签 批量作业及其资源具有以下限制:
Batch 仅支持已创建的资源的标签 使用 Batch 和以下类型:
求职招聘
可运行对象
作业的图形处理单元 (GPU)(如果有)
作业的虚拟机 (VM) 实例
在考虑预定义标签 批量自动应用于作业时,可以定义 以下数量的自定义标签:
您最多可以定义 63 个自定义标签应用于作业及其 Runnable
您最多可以定义 61 个自定义标签应用于每个 GPU, 永久性磁盘和为该作业创建的虚拟机
批处理仅支持使用具有唯一名称的自定义标签进行定义。这会导致以下结果:
尝试替换预定义标签会导致错误。
如果定义了重复的自定义标签,系统会覆盖现有自定义标签。
Batch 仅支持在创建作业时定义标签。
无法添加、更新或移除作业和可运行对象的标签。
虽然您可以使用 Compute Engine 添加、更新 移除为作业创建的永久性磁盘和虚拟机的标签,这是 不推荐使用。作业资源存在的时间范围不能是 因此这些更改可能无法正确 批处理。
如需使用标签过滤作业列表,您必须 使用 gcloud CLI 或 Batch API 查看作业列表。
预定义的标签
每个预定义标签都有一个以 batch-
前缀开头的键。修改者
默认情况下,Batch 会自动应用以下预定义
标签:
对于您创建的每个作业:
batch-job-id
:此标签的值设置为作业的名称。
对于为作业创建的每个 GPU、永久性磁盘和虚拟机,请执行以下操作:
batch-job-id
:此标签的值设置为作业的名称。batch-job-uid
:此标签的值设置为相应职位的唯一标识符 (UID)。batch-node
:此标签的值为 null,它只将 为作业创建的 GPU、永久性磁盘和虚拟机。例如: 使用此标签 查看 Cloud Billing 报告 确定使用 Cloud Storage 存储分区创建的所有 GPU、永久性磁盘和虚拟机 批处理。
定义自定义标签
您可以选择在创建作业时定义一个或多个自定义标签。您可以 使用新键或项目已在使用的键定义自定义标签。接收者 定义自定义标签,请在此 指定文档:
-
本部分介绍如何将一个或多个自定义标签应用于作业以及如何 为作业创建的每个 GPU、永久性磁盘和虚拟机。创建作业后 可以使用这些标签来过滤 Cloud Billing 报告和 项目的作业、永久性磁盘和虚拟机列表。
-
本部分介绍了如何向作业应用一个或多个自定义标签。更新后 可以使用这些标签来过滤项目的 作业。
-
本部分介绍了如何将一个或多个自定义标签应用于一个或多个 该作业的可运行对象创建作业后,您可以使用这些标签 过滤项目的作业列表。
为作业及其资源定义自定义标签
在
作业分配政策的 labels
字段
还会应用于每个 GPU(如果有)、永久性磁盘(全部
启动磁盘和任何新的存储卷)以及为作业创建的虚拟机。
使用 gcloud CLI 或 Batch API。
gcloud
例如,如需在 us-central1
中创建基本容器作业,该作业定义两个
为作业创建的自定义标签以及为作业创建的资源的
请按以下步骤操作:
创建一个 JSON 文件,用于指定作业的配置详情和
allocationPolicy.labels
字段。{ "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!" ] } } ] } } ] }
替换以下内容:
VM_LABEL_NAME1
:要应用的第一个标签的名称 添加到为该作业创建的虚拟机中。VM_LABEL_VALUE1
:要指定的第一个标签的值 应用于为该作业创建的虚拟机。VM_LABEL_NAME2
:要应用于为作业创建的虚拟机的第二个标签的名称。VM_LABEL_VALUE2
:要设置的第二个标签的值 应用于为该作业创建的虚拟机。
使用
us-central1
gcloud batch jobs submit
命令。gcloud batch jobs submit example-job \ --config=JSON_CONFIGURATION_FILE \ --location=us-central1
将
JSON_CONFIGURATION_FILE
替换为 JSON 文件,其中包含您在上一部分中创建的作业配置详情 操作。
API
例如,如需在 us-central1
中创建基本容器作业,该作业定义两个
为作业创建的自定义标签以及为作业创建的资源的
请POST
向
jobs.create
方法
并指定
allocationPolicy.labels
字段。
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!"
]
}
}
]
}
}
]
}
替换以下内容:
VM_LABEL_NAME1
:要应用到的第一个标签的名称 为作业创建的虚拟机。VM_LABEL_VALUE1
:要应用到的第一个标签的值 为作业创建的虚拟机。VM_LABEL_NAME2
:要应用于为作业创建的虚拟机的第二个标签的名称。VM_LABEL_VALUE2
:要应用于为作业创建的虚拟机的第二个标签的值。
为作业定义自定义标签
作业的 labels
字段中定义的标签
只会应用于相应作业
在创建作业时,您可以使用 gcloud CLI 或 Batch API。
gcloud
例如,如需在 us-central1
中创建一个基本容器作业,并定义两个应用于作业本身的自定义标签,请按以下步骤操作:
创建一个 JSON 文件,用于指定作业的配置详情和
labels
字段。{ "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" } }
替换以下内容:
JOB_LABEL_NAME1
:要指定的第一个标签的名称 都适用于您的工作JOB_LABEL_VALUE1
:要指定的第一个标签的值 都适用于您的工作JOB_LABEL_NAME2
:要复制到的第二个标签的名称 都适用于您的工作JOB_LABEL_VALUE2
:要设置的第二个标签的值 都适用于您的工作
使用
us-central1
gcloud batch jobs submit
命令 替换为以下标志:gcloud batch jobs submit example-job \ --config=JSON_CONFIGURATION_FILE \ --location=us-central1
将
JSON_CONFIGURATION_FILE
替换为 JSON 文件,其中包含您在上一部分中创建的作业配置详情 操作。
API
例如,如需在 us-central1
中创建容器作业,该作业定义两个
自定义标签,请发送 POST
请求至
jobs.create
方法
并指定
labels
字段。
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"
}
}
替换以下内容:
JOB_LABEL_NAME1
:要应用到的第一个标签的名称 工作。JOB_LABEL_VALUE1
:要应用的第一个标签的值 自己的工作JOB_LABEL_NAME2
:要应用到的第二个标签的名称 工作。JOB_LABEL_VALUE2
:要应用的第二个标签的值 自己的工作
为可运行对象定义自定义标签
在
可运行对象的 labels
字段
只会应用于这个可运行对象
使用 gcloud CLI 或 Batch API。
gcloud
例如,如需在 us-central1
中创建定义两个自定义标签的作业,
为两个作业的可运行对象分别创建一个自定义标签,请按以下步骤操作:
创建一个 JSON 文件,用于指定作业的配置详细信息和
runnables.labels
字段。{ "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" } } ] } } ] }
替换以下内容:
RUNNABLE1_LABEL_NAME1
:要应用于作业的第一个可运行项的标签的名称。RUNNABLE1_LABEL_VALUE1
:要 应用于作业的第一个可运行对象。RUNNABLE2_LABEL_NAME1
:要应用的标签的名称 该作业的第二个可运行时间。RUNNABLE2_LABEL_VALUE1
:要 应用于作业的第二个可运行对象。
使用
us-central1
gcloud batch jobs submit
命令。gcloud batch jobs submit example-job \ --config=JSON_CONFIGURATION_FILE \ --location=us-central1
将
JSON_CONFIGURATION_FILE
替换为包含您在上一步中创建的作业配置详细信息的 JSON 文件的路径。
API
例如,如需在 us-central1
中创建定义两个自定义标签的作业,
将 POST
请求发送到
jobs.create
方法
并指定
runnables.labels
字段。
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"
}
}
]
}
}
]
}
替换以下内容:
RUNNABLE1_LABEL_NAME1
:要应用到的标签的名称 第一个作业可运行RUNNABLE1_LABEL_VALUE1
:要应用于第一个作业的可运行项的标签的值。RUNNABLE2_LABEL_NAME1
:要应用到的标签的名称 第二个作业可运行RUNNABLE2_LABEL_VALUE1
:要应用于第二个作业的可运行项的标签的值。
后续步骤
执行以下操作时,将标签用作过滤条件:
了解如何删除作业。