2.10. Gang 调度
Gang 调度(Gang scheduling)可确保一个组(或gang)相关的作业只在所有需要的资源都可用时才会启动。红帽构建的 Kueue 启用 gang scheduling 时,它会挂起作业,直到 OpenShift Container Platform 集群可以保证足够的容量以一起启动和执行 gang 中的所有相关作业。这也被称为 all-or-nothing 调度。
如果您使用昂贵的、有限的资源(如 GPU)时,则 Gang 调度非常重要。Gang 调度可以防止出现作业只是声明但不使用 GPU 的情况,这可以提高 GPU 利用率并降低运行成本。Gang 调度还可以帮助防止资源分段和死锁等问题。
2.10.1. 配置 gang 调度 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
作为集群管理员,您可以通过修改 Kueue
自定义资源 (CR) 中的 gangScheduling
spec 来配置 gang 调度。
配置了 gang 调度的 Kueue
CR 示例
- 1
- 您可以通过设置
policy
值来启用或禁用 gang 调度。可能的值包括ByWorkload
,None
, 或空(""
)。ByWorkload
-
当
policy
值被设置为ByWorkload
时,每个作业都会被单独处理并被视为一个单元。如果作业没有在指定时间内就绪,整个作业都会被驱除并在以后重试。 None
-
当
policy
值被设置为None
时,会禁用 gang 调度。 - 空 (
""
) -
当
policy
值为空或设置为""
时,红帽构建的 Kueue Operator 会决定 gang 调度的设置。目前,会默认禁用 gang 调度。
- 2
- 如果
policy
值设置为ByWorkload
,您必须配置作业准入设置。admission
spec 的可能值包括Parallel
,Sequential
, 或空 (""
)。Parallel
-
当
admission
值设置为Parallel
时,任何作业中的 pod 可以随时被接受。当作业竞争集群容量时可能会导致死锁。发生死锁时,从另一个作业成功调度的 pod 可能会阻止调度当前作为的 pod。 Sequential
-
当
admission
值设置为Sequential
时,只接受当前处理作业中的 pod。在接受了所有来自当前作业中的 pod 且它们都已就绪后,红帽构建的 Kueue 会处理下一个作业。当集群有足够的容量用于多个作业时,Sequential 处理可能会减慢准入速度,但会增加一个作业的所有 pod 都被成功调度的可能性。 - 空 (
""
) -
当
admission
值为空或设置为""
时,红帽构建的 Kueue Operator 会决定作业准入设置。目前,admission
值默认设置为Parallel
。