本指南介绍了如何使用日历模式下的未来预留功能来优化张量处理单元 (TPU) 配置。日历模式下的未来预留功能是一个内置的日历顾问和 Recommender,可帮助您找到 TPU 容量并提前做好规划。您可以针对特定开始时间和时长(1 到 90 天之间)请求容量,Recommender 会提供建议的日期。
本指南适用于机器学习 (ML) 工程师、平台管理员和运维人员,以及对使用 Kubernetes 容器编排功能运行批量工作负载感兴趣的数据和 AI 专家。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE 用户角色和任务。
如需了解详情,请参阅日历模式下的未来预留简介。
使用场景
日历模式下的未来预留最适合具有预定、短期、高需求请求的工作负载(例如训练)或者批量推理模型,这些模型需要在请求的开始时间具备高可用性。
如果您的工作负载要求根据需要动态预配资源(最多 7 天),而无需长期预留或复杂的配额管理,请考虑使用“灵活启动”使用选项。如需了解详情,请参阅使用灵活启动预配 GPU 和 TPU 简介。
准备工作
在开始之前,请确保您已执行以下任务:
- 启用 Google Kubernetes Engine API。 启用 Google Kubernetes Engine API
- 如果您要使用 Google Cloud CLI 执行此任务,请安装并初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请通过运行
gcloud components update命令来获取最新版本。较早版本的 gcloud CLI 可能不支持运行本文档中的命令。
- 确保您拥有以下任意一项:
- 运行 1.28.3-gke.1098000 版或更高版本的现有 Standard 集群。
- 运行 1.30.3-gke.1451000 版或更高版本的现有 Autopilot 集群。
在日历模式下为 TPU 请求未来预留
在日历模式下请求具有未来预留的 TPU 的流程包括以下步骤:
- 确保您有足够的配额用于创建虚拟机时不属于预留的任何资源,例如磁盘或 IP 地址。日历模式下的未来预留请求不需要 Compute Engine 配额。
- 完成在日历模式下创建请求中所述的步骤。这些步骤包括:
- 查看 TPU 的未来可用性
- 在日历模式下为 TPU 创建并提交未来预留请求。
- 等待 Google Cloud 批准您的请求。
- 创建使用预留的 TPU 节点池。
创建节点池
本部分仅适用于 Standard 集群,因为 Autopilot 模式会根据工作负载自动创建节点。
您可以在创建单主机或多主机 TPU 切片节点池时使用预留。
创建单主机 TPU 切片节点池
您可以使用 Google Cloud CLI 创建单主机 TPU 切片节点池。
gcloud container node-pools create NODE_POOL_NAME \
--location=CONTROL_PLANE_LOCATION \
--cluster=CLUSTER_NAME \
--node-locations=NODE_ZONES \
--machine-type=MACHINE_TYPE \
--reservation-affinity=specific \ This is required
--reservation=RESERVATION
替换以下内容:
NODE_POOL_NAME:新节点池的名称。CONTROL_PLANE_LOCATION:基于您要使用的 TPU 版本的可用区名称。如需确定可用的位置,请参阅 GKE 中的 TPU 可用性。CLUSTER_NAME:集群的名称。NODE_ZONES:GKE 在其中创建节点池的一个或多个可用区的逗号分隔列表。MACHINE_TYPE:用于节点的机器类型。如需详细了解与 TPU 兼容的机器类型,请使用选择 TPU 版本中的表。RESERVATION:要使用的日历预留的名称。
如需查看您可以指定的所有标志的完整列表,请参阅 gcloud container clusters create 参考文档。
创建具有日历预留的节点池后,您可以像部署任何其他 TPU 节点池一样部署工作负载。在日历模式下使用未来预留的方式与使用任何其他类型的预留相同。如需了解详情,请参阅使用预留的可用区级资源。
创建多主机 TPU 切片节点池
创建多主机 TPU 切片节点池的步骤因您使用的是 Ironwood (TPU7x) 还是更早的 TPU 版本而异。Ironwood (TPU7x)
您可以使用 Google Cloud CLI 或 Terraform 在 Ironwood 版本 (TPU7x) 中创建多主机 TPU 切片节点池:
gcloud
如需创建使用 Ironwood (TPU7x) 的多主机 TPU 切片节点池,您必须先创建工作负载政策。
创建工作负载政策:
gcloud compute resource-policies create workload-policy WORKLOAD_POLICY_NAME \ --type=HIGH_THROUGHPUT \ --accelerator-topology=TPU_TOPOLOGY \ --project=PROJECT_ID \ --region=REGION替换以下内容:
WORKLOAD_POLICY_NAME:工作负载政策的名称。TPU_TOPOLOGY:TPU Ironwood (TPU7x) 拓扑。 例如2x2x2。如需查看所有受支持的 Ironwood (TPU7x) 拓扑,请参阅拓扑部分。PROJECT_ID:您的 Google Cloud 项目 ID。REGION:工作负载政策的区域。 工作负载政策是一种区域级资源,可在共享相同拓扑的节点池中重复使用。
使用工作负载政策创建节点池:
gcloud container node-pools create NODE_POOL_NAME \ --cluster=CLUSTER_NAME \ --location=us-central1 \ --node-locations=us-central1-c \ --machine-type=tpu7x-standard-4t \ --reservation-affinity=specific \ --reservation=FUTURE_RESERVATION_NAME \ --placement-policy=WORKLOAD_POLICY替换以下内容:
NODE_POOL_NAME:新节点池的名称。WORKLOAD_POLICY:您创建的工作负载政策的名称。FUTURE_RESERVATION_NAME:未来预留的名称。
此命令会创建一个名为 NODE_POOL_NAME 的节点池,该节点池具有以下特征:
--machine-type=tpu7x-standard-4t指定 Ironwood (TPU7x) 机器类型。
Terraform
- 确保您使用
google提供程序 4.84.0 版或更高版本。 创建工作负载政策:
resource "google_compute_resource_policy" { name = "WORKLOAD_POLICY_NAME" region = CLUSTER_LOCATION workload_policy { type = "HIGH_THROUGHPUT" accelerator_topology = "TPU_TOPOLOGY" } }替换以下内容:
WORKLOAD_POLICY_NAME:工作负载政策的名称。CLUSTER_LOCATION:集群的计算位置。我们建议您使用区域级集群,以提高 Kubernetes 控制平面的可靠性。您还可以使用可用区级集群。如需了解详情,请参阅选择 TPU 版本和拓扑。TPU_TOPOLOGY:TPU Ironwood (TPU7x) 拓扑。 例如2x2x2。如需查看所有受支持的 Ironwood (TPU7x) 拓扑,请参阅规划 TPU。
如需详细了解
google_compute_resource_policy参考,请参阅 Terraform 提供程序。在 Terraform 配置中,添加以下块:
resource "google_container_node_pool" "NODE_POOL_RESOURCE_NAME" { provider = google project = PROJECT_ID cluster = CLUSTER_NAME name = POOL_NAME location = CLUSTER_LOCATION node_locations = [NODE_ZONES] initial_node_count = NUM_NODES autoscaling { max_node_count = MAX_NODES location_policy = "ANY" } node_config { machine_type = MACHINE_TYPE reservation_affinity { consume_reservation_type = "SPECIFIC_RESERVATION" key = "compute.googleapis.com/reservation-name" values = [RESERVATION_LABEL_VALUES] } flex_start = false } placement_policy { policy_name = WORKLOAD_POLICY_NAME } }替换以下内容:
NODE_POOL_RESOURCE_NAME:Terraform 模板中的节点池资源的名称。PROJECT_ID:您的项目 ID。CLUSTER_NAME:要在其中添加节点池的现有集群的名称。POOL_NAME:要创建的节点池的名称。NODE_ZONES:GKE 在其中创建节点池的一个或多个可用区的逗号分隔列表。NUM_NODES:节点池中的节点数。值必须为零或 TPU 芯片数量的乘积除以 4,因为在多主机 TPU 切片中,每个 TPU 切片节点都有 4 个芯片。例如,如果TPU_TOPOLOGY为4x8,则有 32 个芯片,这意味着NUM_NODES必须为 8。如需详细了解 TPU 拓扑,请使用选择 TPU 版本中的表。TPU_TOPOLOGY:这指示所选的 TPU 切片物理拓扑。拓扑格式取决于您使用的 TPU 版本。如需详细了解 TPU 拓扑,请使用选择拓扑中的表。
(可选)您还可以使用以下变量:
RESERVATION_NAME:如果您使用 TPU 预留,请提供创建节点池时要使用的预留资源标签列表。如需详细了解如何填充reservation_affinity字段中的RESERVATION_LABEL_VALUES,请参阅 Terraform 提供程序。autoscaling:创建启用了自动扩缩功能的节点池。当 GKE 扩缩多主机 TPU 切片节点池时,它会以原子方式将节点池从零扩容到大小上限。MAX_NODES:节点池的大小上限。该值必须等于TPU_TOPOLOGY({A}x{B}x{C}) 中定义的值的乘积除以每个虚拟机中的芯片数量。例如,如果TPU_TOPOLOGY为2x2x2,则乘积为 8。由于tpu7x-standard-4t中的每个虚拟机都有 4 个芯片,因此节点数为 2。
spot:将对 TPU 切片节点使用 Spot 虚拟机的节点池。创建节点池后,此设置便无法更改。如需了解详情,请参阅 Spot 虚拟机。flex_start:将使用灵活启动使用选项的节点池。如果启用了spot,则无法将此设置设为true。
其他 TPU 版本
您可以使用 Google Cloud CLI、Terraform 或 Google Cloud 控制台在 v3、v4、v5p、v5e 和 Trillium (v6e) 版本中创建多主机 TPU 切片节点池。
gcloud
gcloud container node-pools create NODE_POOL_NAME \
--cluster=CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--node-locations=NODE_ZONES \
--machine-type=MACHINE_TYPE \
--tpu-topology=TPU_TOPOLOGY \
--reservation-affinity=specific \
--reservation=FUTURE_RESERVATION_NAME
替换以下内容:
NODE_POOL_NAME:新节点池的名称。CLUSTER_NAME:集群的名称。CONTROL_PLANE_LOCATION:基于您要使用的 TPU 版本的可用区名称。如需确定可用的位置,请参阅 GKE 中的 TPU 可用性。NODE_ZONES:GKE 在其中创建节点池的一个或多个可用区的逗号分隔列表。MACHINE_TYPE:用于节点的机器类型。如需详细了解与 TPU 兼容的机器类型,请使用选择 TPU 版本中的表。TPU_TOPOLOGY:TPU 拓扑。 例如2x2x2。如需查看所有受支持的 TPU 拓扑,请参阅拓扑部分。FUTURE_RESERVATION_NAME:未来预留的名称。
Terraform
- 确保您使用
google提供程序 4.84.0 版或更高版本。 将以下块添加到 Terraform 配置中:
resource "google_container_node_pool" "NODE_POOL_RESOURCE_NAME" { provider = google project = PROJECT_ID cluster = CLUSTER_NAME name = POOL_NAME location = CLUSTER_LOCATION node_locations = [NODE_ZONES] initial_node_count = NUM_NODES autoscaling { max_node_count = MAX_NODES location_policy = "ANY" } node_config { machine_type = MACHINE_TYPE reservation_affinity { consume_reservation_type = "SPECIFIC_RESERVATION" key = "compute.googleapis.com/reservation-name" values = [RESERVATION_LABEL_VALUES] } flex_start = false } placement_policy { type = "COMPACT" tpu_topology = TPU_TOPOLOGY } }替换以下内容:
NODE_POOL_RESOURCE_NAME:Terraform 模板中的节点池资源的名称。PROJECT_ID:您的项目 ID。CLUSTER_NAME:要在其中添加节点池的现有集群的名称。POOL_NAME:要创建的节点池的名称。CLUSTER_LOCATION:集群的计算位置。我们建议您使用区域级集群,以提高 Kubernetes 控制平面的可靠性。您还可以使用可用区级集群。如需了解详情,请参阅选择 TPU 版本和拓扑。NODE_ZONES:GKE 在其中创建节点池的一个或多个可用区的逗号分隔列表。NUM_NODES:节点池中的节点数。值必须为零或 TPU 芯片数量的乘积除以 4,因为在多主机 TPU 切片中,每个 TPU 切片节点都有 4 个芯片。例如,如果TPU_TOPOLOGY为4x8,则有 32 个芯片,这意味着NUM_NODES必须为 8。如需详细了解 TPU 拓扑,请使用选择 TPU 版本中的表。TPU_TOPOLOGY:这指示 TPU 切片的物理拓扑。拓扑格式取决于您使用的 TPU 版本。如需详细了解 TPU 拓扑,请使用选择拓扑中的表。
(可选)您还可以使用以下变量:
RESERVATION_NAME:如果您使用 TPU 预留,则这是创建节点池时使用的预留资源的标签列表。如需详细了解如何填充reservation_affinity字段中的RESERVATION_LABEL_VALUES,请参阅 Terraform 提供程序。autoscaling:创建启用了自动扩缩功能的节点池。当 GKE 扩缩多主机 TPU 切片节点池时,它会以原子方式将节点池从零扩容到大小上限。MAX_NODES:节点池的大小上限。该值必须等于TPU_TOPOLOGY({A}x{B}x{C}) 中定义的值的乘积除以每个虚拟机中的芯片数量。
spot:可让节点池对 TPU 切片节点使用 Spot 虚拟机。 创建节点池后,此设置将无法更改。如需了解详情,请参阅 Spot 虚拟机。flex_start:将节点池设置为使用灵活启动使用选项。如果启用了spot,则无法将此属性设置为true。
控制台
如需创建具有 TPU 的节点池,请执行以下操作:
前往 Google Cloud 控制台中的 Google Kubernetes Engine 页面。
在集群列表中,点击您要修改的集群的名称。
点击 add_box 添加节点池。
在节点池详情部分中,勾选指定节点位置复选框。
选择基于您要使用的 TPU 版本的可用区名称。如需确定可用的位置,请参阅 GKE 中的 TPU 可用性。
在导航窗格中,点击节点。
在机器配置部分中,选择 TPU。
在系列下拉菜单中,选择以下选项之一:
- CT3:TPU v3,单主机设备
- CT3P:TPU v3,多主机 Pod 切片
- CT4P:TPU v4
- CT5LP:TPU v5e
- CT5P:TPU v5p
- CT6E:TPU Trillium (v6e)
在机器类型下拉菜单中,选择要用于节点的机器的名称。使用选择 TPU 版本表可了解如何定义用于创建多主机 TPU 切片节点池的机器类型和 TPU 拓扑。
在 TPU 拓扑下拉菜单中,选择 TPU 切片的物理拓扑。
在需要更改对话框中,点击进行更改。
确保启动磁盘类型为标准永久性磁盘或 SSD 永久性磁盘。
(可选)选中在 Spot 虚拟机上启用节点复选框,以对节点池中的节点使用 Spot 虚拟机。
点击创建。
创建具有日历预留的节点池后,您可以像部署任何其他 TPU 节点池一样部署工作负载。在日历模式下使用未来预留的方式与使用任何其他类型的预留相同。如需了解详情,请参阅使用预留的可用区级资源。
后续步骤
试用 GKE 部署示例,了解如何部署使用您预留的 TPU 资源的生成式 AI 模型:
在 GKE AI 实验室中探索利用 GKE 加速 AI/机器学习计划的实验性示例。