本页介绍了 Google Kubernetes Engine (GKE) 中的弹性启动预配模式。 灵活启动功能由动态工作负载调度器提供支持,可在您需要运行 AI/机器学习工作负载时,以灵活且经济高效的方式获取 GPU。
借助灵活启动,您可以根据需要动态预配加速器,最长可预配 7 天,不受特定开始时间的限制,并且无需管理长期预留。因此,弹性开始适用于需求要求波动或时长较短的小型到中型工作负载。例如,小型模型预训练、模型微调或可伸缩的服务模型。
本页面上的信息可帮助您实现以下各项:
- 了解 GKE 中的 flex-start 的运作方式。
- 确定 flex-start 是否适合您的工作负载。
- 确定哪种 flex-start 配置适合您的工作负载。
- 管理使用 flex-start 时的中断。
- 了解 GKE 中 flex-start 的限制。
本页面适用于希望针对工作负载优化加速器基础架构的平台管理员和运维人员以及机器学习 (ML) 工程师。
何时使用 flex-start
如果您的工作负载满足以下所有条件,我们建议您使用 flex-start:
- 您的工作负载需要 GPU 资源。
- 您的预留 GPU 容量有限或完全没有,并且您需要更可靠地访问 GPU。
- 您的工作负载在时间上非常灵活,您的用例可以承受等待获取所有请求的容量,例如,GKE 在最繁忙时段以外分配 GPU 资源时。
要求
如需在 GKE 中使用 flex-start,您的集群必须使用 1.32.2-gke.1652000 或更高版本。
灵活启动预配模式的运作方式
使用 flex-start 时,您可以在工作负载中指定所需的 GPU 容量。此外,对于标准集群,您可以在特定节点池上配置 flex-start。当有容量可用时,GKE 会通过完成以下流程自动预配虚拟机:
- 工作负载请求的 GPU 资源无法立即提供。此请求可以直接通过工作负载规范发出,也可以通过自定义计算类或 Kueue 等调度工具发出。
- GKE 会确定您的节点已启用灵活启动,并且工作负载可以等待一段不确定的时间。
- 集群自动扩缩器接受您的请求并计算所需的节点数,将它们视为一个单元。
- 调度程序会等待单个可用区中的所有所需资源都可用。
- 集群自动扩缩器会在必要的节点可用时预配这些节点。这些节点的运行时长最多为 7 天,如果您在
maxRunDurationSeconds
参数中指定了值,则运行时长会更短。此参数适用于 GKE 1.28.5-gke.1355000 或更高版本。如果您未为maxRunDurationSeconds
参数指定值,则默认值为 7 天。 - 在您在
maxRunDurationSeconds
参数中定义的运行时间结束后,节点和 Pod 将被抢占。 - 如果 Pod 提前完成,并且节点不再被使用,集群自动扩缩器会根据自动扩缩配置文件移除这些节点。
GKE 会在节点级别统计每个弹性启动请求的持续时间。由于启动期间的延迟,可用于运行 Pod 的时间可能略短。Pod 重试会共用此时长,这意味着 Pod 在重试后可用的时间更少。GKE 会分别统计每个弹性开始时间请求的持续时间。
灵活启动配置
GKE 支持以下 flex-start 配置:
- 弹性启动,其中 GKE 会按节点分配资源。在此配置中,您只需在创建节点期间设置
--flex-start
标志。 灵活启动(带排队预配),其中 GKE 会同时分配所有请求的资源。工作负载的所有 Pod 都可以在新预配的节点上一起运行。在工作负载执行之间,预配的节点不会重复使用。如需使用此配置,您必须在创建节点池时添加
--flex-start
和enable-queued-provisioning
标志。
下表比较了 flex-start 配置:
灵活启动 | 灵活启动(带排队预配) | |
---|---|---|
可用性 | 预览版
|
正式版 (GA) flex-start 和 enable-queued-provisioning 标志。如需注册这些标志的预览版,请填写申请表单。如需就此功能提供反馈或请求支持,请联系 dws-flex-start-feedback@google.com。
|
推荐的工作负载大小 | 小到中等,这意味着工作负载可以在单个节点上运行。例如,如果您要运行小型训练作业、离线推理或批量作业,此配置非常适用。 | 中到大型,这意味着工作负载可在多个节点上运行。您的工作负载需要多个资源,并且在所有 GPU 节点同时预配并准备就绪之前,无法开始运行。例如,如果您要运行分布式机器学习训练工作负载,此配置非常适用。 |
配置类型 | 当有资源可用时,GKE 一次预配一个节点。 | GKE 会同时分配所有请求的资源。 |
设置复杂性 | 复杂性更低。此配置类似于按需虚拟机和 Spot 虚拟机。 | 更复杂。我们强烈建议您使用配额管理工具,例如 Kueue。 |
自定义计算类支持 | 是 | 否 |
节点回收 | 是 | 否 |
价格 | 灵活启动 SKU | 灵活启动 SKU |
配额 | 抢占式 | 抢占式 |
节点升级策略 | 短期升级 | 短期升级 |
gcloud container node pool create 标志 |
--flex-start |
|
开始使用 | 使用灵活启动(带排队预配)运行大规模工作负载 |
优化 flex-start 配置
如需构建强大且具有成本优化的 AI/机器学习基础架构,您可以将弹性启动配置与可用的 GKE 功能相结合。我们建议您使用计算类根据工作负载要求定义节点配置的优先级列表。GKE 会根据可用性和您定义的优先级选择最合适的配置。
管理使用动态工作负载调度器的工作负载中断
需要节点池中所有或大多数节点可用的作业对驱逐敏感。此外,使用动态工作负载调度器请求预配的节点不支持自动修复。自动修复会从节点中移除所有工作负载,从而阻止它们运行。
当集群控制平面运行适用于 Flex Start 的最小版本(1.32.2-gke.1652000 或更高版本)时,使用 Flex Start 或队列化预配(或两者兼有)的所有节点都会使用短时升级。
短时升级会更新 Autopilot 集群中的 Standard 节点池或一组节点,而不会中断正在运行的节点。系统会使用新配置创建新节点,并随着时间的推移逐步用旧配置替换现有节点。早期版本的 GKE 不支持灵活启动或短时升级,因此需要遵循不同的最佳实践。
使用短时升级最大限度减少节点工作负载中断的最佳实践
当集群运行 1.32.2-gke.1652000 或更高版本时,系统会自动将弹性启动节点和使用队列化预配的节点配置为使用短时有效的升级。
为了最大限度地减少使用短时有效升级的节点上运行的工作负载的中断,请执行以下任务:
- 配置维护窗口和排除项,以设置 GKE 应何时以及不应执行更新操作(例如节点升级),同时确保 GKE 仍有时间执行自动维护。
- 停用节点自动修复功能。
对于运行低于 1.32.2-gke.1652000 版本(因此不使用短时升级)的集群中的节点,请参阅适用于这些节点的具体指南。
有关如何最大限度减少队列中预配节点的工作负载中断(而无需进行短暂升级)的最佳实践
在运行 1.32.2-gke.1652000 之前版本的 GKE 的集群上使用队列化预配的节点不会使用短时升级。升级到 1.32.2-gke.1652000 或更高版本且具有现有队列化预配节点的集群会自动更新为使用短时有效的升级。
对于运行这些早期版本的节点,请参阅以下指南:
- 根据集群的发布渠道注册,请采用以下最佳实践,以防止节点自动升级中断您的工作负载:
- 停用节点自动修复功能。
- 使用维护窗口和排除项来最大限度地减少对正在运行的工作负载的中断,同时确保 GKE 仍有时间执行自动维护。请务必在没有工作负载运行时安排该时间。
- 为确保您的节点池保持最新状态,请在没有活跃的动态工作负载调度器请求且节点池为空时手动升级节点池。
集群迁移到短时升级时的注意事项
当集群升级到 1.32.2-gke.1652000 或更高版本时,GKE 会使用队列化预配更新现有节点,以使用短时升级。GKE 不会更新其他设置,例如,如果您为特定节点池停用了节点自动升级功能,则 GKE 不会启用该功能。
现在,您的节点池使用的是短时有效的升级,我们建议您考虑实施以下最佳实践:
- 如果您使用
--no-enable-autoupgrade
标志停用了节点自动升级功能,则此迁移不会为节点池重新启用节点自动升级功能。我们建议您启用节点自动升级,因为短暂的升级不会干扰现有节点及其上运行的工作负载。如需了解详情,请参阅短暂升级。 - 此外,如果您的集群尚未注册到发布渠道,我们建议您注册集群,以便使用更精细的维护排除范围。
灵活启动中的节点回收
为了帮助确保节点顺利过渡并防止正在运行的作业发生停机,flex-start 支持节点回收。当节点的七天期限结束时,GKE 会自动将该节点替换为新节点,以保留正在运行的工作负载。
如需使用节点回收功能,您必须创建自定义计算类配置文件,并在 flexStart
规范中添加 nodeRecycling
字段,并使用以下参数:
leadTimeSeconds
:可配置的参数,可让您平衡资源可用性和费用效率。leadTimeSeconds
参数指定在节点达到 7 天期限结束前,新节点预配流程应开始替换节点的秒数。提前期越长,新节点在旧节点被移除之前准备就绪的可能性就越大,但可能会产生额外费用。maxRunDurationSeconds
:一个可配置的参数,可让您设置节点可以处于活动状态的最长时长。
节点回收过程包括以下步骤:
回收阶段:GKE 会验证按需启动预配的节点是否将
nodeRecycling
标志设置为true
。如果是,则当当前日期大于或等于以下字段值之间的差值时,GKE 会开始节点回收阶段:creationTimestamp
加maxRunDurationSeconds
leadTimeSeconds
creationTimeStamp
标志包含节点的创建时间。节点创建:开始新节点的创建流程,并进入队列和配置阶段。队列阶段的持续时间可能会因区域和具体加速器容量而动态变化。
隔离即将结束 7 天期限的节点:新节点运行后,旧节点会被隔离。此操作会阻止在该节点上调度任何新的 Pod。该节点中的现有 Pod 会继续运行。
节点预配解除:在适当的时间过后,即将结束 7 天期限的节点最终会被预配解除,这有助于确保正在运行的工作负载已迁移到新节点。
如需详细了解如何使用节点回收功能,请尝试参阅使用费用优化且高可用的 GPU 预配策略在 GKE 上提供 LLM 教程。
限制
- 不支持Pod 间反亲和性。集群自动扩缩器在预配节点时不会考虑 Pod 间反亲和性规则,这可能会导致工作负载无法调度。当在同一节点池中预配两个或更多动态工作负载调度器对象的节点时,可能会发生这种情况。
- 仅支持 GPU 节点。
- 动态工作负载调度器不支持预留。您必须在创建节点池时指定
--reservation-affinity=none
标志。动态工作负载调度程序仅要求和支持ANY
位置政策,用于集群自动扩缩。 - 单个动态工作负载调度器请求最多可创建 1,000 个虚拟机 (VM),这是单个节点池在每个区域中的节点数量上限。
- GKE 使用 Compute Engine
ACTIVE_RESIZE_REQUESTS
配额来控制队列中待处理的动态工作负载调度器请求的数量。默认情况下,此配额限制为每个项目 100 个请求。 Google Cloud如果您尝试创建的动态工作负载调度程序请求大于此配额,则新请求将失败。 - 由于节点一起预配,因此使用动态工作负载调度器的节点池对中断很敏感。如需了解详情,请参阅管理使用动态工作负载调度程序的工作负载中断。
- 您可能会在 Google Cloud 控制台中看到其他短期有效的虚拟机。这是预期行为,因为 Compute Engine 可能会创建虚拟机,并在预配所有必需机器的容量可用时立即移除这些虚拟机。
- 不支持 Spot 虚拟机。
- 动态工作负载调度器不支持临时卷。 您必须使用永久性卷进行存储。如需选择使用永久性卷的最佳存储类型,请参阅用于 GKE 集群的存储概览。
- 如果工作负载使用节点回收,并且由作业部署,请将作业的完成模式设置为
Indexed
。