添加标签并过滤资源

本页面介绍如何标记资源,然后使用标签来组织和过滤资源。

标签概览

您可以为 AI Platform Training 作业添加标签,然后在查看或监控资源时使用这些标签对资源进行分类。

例如,您可以按团队(如 engineeringresearch)和开发阶段(prodtest)为作业添加标签,然后根据团队和阶段过滤作业。

此外,操作也可以使用标签,但这些标签来自操作所应用的资源。您无法为操作添加或更新标签。

标签是一个键值对,其中的键和值都是您提供的自定义字符串。

限制和规则:

  • 每个资源最多有 64 个标签。
  • 每个键或值最多含 63 个字符。
  • 键和值可以包含小写字母、数字字符、下划线和短划线。
  • 键必须以字母开头。
  • 允许使用国际字符。

示例:

  • 指示团队或费用中心的标签:team:engineeringteam:research
  • 指示开发阶段的标签:phase:prodphase:test
  • 指示所有者或联系人的标签:owner:aliceowner:bob

在创建资源时添加标签

在创建资源时,您可以使用 gcloud 命令或 Python 应用中的 AI Platform Training and Prediction API 为作业添加标签。您可以选择下面的标签页,以查看添加标签的每种方法的示例:

控制台

您必须先创建资源,然后才能添加标签。请参阅如何添加和更新标签

gcloud

创建新资源时,请指定 labels 字段,以将标签附加到新资源。

以下示例假设您希望使用以下标签:team:engineeringphase:testowner:alice

为方便起见,请设置包含标签的环境变量:

RESOURCE_LABELS="team=engineering,phase=test,owner=alice"

以下代码用于提交带指定标签的训练作业

JOB_NAME="your_job_name"
TRAINER_PACKAGE_PATH="/path/to/your/application/sources"
MAIN_TRAINER_MODULE="trainer.task"
JOB_DIR="gs://your/job/output/path"
TRAIN_DATA="gs://your/training/data/path"
EVAL_DATA="gs://your/eval/data/path"

gcloud ai-platform jobs submit training $JOB_NAME \
        --labels $RESOURCE_LABELS \
        --scale-tier basic \
        --package-path $TRAINER_PACKAGE_PATH \
        --module-name $MAIN_TRAINER_MODULE \
        --job-dir $JOB_DIR \
        --runtime-version 2.11 \
        --region $REGION \
        -- \
        --train-files $TRAIN_DATA \
        --eval-files $EVAL_DATA \
        --train-steps 1000

Python

设置一个字典,其中包含您要创建的资源的字段。将标签添加为字典条目,以将字符串映射到字符串。

以下示例展示了如何创建带有以下三个标签的作业team:engineeringphase:testowner:alice

training_inputs = {'scaleTier': 'BASIC',
    'packageUris': ['gs://your/trainer/path/package-0.0.0.tar.gz'],
    'pythonModule': 'trainer.task'
    'args': ['--arg1', 'value1', '--arg2', 'value2'],
    'region': 'us-central1',
    'labels': {
       'team': 'engineering',
       'phase': 'test',
       'owner': 'alice'
    },
    'jobDir': 'gs://your/training/job/directory',
    'runtimeVersion': '2.11'}

job_spec = {'jobId': your_job_name, 'trainingInput': training_inputs}

发送请求:

request = cloudml.projects().jobs().create(body=job_spec,
      parent=project_id)
response = request.execute()

更新和移除标签

您可以使用 gcloud 命令或在 Python 应用中更新或移除作业模型的标签。无法更新现有模型版本的标签。

选择下面的标签页,查看移除/更新标签的每种方法的示例:

控制台

  1. 打开 Google Cloud 控制台页面,找到您要添加标签的资源:

  2. 选中您要添加标签的资源名称旁边的复选框。

  3. 所有标签修改都在资源名称右侧的面板中进行。

    • 如需添加标签,请输入标签的(也可以根据需要同时输入)。如需添加多个标签,请点击添加标签按钮。

    • 如需移除标签,请将鼠标悬停在标签的右侧,然后点击显示的删除图标。

  4. 修改标签后,点击保存确认更改,或放弃更改重新开始。

gcloud

您可以使用 gcloud 命令更新或删除现有资源的标签。例如,如需调整作业上的标签,请运行 gcloud ai-platform jobs update 命令并添加以下标志:

  • --update-labels 修改现有标签的值并添加新标签。例如,运行以下命令可将 phase 标签的值更改为 production 并添加新的 status 标签:

    gcloud ai-platform jobs update $JOB_NAME \
            --update-labels phase=production,status=deployed
    
  • --clear-labels,用于从作业中移除所有标签。如果您在该命令中添加了 --update-labels 标志,则先应用 clear 命令,然后再执行 update 命令。例如,运行以下命令可移除所有标签并应用新的 foobaz 标签:

    gcloud ai-platform jobs update $JOB_NAME \
            --clear-labels \
            --update-labels foo=bar,baz=qux
    
  • --remove-labels,用于从作业中移除特定标签。如果指定作业上不存在的标签,系统会忽略针对该标签的 remove 命令。例如,运行以下命令可以移除 statusvisibility 标签:

    gcloud ai-platform jobs update $JOB_NAME \
        --remove-labels=status,visibility
    

Python

如需移除或更新现有作业的标签,请执行以下操作:

  • 使用 GET 请求获取作业。
  • 修改 labels 字段。
  • 使用 PATCH 请求更新作业。

以下示例展示了用于更新作业标签的 READ-MODIFY-WRITE 模式:

existingJob = ml.projects().jobs().get(jobId=jobId).execute()
etag = existingJob['etag']

updatedJob = {
    'labels': {
        'phase': 'prod',
        'team': 'research'
    },
    'etag': etag
}

updateJobRequest = ml.projects().jobs().patch(name=jobId,
      body=updatedJob, updateMask='labels,etag')
updatedJob = updateJobRequest.execute()

使用标签过滤资源

在列出资源时,您可以按标签过滤列表。

控制台

  1. 打开 Google Cloud 控制台页面,找到您要过滤的资源:

  2. 点击按前缀过滤字段,该字段位于作业列表上方。选择标签前缀。

  3. 请使用语法“key:value”输入相应的键和值,以完成过滤。例如,“team:engineering”或“owner:alice”。

  4. 过滤器将应用到资源列表,并且过滤器的名称将显示在过滤器字段中。例如,“Labels:owner:alice”或“Labels:team:engineering”。如果需要,您可以添加多个过滤器。

gcloud

以下示例列出了同时带有键值对 team:engineeringowner:alice 标签的所有作业:

gcloud ai-platform jobs list \
        --filter='labels.team:engineering AND labels.owner=alice'

Python

以下示例使用 jobs.list 请求检索带有键值对 team:engineeringowner:alice 标签的所有作业:

request = ml.projects().jobs().list(parent=projectID,
      filter='labels.team=engineering AND labels.owner=alice')
results = request.execute()

后续步骤