从零共享 GPU:基于 HAMi 的 Kubernetes GPU 调度动手实践

ContainerDays 2026 Singapore 现场工作坊(45 分钟)。在本地 kind 集群上安装 HAMi,用两块模拟 A100 完成 GPU 共享、binpack 与 spread 调度策略实验,并了解 KAI Scheduler、Volcano 与 DRA 等进阶路径。无需真实 GPU。

本次工作坊来自 ContainerDays 2026 Singapore(10 月 27 日 12:30 至 13:15),由宋净超与 Reza Jelveh 共同主讲。全程在笔记本电脑上的 kind 集群中完成,不需要真实 GPU:mock device plugin 会向节点注入两块模拟的 A100-40GB 显卡,让 CNCF Incubating 项目 HAMi 的每一个调度决策都清晰可见。

下方嵌入了交互式幻灯片,您可以使用控制按钮或键盘快捷键进行导航。

幻灯片: 从零共享 GPU

主要议题

  • 为什么需要共享 GPU:一个 1 GB 的任务会占用整块 80 GB 显卡,大多数 GPU 大部分时间在闲置
  • HAMi 架构:Mutating webhook、调度器扩展、Device Plugin、HAMi-core、vGPUmonitor 五个组件各司其职
  • 申请一份显存:跨厂商统一的资源模型,如 nvidia.com/gpumem 与 nvidia.com/gpucores,业务零改造
  • Lab 1 安装:kind 集群、HAMi 2.10.0、mock device plugin、两块模拟 A100
  • Lab 2 共享 GPU:细粒度申请、拦截链路全解析,以及一个永远无法调度的 Pod
  • Lab 3 调度策略:卡维度上的 binpack 与 spread,以及拓扑感知调度
  • Lab 4 超越默认调度器:KAI Scheduler、Volcano vGPU 与 HAMi-DRA 三条进阶路径
  • 指标与收尾:分配量与使用量两套指标体系、HAMi WebUI,以及贡献入口

活动信息

总结

GPU 共享的本质是把整卡分配变成显存与算力的细粒度分配。HAMi 用一套跨厂商的资源模型、一个调度器扩展和一层容器内隔离库(HAMi-core)把这件事做进了 Kubernetes 原生流程:Pod 声明 gpumem 与 gpucores,webhook 改写 schedulerName,调度器按卡挑选 UUID 并写入注解,device plugin 在 Allocate 阶段完成挂载。实验环境用 mock 组件替换了真实 GPU,让完整链路在笔记本上可复现;而 KAI Scheduler、Volcano 与 DRA 则展示了同一隔离层之上更换调度大脑的可能性。

参考资料