告别K8s GPU之痛:DRA如何改变一切

告别K8s GPU之痛:DRA如何改变一切

💡 原文英文,约800词,阅读约需3分钟。
📝

内容提要

Kubernetes 1.34引入动态资源分配(DRA),通过CEL表达式让工作负载按需选择GPU(如内存、型号、MIG切片或NVLink连接),替代传统节点标签和硬编码,解决异构GPU集群中调度不均、资源浪费问题,简化运维并提升效率。

🔎

延伸解读

从“整数”到“意图”:调度模型的根本转变

传统Kubernetes将GPU视为无差别的整数资源,调度器无法区分B200和H100,导致训练任务因显存不足而OOM,而大显存节点却闲置。DRA通过CEL表达式让工作负载声明“需要H100或更好且显存至少40GB”等具体意图,调度器据此匹配设备,从根本上解决了资源错配问题。

告别硬编码:运维复杂度的显著降低

过去,为适配不同GPU型号,运维需依赖节点标签、污点和独立节点池,每新增一代GPU就要更新数十个Helm图表。DRA将硬件选择逻辑集中到资源声明中,一份清单即可表达多种需求,无需为每种硬件重复定义作业,大幅简化了集群管理和版本升级流程。

MIG切片的灵活利用:减少资源浪费

MIG切片在传统模型下是刚性资源类型,小切片耗尽时大切片却闲置,无法自动回退。DRA允许通过CEL表达式指定“优先小切片,其次中切片,最后整卡”,使作业能按可用性灵活选择,提高切片利用率,减少因等待而挂起的作业。

Q&A

Kubernetes 1.34 引入的动态资源分配(DRA)主要解决了什么问题?

DRA 解决了 Kubernetes 将 GPU 视为相同单元的问题,允许工作负载通过 CEL 表达式按需选择 GPU(如内存、型号、MIG 切片或 NVLink 连接),从而避免调度不均和资源浪费。

在 Kubernetes 中,DRA 如何实现按需选择 GPU?

DRA 通过让 GPU 驱动发布结构化数据,并使用 CEL 表达式在 ResourceClaimTemplate 中定义选择条件,例如指定内存大小、GPU 型号或 MIG 切片类型,从而让调度器根据这些条件分配资源。

DRA 相比传统的节点标签和硬编码方式有哪些优势?

DRA 消除了对节点标签、污点和容忍的依赖,避免了为每种 GPU 类型维护单独的节点池和更新大量 Helm 图表。它允许工作负载声明灵活的资源需求,简化了运维并提高了资源利用率。

DRA 如何处理 MIG 切片的选择?

DRA 允许在 CEL 表达式中列出多个可接受的 MIG 切片(如 mig-1g.10gb、mig-2g.20gb、mig-3g.40gb)或完整 GPU,调度器会优先选择可用的切片,从而避免小切片耗尽而大切片闲置的问题。

DRA 如何支持需要多个 GPU 且要求 NVLink 连接的工作负载?

DRA 允许在 ResourceClaimTemplate 中指定 count 和 CEL 表达式,例如要求 4 个 GPU 且 fabric 属性为 nvlink,并通过 constraints 匹配 NVLink 域,确保分配的 GPU 相互连接。

DRA 对异构 GPU 集群的管理有何影响?

DRA 使得在混合 H100、B200、B300 等不同 GPU 的集群中,工作负载可以自动选择满足需求的 GPU,无需为每种硬件单独定义作业,从而简化了集群管理并提高了资源利用率。

🏷️

标签

➡️

继续阅读