使用 Gemini 在 GKE 上设计资源可获取性

本文档介绍了如何设计弹性 Google Kubernetes Engine (GKE) 集群和工作负载调度策略,以帮助您获取 GPU、TPU 和高性能 CPU 等资源。通过在Cloud de Confiance by S3NS 和 Compute Advisor(预览版)中使用 Gemini,您可以防止 Pod 处于待处理状态,并提高 AI 工作负载的可靠调度。

本文档适用于管理 GKE 基础架构并希望优化容量规划和调度的云架构师、平台管理员和运维人员。

GKE 上的资源可获取性概览

Kubernetes 调度依赖于声明的资源请求。在调度 GPU 或 TPU 等大规模加速器时,严格的资源请求可能会导致集群在特定硬件不可用时无法扩容。您可以使用以下功能优化 GKE 上的容量可用性:

  • 节点池自动创建:动态创建多代节点池。
  • 工作负载级回退:配置为接受替代硬件的容忍和节点选择器。
  • 地理位置和区域调度:GKE 多可用区和多区域功能。
  • 预留管理:在请求按需资源之前,先使用预先购买的容量。

GKE 上资源可获取性的最佳实践

本部分提供了一些建议,可帮助您在 GKE 上调度工作负载时提高容量可用性。这些最佳实践涵盖了多种策略,例如设计灵活的硬件要求、配置节点池自动创建,以及利用地理分布来适应资源限制。节点池自动创建功能可根据 Pod 规范自动管理节点池。您可以在 Pod 清单中指定资源要求,让 GKE 动态创建节点,而无需预先定义节点池。

您还可以使用 Compute Advisor 发现并实施以下最佳实践。如需了解详情,请参阅使用 Compute Advisor

硬件灵活性选项

为了优化容量可用性,您可以指示 GKE 避免将工作负载绑定到单个静态机器家族或加速器类型。以下示例展示了如何为不同的工作负载类别配置灵活的节点池和 Pod 亲和性规则。您选择的具体替代方案取决于应用的资源需求:

  • 通用 CPU 节点池:

    • 主要示例:N2(基于 Intel 的通用型)。
    • 替代方案示例:N2D (AMD EPYC)、C2 或 C2D(计算优化型)或 E2(费用优化型)。
    • 实现模式:配置具有节点亲和性或容忍度的 Pod 规范,以允许跨多个机器系列标签(例如 ["n2", "n2d", "c2d"] 中的 cloud.google.com/machine-family)进行调度。借助此配置,GKE 可以预配具有可用容量的任何池。
  • GPU 节点池:

    • 主要示例:A2 系列(NVIDIA A100 GPU)。
    • 替代方案示例:L4(通用 AI/ML)或 T4(推理)。
    • 实现模式:为不同的 GPU 层级配置单独的节点池或 ComputeClass。对于无需使用 A100 特定功能即可运行的工作负载,如果 A2 预配受到限制,则允许 Pod 回退到 L4 或 T4 池。
  • TPU 节点池:

    • 主要示例:TPU Ironwood (TPU7x)。
    • 替代方案示例:TPU v6 (Trillium) 或 TPU v5(v5e 或 v5p)。
    • 实现模式:TPU 切片预配可能会受到高度限制。设计具有框架级灵活性的训练工作负载(例如,支持可变切片拓扑的 JAX 或 PyTorch 配置),以便在 TPU Ironwood (TPU7x) 容量不可用时部署在 v6 或 v5 切片上。

下表总结了不同类型工作负载的主要选择和硬件替代方案:

工作负载类型 主要选择示例 替代方案示例 架构注意事项
系统或核心工作负载 N2 N2D、C2D、E2 跨越 Intel 和 AMD 硬件池,用于节点池自动创建。
GPU 推理和处理 A2 (A100) L4、T4 灵活地定位到低成本或高可用性的 GPU 节点池。
TPU 模型训练 TPU Ironwood (TPU7x) TPU v6、TPU v5(v5e 或 v5p) 利用灵活的拓扑进行基于切片的调度。

实现节点池自动创建和 ComputeClass

如需优化容量可用性,请将节点池自动创建与 ComputeClasses 结合使用。以下列表包含最佳实践:

  • 定义 ComputeClass:创建 ComputeClass 资源,以指定机器系列、GPU 类型或预配模型的优先顺序列表。GKE 会尝试使用类中可用的最高优先级配置来预配节点。优先级的后备列表可显著帮助您获取工作负载所需的资源。例如,为了防止 GKE 在首选专用加速器不可用时回退到通用机器,请将 whenUnsatisfiable: DoNotScaleUp 设置添加到 ComputeClass 配置中。如需了解详情,请参阅使用自定义 ComputeClass 控制自动扩缩的节点属性

  • 在 Pod 规范中引用 ComputeClass:在工作负载 Pod 规范中,使用 cloud.google.com/compute-class 标签来定位自定义 ComputeClass,而不是特定的机器系列或 GPU 类型。如需了解详情,请参阅在工作负载中请求 ComputeClass

  • 定义多个容忍度:如果您不使用 ComputeClass,请在 Pod 规范中使用允许一系列机器家族(例如 ["n2", "n2d"] 中的 cloud.google.com/machine-family)的节点亲和性规则。如需了解详情,请参阅配置节点池自动创建

GKE 上的地理位置和多区域灵活性

如需提高容量可用性,请部署跨多个可用区的 GKE 集群,或运行多集群架构:

  • 多可用区集群:确保节点池配置为在区域中的所有可用区内自动扩缩。

  • 多区域集群联邦:对于大型异步作业(例如离线批处理推理或分布式训练),请部署多集群编排器(例如 Kueue 或 Cluster Director),以全局方式将工作负载排入队列,并将其调度到具有可用容量的区域。

  • 在 Spot 虚拟机上运行的 Pod:通过添加容忍设置并指示 GKE 在不同可用区中分配过剩容量,在 Spot 虚拟机上运行可中断的工作负载。

有关 GKE 可获得性的其他最佳实践

除了实现硬件多样化之外,还可以采用以下 GKE 最佳实践来优化集群伸缩缩成功率:

  • 实现 Pod 过量预配(容量缓冲区):部署低优先级的“暂停”Pod,以提前预留节点容量。当提交高优先级的 AI 工作负载且区域容量受限时,Kubernetes 会立即抢占暂停的 Pod,从而使容器能够启动,而无需等待新节点预配。如需了解详情,请参阅容量缓冲简介
  • 使用灵活启动(带已排队的预配):对于大型批处理和 AI 模型训练作业,请使用灵活启动(带已排队的预配),该功能与 Kueue 和动态工作负载调度器集成。 灵活启动(带已排队的预配)可实现全有或全无的原子节点分配,从而防止部分集群扩缩失败。如需了解详情,请参阅通过灵活启动(带排队配置)运行大规模工作负载
  • 启用映像流式传输和容器映像预加载:对于大型 AI 容器映像(例如超过 10 GB 的 PyTorch 或 TensorFlow 映像),请启用 GKE 映像流式传输或使用辅助启动磁盘进行映像预加载。此配置可缩短节点预热时间,使新预配的节点能够在几秒钟内开始运行工作负载。如需了解详情,请参阅使用映像流式传输拉取容器映像使用辅助启动磁盘预加载数据或容器映像
  • 将集群自动扩缩器的位置政策设置为 ANY:使用 ANY 位置政策配置节点池(尤其是 Spot 虚拟机或灵活启动节点池)。此设置指示集群自动扩缩器在所有指定可用区中搜索请求的容量。集群自动扩缩器通过平衡节点数量来寻找容量。如需了解详情,请参阅集群自动扩缩器概览
  • 通过 GPU 共享优化加速器利用率:对于不需要专用 GPU 的工作负载,请使用 GPU 分时、多实例 GPU (MIG) 或 NVIDIA MPS,以允许多个容器共享单个加速器。此方法可优化各节点池的有效容量。 如需了解详情,请参阅 GKE 中的 GPU 共享策略简介

使用 Compute Advisor

Compute Advisor 是Cloud de Confiance 控制台中依托 AI 技术的界面,由 Gemini 提供支持,可帮助您为 GKE 设计弹性好且经济高效的架构。

Compute Advisor 会在部署前验证组织的政策和资源配额,同时为灵活启动虚拟机和 Spot 虚拟机提供近乎实时的可用性指导。对于需要按需资源的工作负载,Compute Advisor 不提供可用性指南。

如需在 Cloud de Confiance 控制台中访问 Gemini,请完成以下步骤:

  1. 在 Cloud de Confiance 控制台中,前往概览页面。

    转到“概览”页面

  2. 使用 Compute Advisor 设计基础架构部分中,提交提示。Gemini 开始生成回答。

  3. 如需生成架构建议,请在 Compute Advisor 中运行以下示例提示之一。当您点击 Run prompt in Compute Advisor 按钮时, Cloud de Confiance 控制台可能需要 15 秒以上的时间才能加载:

  • 常规加速器策略

    使用场景:使用此提示分析区域容量信号,并在设计集群配置时接收有关机器类型、可用区和回退调度策略的建议。

    Configure a GKE cluster to improve chances of obtaining scarce GPU or TPU capacity.
    

    在 Compute Advisor 中运行提示

  • 地理位置灵活性和回退

    使用场景:在设计多集群架构或全局作业排队系统(例如使用 Kueue)时,使用此提示可根据资源可用性在不同区域之间转移工作负载执行。

    Configure multi-region fallbacks and geographic scheduling on GKE to increase GPU availability.
    

    在 Compute Advisor 中运行提示

  • 优先预留使用情况

    使用情形:使用此提示生成 YAML 配置模式,用于设置优先考虑预留容量的 Pod 亲和性和自动扩缩规则。

    Configure GKE autoscaling rules and Pod specs to prioritize consuming active reservations before scaling into on-demand pools.
    

    在 Compute Advisor 中运行提示

  • 用于回退优先级排序的 ComputeClass

    使用情形:使用此提示可生成 ComputeClass CustomResourceDefinition 的 YAML 清单,该清单优先使用高性能 GPU,但包含较低层级的回退,以确保工作负载调度。

    Define a ComputeClass manifest for GKE to prioritize A2 GPU nodes with automatic fallbacks to L4 or T4 GPUs.
    

    在 Compute Advisor 中运行提示

  • 节点池自动创建(用于多样化)

    使用场景:使用此提示为 GKE 集群自动扩缩器资源限制和 Pod 亲和性规则编写 YAML 清单,以使 NAP 能够自动预配替代 GPU 或 CPU 节点。

    Configure GKE node pool auto-creation to diversify machine families and prevent pending pods when regional accelerator capacity is constrained.
    

    在 Compute Advisor 中运行提示

后续步骤