使用灵活启动预配模式消耗 GPU、TPU 和 H4D 简介

本页面介绍了 Google Kubernetes Engine (GKE) 中的灵活启动。灵活启动由动态工作负载调度器提供支持,是一种灵活且经济高效的技术,可让您在需要运行 AI/机器学习工作负载时使用 GPU 或 TPU 等专用计算资源。

借助灵活启动,您可以根据需要动态预配 GPU、TPU 和 H4D 机器系列的灵活启动虚拟机,最长可预配 7 天,不受特定启动时间的限制,也无需管理长期预留。因此,灵活启动非常适合需求要求波动或时长较短的小型到中型工作负载。例如,小型模型预训练、模型微调或可扩缩的部署模型。

本页面上的信息可帮助您实现以下各项:

  • 了解 GKE 中灵活启动的运作方式。
  • 确定灵活启动是否适合您的工作负载。
  • 确定哪种灵活启动配置适合您的工作负载。
  • 使用灵活启动虚拟机时管理中断情况。
  • 了解 GKE 中灵活启动虚拟机的限制。

本页面适用于希望优化加速器基础设施以适应工作负载的平台管理员和运维人员以及机器学习 (ML) 工程师

何时使用灵活启动

如果您的工作负载满足以下所有条件,我们建议您使用灵活启动:

  • 您的工作负载需要 GPU 资源。
  • 您的工作负载需要可在单主机 TPU 切片节点池中运行的 TPU 资源。
  • 您的工作负载需要其他专用硬件,例如经过 HPC 优化的 H4D 机器系列。
  • 您的预留 GPU 或 TPU 容量有限或完全没有,并且您需要更可靠地访问这些加速器。
  • 您的工作负载在时间上非常灵活,您的用例可以承受等待获取所有请求的容量,例如,GKE 在最繁忙时段以外分配 GPU 资源时。

灵活启动价格

如果您的工作负载需要根据需要动态配置资源(最多 7 天,短期预留)、无需复杂的配额管理且可经济高效地访问,建议使用灵活启动。 灵活启动由动态工作负载调度器提供支持,并按照动态工作负载调度器价格计费:

  • vCPU、GPU 和 TPU 可享受折扣(最高 53%)。
  • 随用随付。

要求

如需在 GKE 中使用灵活启动,您的集群必须满足以下要求:

  • 如需运行 GPU,请使用 GKE 1.32.2-gke.1652000 版或更高版本。
  • 如需运行 TPU,请参阅规划 GKE 中的 TPU 中的 GKE 版本要求。灵活启动支持以下版本和可用区:

    • us-central1-c 中的 Ironwood (TPU7x)。
    • asia-northeast1-bus-east5-aus-east5-b 中的 TPU Trillium (v6e)。
    • us-west4-a 中的 TPU v5e。
    • us-east5-a 中的 TPU v5p。

    不支持 TPU v3 和 v4。

灵活启动预配模式的运作方式

借助灵活启动,您可以在工作负载中指定所需的计算容量(例如 GPU 或 TPU)。此外,对于 Standard 集群,您可以在特定节点池上配置灵活启动。当容量可用时,GKE 会通过完成以下流程来自动预配灵活启动虚拟机:

  1. 工作负载请求无法立即使用的容量。此请求可直接通过工作负载规范提出,也可通过编排工具(例如自定义计算类Kueue)提出。
  2. GKE 会识别您的节点已启用灵活启动,并且工作负载可以等待一段不确定的时间。
  3. 集群自动扩缩器接受您的请求并计算所需的节点数,将它们视为一个单元。
  4. 集群自动扩缩器会在必要的节点可用时预配这些节点。这些节点最多运行 7 天,如果您在 maxRunDurationSeconds 参数中指定了值,则运行时长会更短。如果您未为 maxRunDurationSeconds 参数指定值,则默认值为 7 天。
  5. maxRunDurationSeconds 参数中定义的运行时间结束时,节点和 Pod 会被抢占
  6. 如果 Pod 提前完成,并且节点不再使用,则集群自动扩缩器会根据自动扩缩配置文件移除这些节点。

GKE 会在节点级计算每个灵活启动请求的时长。由于启动期间的延迟,可用于运行 Pod 的时间可能略短。Pod 重试共享此时长,这意味着重试后可供 Pod 使用的时间更少。GKE 会单独计算每个灵活启动请求的时长。

灵活启动配置

GKE 支持以下灵活启动配置:

  • 灵活启动,其中 GKE 逐个节点地分配资源。此配置仅要求您在创建节点期间设置 --flex-start 标志。
  • 灵活启动(带已排队的预配),其中 GKE 会同时分配所有请求的资源。如需使用此配置,您必须在创建节点池时添加 --flex-startenable-queued-provisioning 标志。GKE 遵循本文档中灵活启动预配模式的运作方式中所述的流程,但也会应用以下条件:

    • 调度器会等待单个可用区中的所有请求资源都可用。
    • 工作负载的所有 Pod 都可以在新预配的节点上一起运行。
    • 预配的节点不会在工作负载执行之间重复使用。

下表比较了灵活启动配置:

灵活启动 灵活启动(带已排队的预配)
可用性 预览

正式版 (GA)

注意:灵活启动在预览版中支持 flex-startenable-queued-provisioning 标志。
支持的加速器
建议的工作负载大小 小型到中型,这意味着工作负载可以在单个节点上运行。例如,如果您运行的是小型训练作业、离线推理或批量作业,此配置非常适合。 中型到大型,这意味着工作负载可以在多个节点上运行。您的工作负载需要多个资源,并且在所有节点同时预配并准备就绪之前,无法开始运行。例如,如果您运行分布式机器学习训练工作负载,则此配置非常适用。
预配类型 当资源可用时,GKE 会一次预配一个节点。对于 TPU,GKE 在单主机 TPU 切片节点池中一次创建一个节点,而在多主机 TPU 切片节点池中一次创建整个切片。 GKE 会同时分配所有请求的资源。
设置复杂性 更简单。此配置与按需虚拟机和 Spot 虚拟机类似。 更复杂。我们强烈建议您使用配额管理工具,例如 Kueue
支持自定义计算类
节点回收
价格 灵活启动 SKU 灵活启动 SKU
配额
节点升级策略 短期升级 短期升级
gcloud container node pool create 标志 --flex-start
  • --flex-start
  • --enable-queued-provisioning
开始学习 GPU: TPU: 通过灵活启动(带已排队的预配)运行大规模工作负载

优化灵活启动配置

如需创建稳健且经济高效的 AI/机器学习基础设施,您可以将灵活启动配置与可用的 GKE 功能相结合。我们建议您使用计算类,根据您的工作负载要求定义节点配置的优先级列表。GKE 将根据可用性和您定义的优先级选择最合适的配置。

管理使用动态工作负载调度器的工作负载中的中断情况

需要节点池中所有节点或大多数节点可用的工作负载对逐出很敏感。此外,通过使用动态工作负载调度器请求预配的节点不支持自动修复。自动修复会从节点中移除所有工作负载,从而阻止它们运行。

当集群控制平面运行灵活启动虚拟机的最低版本(1.32.2-gke.1652000 或更高版本)时,使用灵活启动、已排队的预配或同时使用这两种预配方式的所有节点都将使用短期升级

短期升级会更新 Standard 节点池或 Autopilot 集群中的一组节点,而不会中断正在运行的节点。系统会使用新配置创建新节点,并随着时间的推移逐步替换使用旧配置的现有节点。不支持灵活启动或短期升级的早期 GKE 版本需要遵循不同的最佳实践。

最大限度减少使用短期升级的节点的工作负载中断的最佳实践

当集群运行 1.32.2-gke.1652000 版或更高版本时,使用灵活启动虚拟机的节点和使用已排队的预配的节点会自动配置为使用短期升级。

为了尽量减少对使用短期升级的节点上运行的工作负载的中断,请执行以下任务:

对于运行低于 1.32.2-gke.1652000 版本的集群中的节点(因此不使用短期升级),请参阅针对这些节点的具体指导。

最佳实践:最大限度减少已排队的预配节点(无短期升级)的工作负载中断

在运行低于 1.32.2-gke.1652000 的 GKE 版本的集群上使用已排队的预配的节点不会使用短期升级。升级到 1.32.2-gke.1652000 或更高版本且具有现有已排队的预配节点的集群会自动更新为使用短期升级。

对于运行这些早期版本的节点,请参阅以下指导:

  • 根据集群的发布渠道注册,请遵循以下最佳实践,以防止节点自动升级中断工作负载:
    • 如果您的集群已在发布渠道中注册,请使用维护窗口和排除项,以防止 GKE 在工作负载运行时自动升级节点。
    • 如果您的集群未在发布渠道中注册,请停用节点自动升级。不过,我们建议您使用发布渠道,这样您就可以使用范围更精细的维护排除项。
  • 停用节点自动修复功能
  • 使用维护窗口和排除项来最大限度地减少对正在运行的工作负载的中断,同时确保 GKE 仍有时间进行自动维护。请务必安排在没有工作负载运行时进行。
  • 为确保您的节点池保持最新状态,请在没有活跃的动态工作负载调度器请求且节点池为空时手动升级节点池

集群迁移到短期升级时的注意事项

当集群升级到 1.32.2-gke.1652000 版或更高版本时,GKE 会使用已排队的预配来更新现有节点,以使用短期升级。GKE 不会更新其他设置,例如,如果您为特定节点池停用了节点自动升级,则不会启用该功能。

现在您的节点池使用短期升级,我们建议您考虑实施以下最佳实践:

  • 如果您使用 --no-enable-autoupgrade 标志停用了节点自动升级,则此迁移不会为节点池重新启用节点自动升级。我们建议您启用节点自动升级,因为短期升级不会对现有节点及其上运行的工作负载造成中断。如需了解详情,请参阅短期升级
  • 我们还建议,如果您的集群尚未在发布渠道中注册,请注册您的集群,以便您可以使用更精细的维护排除范围。

灵活启动中的节点回收

为了帮助确保节点顺利过渡并防止正在运行的作业出现停机情况,灵活启动支持节点回收。当节点达到其使用期限时,GKE 会自动将该节点替换为新节点,以保留正在运行的工作负载。

如需使用节点回收,您必须创建自定义计算类配置文件,并在 flexStart 规范中添加 nodeRecycling 字段以及 leadTimeSeconds 参数。

借助 leadTimeSeconds 参数,您可以兼顾资源可用性和成本效益。此参数用于指定在节点达到七天使用期限之前多长时间(以秒为单位)开始新的节点预配流程来替换该节点。较长的准备时间可提高新节点在旧节点移除之前准备就绪的概率,但可能会产生额外费用。

节点回收流程包括以下步骤:

  1. 回收阶段:GKE 验证灵活启动预配的节点是否具有 nodeRecycling 字段,且该字段是否设置了 leadTimeSeconds 参数。如果满足上述条件,GKE 会在当前日期大于或等于以下字段的值之差时开始节点回收阶段:

    • creationTimestamp + maxRunDurationSeconds
    • leadTimeSeconds

    creationTimeStamp 标志包含节点的创建时间。 maxRunDurationSeconds 字段可在自定义计算类中指定,默认值为 7 天。

  2. 节点创建:新节点的创建过程开始,并依次经历排队和预配阶段。排队阶段的时长可能会根据可用区和特定加速器容量而动态变化。

  3. 封锁即将达到七天期限的节点:在新节点运行后,旧节点会封锁。此操作可防止在该节点上调度任何新的 Pod。相应节点中的现有 Pod 会继续运行。

  4. 节点取消预配:达到七天期限的节点最终会在适当的时间段后取消预配,这有助于确保正在运行的工作负载迁移到新节点。

以下计算类配置示例包含 leadTimeSecondsmaxRunDuration 字段:

apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
  name: dws-model-inference-class
spec:
  priorities:
    - machineType: g2-standard-24
      spot: true
    - machineType: g2-standard-24
      maxRunDurationSeconds: 72000
      flexStart:
        enabled: true
        nodeRecycling:
          leadTimeSeconds: 3600
  nodePoolAutoCreation:
    enabled: true

如需详细了解如何使用节点回收,请尝试通过经济高效且高可用性的 GPU 预配策略在 GKE 上部署 LLM 教程。

限制

  • 不支持 Pod 间反亲和性。集群自动扩缩器在节点预配期间不会考虑 Pod 间反亲和性规则,这可能会导致工作负载无法调度。 当在同一节点池中预配两个或更多动态工作负载调度器对象的节点时,可能会发生这种情况。
  • 动态工作负载调度器不支持预留。您必须在创建节点池时指定 --reservation-affinity=none 标志。动态工作负载调度器仅需要并支持 ANY 位置政策,以实现集群自动扩缩。
  • 单个动态工作负载调度器请求最多可创建 1,000 个虚拟机 (VM),这是单个节点池中每个可用区的最大节点数。
  • GKE 使用 Compute Engine ACTIVE_RESIZE_REQUESTS 配额来控制队列中待处理的动态工作负载调度器请求的数量。默认情况下,此配额的限制为每个 Google Cloud项目 100 个请求。如果您尝试创建超过此配额的动态工作负载调度器请求,则新请求会失败。
  • 由于节点一起预配,因此使用动态工作负载调度器的节点池对中断很敏感。如需了解详情,请参阅管理使用动态工作负载调度程序的工作负载中的中断情况
  • 您可能会看到 Google Cloud 控制台中列出其他短期运行的虚拟机。这是预期行为,因为 Compute Engine 可能会创建虚拟机,并在预配所有必需机器的容量可用时立即移除这些虚拟机。
  • 不支持 Spot 虚拟机
  • 动态工作负载调度器不支持临时卷。 您必须使用永久性卷进行存储。如需选择使用永久性卷的最佳存储类型,请参阅用于 GKE 集群的存储概览
  • 如果工作负载使用节点回收,且由作业部署,请配置作业并将完成模式设置为 Indexed
  • 单个 ProvisioningRequest 对象仅支持 podSets 列表中的一个条目。包含多个 podSet 条目的请求会失败。

后续步骤