从零开始共享 GPU:使用 HAMi 在 Kubernetes 中动手实践 GPU 调度

从零开始共享 GPU:使用 HAMi 在 Kubernetes 中动手实践 GPU 调度

💡 原文英文,约300词,阅读约需1分钟。
📝

内容提要

该工作坊在 ContainerDays 2026 新加坡站介绍 CNCF 孵化项目 HAMi 的 GPU 共享方案:借助 kind 集群与模拟设备插件伪造两块 A100-40GB 显卡,无需真实 GPU 即可观察调度过程。内容涵盖 GPU 共享动机(避免大卡被小任务独占)、HAMi 架构(webhook、调度器扩展、设备插件等)以及按显存和算力申请切片;四个实验分别覆盖安装、GPU 共享与拦截链、binpack 与 spread 调度策略、KAI Scheduler 与 Volcano vGPU 等扩展路径,最后介绍指标与 WebUI。

🔎

延伸解读

用模拟设备理解 GPU 共享调度

工作坊用 kind 集群和模拟设备插件伪造两块 A100-40GB,无需真实 GPU 即可观察 HAMi 的调度决策。这降低了学习门槛,适合在笔记本上复现实验。但模拟环境无法反映真实 GPU 的性能隔离和显存带宽竞争,因此实验结论应聚焦于调度逻辑,而非生产性能。

按显存和算力切分 GPU 的申请方式

HAMi 通过 nvidia.com/gpumem 和 nvidia.com/gpucores 等厂商中立资源让 Pod 申请 GPU 切片,避免整卡被小任务独占。实验二还展示了一个永远无法满足的 Pod,帮助理解拦截链和调度失败原因。这种细粒度申请需要集群安装 HAMi 组件,并依赖设备插件上报可分配资源。

调度策略影响 GPU 利用率与拓扑

实验三对比 binpack 与 spread 在卡轴上的策略:binpack 倾向集中放置,spread 倾向分散,并涉及拓扑感知。选择哪种策略取决于目标是提高整卡利用率还是降低单卡争用。工作坊未给出性能数据,读者应结合自身负载测试后再决定。

扩展路径与可观测性

实验四介绍 KAI Scheduler、Volcano vGPU 和 HAMi-DRA 等替代或扩展调度路径,说明 HAMi 可与生态组件配合。最后提到分配与使用两类指标及 WebUI,便于观察切片是否被实际消耗。这些信息有助于评估运维复杂度,但具体集成效果需参考各项目文档。

❓

Q&A

为什么需要共享 GPU?独占整卡有什么问题?

独占整卡会导致大显存 GPU(如 80GB 卡)被小任务(如只需 1GB 显存的任务)完全占用,造成资源浪费。共享 GPU 可以让多个任务共用一张卡,提高利用率。

HAMi 的架构包含哪些核心组件?

HAMi 架构包含 mutating webhook、scheduler extender、device plugin、HAMi-core 和 vGPUmonitor。

在 Kubernetes 中如何申请 GPU 切片资源?

可以通过厂商中立的资源名称申请 GPU 切片,例如 nvidia.com/gpumem 用于申请显存,nvidia.com/gpucores 用于申请算力。

这个工作坊的四个实验分别是什么内容?

实验1:安装 kind 集群、HAMi 2.10.0 和模拟设备插件,伪造两块 A100;实验2:共享 GPU,包括分数请求、拦截链和一个永远无法调度的 Pod;实验3:调度策略,比较 binpack 与 spread 在卡轴上的表现及拓扑感知;实验4:超越默认调度器,探索 KAI Scheduler、Volcano vGPU 和 HAMi-DRA 路径。

没有真实 GPU 如何实践 GPU 共享调度?

可以使用 kind 集群和模拟设备插件,伪造两块 A100-40GB 显卡,从而在没有真实 GPU 的笔记本上观察 HAMi 的调度决策。

HAMi 支持哪些调度策略?binpack 和 spread 有什么区别?

HAMi 支持 binpack 和 spread 等调度策略。binpack 倾向于将 Pod 集中到同一张卡上,而 spread 倾向于分散到不同卡上,两者在卡轴上表现不同,并考虑拓扑感知。

除了默认调度器,HAMi 还能与哪些调度器集成?

HAMi 可以与 KAI Scheduler、Volcano vGPU 集成,并支持 HAMi-DRA 路径。

HAMi 提供哪些监控指标和可视化工具?

HAMi 提供分配(allocation)与使用(usage)两类指标族,并带有 HAMi WebUI 进行可视化。

🏷️

标签

➡️

继续阅读