共享 Cloud TPU 预留

本文档介绍了如何启用预订共享。借助预留共享功能,您可以在一个项目(使用方项目)中创建 TPU 虚拟机,并使用另一个项目(所有者项目)拥有的预留。此外,借助预留共享,您还可以使用 TPU 预留在 Vertex AI 中运行自定义训练作业或预测作业。

所有者项目是您创建预留的项目。使用方项目是指共享预留的一个或多个项目。您可以在所有者项目和使用方项目中使用所有者项目中的预留创建 TPU 虚拟机。

如需详细了解如何获取 TPU 预留,请参阅 Cloud TPU 预留简介

限制

在共享 TPU 预留之前,请考虑以下事项:

  • 您只能通过其所有者项目修改共享预留。

  • 您只能按照以下步骤修改日历模式下的短期预订或长期预订:

    • 您只能在预留开始时间之后修改预留。

    • 您只能修改预留,以允许或禁止 Vertex AI 中的作业使用该预留。

共享 Cloud TPU 预留

以下部分介绍了共享预订的不同方法。

启用 TPU 预留的共享

您可以使用其他项目拥有的预留在使用方项目中创建 TPU 虚拟机。共享 TPU 预留的所有项目都必须属于同一组织

如需启用 TPU 预留共享,请执行以下操作:

  1. 使用 gcloud resource-manager org-policies allow 命令向所有者项目授予创建和修改共享预留的权限:

    gcloud resource-manager org-policies allow \
        compute.sharedReservationsOwnerProjects \
        projects/OWNER_PROJECT_NUMBER --organization=ORGANIZATION_ID

    替换以下内容:

    • OWNER_PROJECT_NUMBER:您组织中允许创建和修改共享预留的项目的编号(而非项目 ID)。
    • ORGANIZATION_ID:贵组织的组织资源 ID
  2. 通过 Google Cloud 控制台启用 CUD 共享。如需了解相关说明,请参阅为基于资源的承诺启用 CUD 共享

  3. 如需启用共享功能,请将 gcloud beta compute reservations update 命令--share-setting=projects--share-with 标志结合使用:

    gcloud beta compute reservations update RESERVATION_NAME \
        --project=OWNER_PROJECT_ID \
        --share-setting=projects \
        --share-with=CONSUMER_PROJECT_IDS \
        --zone=ZONE

    替换以下内容:

    • RESERVATION_NAME:预订的名称。
    • OWNER_PROJECT_ID:包含预留的项目的 ID。
    • CONSUMER_PROJECT_IDS:可以使用此预留的项目的 ID 的英文逗号分隔列表。例如 project-1,project-2。您最多可以添加 100 个使用方项目。 这些项目必须与所有者项目位于同一组织中。请勿包含所有者项目。默认情况下,已允许所有者项目使用该预留。
    • ZONE:预留所在的可用区。

停用 TPU 预留的共享

如需停用与使用方项目列表共享 TPU 预留,请将 gcloud beta compute reservations update 命令--share-setting=projects--remove-share-with 标志结合使用:

gcloud compute reservations update RESERVATION_NAME \
    --project=OWNER_PROJECT_ID \
    --share-setting=projects \
    --remove-share-with=CONSUMER_PROJECT_IDS \
    --zone=ZONE

替换以下内容:

  • RESERVATION_NAME:预订的名称。
  • OWNER_PROJECT_ID:包含预留的项目的 ID。
  • CONSUMER_PROJECT_IDS:您希望不再与之共享预留的项目的 ID 列表(以英文逗号分隔)。例如 project-1,project-2
  • ZONE:预留所在的可用区。

如需停用与所有使用方项目共享 TPU 预留,请使用带有 --share-setting=local 标志的 gcloud beta compute reservations update 命令将预留更改为本地预留:

gcloud beta compute reservations update RESERVATION_NAME \
    --project=OWNER_PROJECT_ID \
    --share-setting=local \
    --zone=ZONE

替换以下内容:

  • RESERVATION_NAME:预订的名称。
  • OWNER_PROJECT_ID:包含预留的项目的 ID。
  • ZONE:预留所在的可用区。

允许 Vertex AI 使用 TPU 预留

您可以允许 Vertex AI 中的训练作业预测作业在日历模式下使用短期预留,或者仅在长期预留的开始时间之后使用长期预留。

如需允许 Vertex AI 使用 TPU 预留,请将 gcloud beta compute reservations update 命令--reservation-sharing-policy=ALLOW_ALL 标志结合使用:

gcloud beta compute reservations update RESERVATION_NAME \
    --project=OWNER_PROJECT_ID \
    --zone=ZONE \
    --reservation-sharing-policy=ALLOW_ALL

替换以下内容:

  • RESERVATION_NAME:预订的名称。
  • OWNER_PROJECT_ID:包含预留的项目的 ID。
  • ZONE:预留的可用区。

禁止 Vertex AI 使用 TPU 预留

在禁止 Vertex AI 使用 TPU 预留之前,请停止使用该预留的所有 Vertex AI 作业。否则,您会遇到错误。

如需禁止 Vertex AI 使用 TPU 预留,请将 gcloud beta compute reservations update 命令与 --reservation-sharing-policy=DISALLOW_ALL 标志结合使用:

gcloud beta compute reservations update RESERVATION_NAME \
    --project=OWNER_PROJECT_ID \
    --zone=ZONE \
    --reservation-sharing-policy=DISALLOW_ALL

替换以下内容:

  • RESERVATION_NAME:预订的名称。
  • OWNER_PROJECT_ID:包含预留的项目的 ID。
  • ZONE:预留的可用区。

获取共享预留的相关信息

您只能通过其所有者项目获取共享预留的相关信息。

如需获取共享预留的相关信息,请使用 gcloud compute reservations describe 命令

gcloud compute reservations describe RESERVATION_NAME \
    --project=OWNER_PROJECT_ID \
    --zone=ZONE

替换以下内容:

  • RESERVATION_NAME:预订的名称。
  • OWNER_PROJECT_ID:包含预留的项目的 ID。
  • ZONE:预留的可用区。

响应类似于以下示例:

aggregateReservation:
[...]
name: RESERVATION_NAME
reservationSharingPolicy:
  serviceShareType: ALLOW_ALL
resourceStatus: {}
selfLink: https://www.googleapis.com/compute/v1/projects/OWNER_PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME
shareSettings:
  projectMap:
    'CONSUMER_PROJECT_1':
      projectId: 'CONSUMER_PROJECT_1'
    'CONSUMER_PROJECT_2':
      projectId: 'CONSUMER_PROJECT_2'
  shareType: SPECIFIC_PROJECTS
specificReservationRequired: true
status: READY
zone: https://www.googleapis.com/compute/v1/projects/OWNER_PROJECT_ID/zones/ZONE

后续步骤