目录

English version | 中文版 | 日本語版

HAMi logo

LICENSE build status Releases OpenSSF Best Practices OpenSSF Scorecard Go Report Card codecov FOSSA Status docker pulls slack discord website

HAMi

Kubernetes GPU 虚拟化与异构加速器调度,面向 AI 基础设施。

HAMi Architecture

HAMi 全称异构 AI 计算虚拟化中间件(Heterogeneous AI Computing Virtualization Middleware)。前身为 k8s-vGPU-scheduler,HAMi 帮助平台团队在 Kubernetes 工作负载间共享昂贵的 GPU 及其他 AI 加速器,隔离设备显存和算力,并通过设备感知的调度策略调度 Pod,无需修改应用代码。

HAMi 是 CNCF IncubatingCNCF Landscape 项目,同时也被列入 CNAI Landscape

CNCF logo

为什么选择 HAMi?

AI 基础设施团队常常面临同样的 Kubernetes 加速器问题:整张 GPU 被分配给小型任务,团队争抢稀缺设备,不同加速器厂商暴露不同的操作模型,调度器缺乏足够的设备上下文来高效放置工作负载。

HAMi 提供了一个 Kubernetes 原生层:

  • 设备共享:按显存、核心或设备数量分配物理加速器的部分资源。
  • 资源隔离:在设备后端支持的情况下,强制执行每个工作负载的加速器显存和算力限制。
  • 设备感知调度:通过拓扑感知、binpack、spread 和设备特定的调度策略放置 Pod。
  • 异构 AI 集群:通过统一的调度和分配工作流管理 NVIDIA GPU、NPU、DCU、MLU 等多种加速器类型。
  • 零应用改动:继续使用标准 Kubernetes 资源请求和限制。
  • 生产运维:暴露指标、仪表盘、WebUI、Helm 安装和社区支持的部署指南。

使用场景

  • 提升共享 Kubernetes AI 集群中的 GPU 利用率。
  • 在同一加速器资源池上运行多租户 Notebook、训练和推理工作负载。
  • 构建具有公平设备分配和配额控制的私有云 AI 平台。
  • 运营跨 NVIDIA、昇腾、寒武纪、海光、天数智芯、沐曦、摩尔线程等厂商的异构加速器集群。
  • 将 HAMi 与 kube-scheduler、Volcano 等 Kubernetes 调度器结合用于批量 AI 工作负载。

工作原理

HAMi 由 Mutating Webhook、调度器扩展器、设备插件和设备特定的容器内虚拟化组件组成。

Pod 提交
  -> HAMi Mutating Webhook
  -> HAMi 调度器 filter / score / bind
  -> 设备分配写入 Pod 注解
  -> 设备插件 Allocate()
  -> 容器运行时环境
  -> HAMi 监控和指标

设备虚拟化

HAMi 让工作负载只申请所需的加速器资源。例如,以下 Pod 请求一张具有 3 GiB 显存的物理 NVIDIA GPU:

resources:
  limits:
    nvidia.com/gpu: 1
    nvidia.com/gpumem: 3000

工作负载在容器内看到已分配的设备资源,HAMi 负责协调调度、分配和隔离。

使用 HAMi 前后对比

注意:

  1. 安装 HAMi 后,节点上注册的 nvidia.com/gpu 值默认为 vGPU 数量。
  2. 在 Pod 中申请资源时,nvidia.com/gpu 指的是当前 Pod 所需的物理 GPU 数量。

支持的设备

HAMi 支持多种异构加速器后端,包括 GPU、NPU、DCU、MLU、GCU、XPU 等。设备能力因厂商、型号、驱动和硬件代次而异。

请参阅 HAMi 支持的设备页面获取最新的支持矩阵。

快速开始

前置条件

使用 NVIDIA 设备插件路径,需准备:

  • NVIDIA 驱动 >= 440
  • nvidia-docker 版本 > 2.0
  • NVIDIA 配置为 containerd、Docker 或 CRI-O 的默认运行时
  • Kubernetes >= 1.23
  • glibc >= 2.17
  • Linux 内核 >= 3.10
  • Helm > 3.0

使用 Helm 安装

标记 GPU 节点以便 HAMi 管理:

kubectl label nodes <node-name> gpu=on

添加 HAMi Helm 仓库:

helm repo add hami-charts https://project-hami.github.io/HAMi/
helm repo update

安装 HAMi:

helm install hami hami-charts/hami -n kube-system

验证调度器和设备插件是否正在运行:

kubectl get pods -n kube-system

hami-device-pluginhami-scheduler 都为 Running 状态时,提交示例工作负载:

kubectl apply -f examples/nvidia/default_use.yaml

完整的安装指南和配置选项,请参阅 HAMi 文档

调度策略

HAMi 支持多种 AI 工作负载调度模式:

  • binpack:将工作负载打包到更少的节点或设备上以提高资源利用率。
  • spread:将工作负载分布到不同节点或设备上以减少争用。
  • 拓扑感知调度:在支持的情况下,基于 GPU 拓扑选择设备组合。
  • 动态 MIG:为支持的显卡和模式动态创建和分配 NVIDIA MIG 实例。

HAMi 兼容默认 Kubernetes 调度路径,也可与 Volcano 配合用于批量 AI 工作负载。请参阅 HAMi 网站获取当前的调度器集成指南。

可观测性与 WebUI

HAMi 暴露用于监控集群加速器使用情况的指标。安装后,指标可通过调度器监控端点获取:

http://<scheduler-ip>:<monitor-port>/metrics

默认监控端口为 31993。可通过 Helm 参数修改,如 --set scheduler.service.monitorPort=<port>

HAMi 还提供:

  • HAMi-WebUI 用于可视化集群和设备管理。
  • Grafana 仪表盘示例用于加速器监控。
  • 基准测试材料用于评估工作负载行为和调度效果。

HAMi WebUI

生态系统集成

项目 集成说明
vLLM 以 GPU 显存上限运行推理服务器,让多个模型共享同一 GPU
Volcano 为 GPU 工作负载提供 Gang 调度和基于队列的批量调度
Kueue 通过 ResourceTransformation 将 HAMi 资源暴露给 Kueue,实现批量作业排队
Prometheus HAMi 上报每个容器的 GPU 指标,包括显存用量和利用率
Grafana 提供预构建仪表盘,用于可视化 HAMi GPU 指标
NVIDIA GPU Operator 当 HAMi 负责调度、GPU Operator 负责驱动管理时,两者可共存

路线图、治理与贡献

HAMi 由维护者贡献者共同治理。治理规则详见 HAMi 社区仓库

如需贡献代码、文档、测试或设备后端改进,请阅读 CONTRIBUTING.md

社区

HAMi 社区欢迎用户、贡献者、硬件厂商和构建 Kubernetes AI 基础设施的平台团队。

演讲和参考资料

活动 演讲
中国云计算基础架构开发者大会,北京 2024 在 Kubernetes 集群上解锁异构 AI 基础设施
KubeDay Japan 2024 Unlocking Heterogeneous AI Infrastructure K8s Cluster: Leveraging the Power of HAMi
KubeCon + AI_dev Open Source GenAI & ML Summit China 2024 Is Your GPU Really Working Efficiently in the Data Center? N Ways to Improve GPU Usage
KubeCon + AI_dev Open Source GenAI & ML Summit China 2024 Unlocking Heterogeneous AI Infrastructure K8s Cluster
KubeCon Europe 2024 Cloud Native Batch Computing with Volcano: Updates and Future

许可证

HAMi 采用 Apache License 2.0 许可证。详见 LICENSE

Copyright Contributors to HAMi, established as HAMi a Series of LF Projects, LLC.

关于

Heterogeneous GPU Sharing on Kubernetes, https://project-hami.io

174.9 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号