☰
HAMi Kubernetes GPU 共享调度完整指南:从零部署到快速上手
2026/10/18 6:42:13 网站建设 项目流程

HAMi Kubernetes GPU 共享调度完整指南:从零部署到快速上手

【免费下载链接】HAMiHeterogeneous GPU Sharing on Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ha/HAMi

HAMi 是面向 Kubernetes 的 GPU 共享与异构设备调度组件,让一块物理 GPU 按显存和算力百分比切分给多个 Pod,应用代码无需任何修改。跟着本教程完成环境核对、节点容器运行时配置、Helm 一键安装与验证,最后掌握升级与回滚操作。

它是什么、值不值得装

HAMi(Heterogeneous AI Computing Virtualization Middleware)是一个 CNCF 孵化项目,主仓库 charts/hami/ 提供标准 Helm Chart,调度器、Webhook 与 device plugin 均由 Go 语言实现。它解决的典型问题是:小任务独占整卡导致 GPU 闲置、多团队争抢同一块卡、不同厂商设备各用一套调度逻辑。

它的工作链路是:Mutating Webhook 拦截带 GPU 请求的 Pod,调度器扩展程序完成设备感知的 filter 与 score,device plugin 把设备以nvidia.com/gpu、nvidia.com/gpumem等扩展资源注册给 kubelet,容器内的 HAMi-core 组件再在 CUDA 层真正执行显存与算力上限。

适合它的场景:共享推理集群、多租户 Notebook/训练平台、需要按卡型或 UUID 定向调度的混合卡池。如果你只是独占整卡跑训练,原生 device plugin 已够用;HAMi 的价值在"切片、限额、定向调度"。

动手前:环境核对清单

逐项打勾后再动手,缺一项都会让 device plugin 起不来或 Pod 拉不起。

组件最低版本说明
NVIDIA 驱动440每个 GPU 节点都要装好
NVIDIA Container Toolkit1.x提供容器内的 nvidia 运行时
Kubernetes1.18Chart 要求的 kubeVersion 下限
Helm3.0安装入口
glibc2.17HAMi-core 运行库依赖
Linux 内核3.10节点内核下限

节点环境配置

目标只有一个:让容器运行时能注入 NVIDIA 驱动。改错位置,Pod 里就会报找不到libcuda。

Docker 节点:用 nvidia-ctk 重写运行时配置

  • 改什么:/etc/docker/daemon.json,把默认运行时指向 nvidia。
  • 为什么:HAMi 只负责"分卡",驱动注入仍依赖容器运行时。
  • 操作:
nvidia-ctk runtime configure --runtime docker sudo systemctl restart docker
  • 如何确认:
docker info | grep -i runtime

输出中出现nvidia运行时即生效。

containerd 节点:改 config.toml 后重启

  • 改什么:/etc/containerd/config.toml的[plugins."io.containerd.grpc.v1.cri".containerd.runtimes]段。
  • 为什么:kubelet 走 CRI 创建容器,nvidia 运行时必须在这里注册。
  • 操作:
nvidia-ctk runtime configure --runtime containerd sudo systemctl restart containerd
  • 如何确认:
containerd config dump | grep -A5 nvidia

看到nvidiaruntime 配置段即通过。两种运行时二选一,按你集群实际使用的那个配置即可。

安装与验证

节点就绪后,按编号步骤执行,每步都有对应的成功标志。

1. 给 GPU 节点打标

Chart 中 device plugin 的nvidiaNodeSelector默认是gpu=on,没打标的节点不会跑 vGPU 组件。

kubectl label nodes <节点名> gpu=on

预期输出:node/<节点名> labeled。🔖

2. 添加 HAMi Helm 仓库

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

预期输出:"hami-charts" has been added to your repositories。

3. Helm 一键安装

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

旧版本集群可加--set scheduler.kubeScheduler.imageTag=v1.16.8让 kube-scheduler 镜像与集群版本对齐。预期输出:NAME: hami、STATUS: deployed。

4. 验证组件状态

kubectl get pods -n kube-system

看到hami-scheduler-*与hami-device-plugin-*均为Running才算通过。🔖

5. 验证 GPU 资源上报

kubectl describe node <节点名> | grep -A1 "nvidia.com"

nvidia.com/gpu应显示为"物理卡数 × 切分数"(默认 10),例如 4 卡节点显示 40。

6. 提交切片 Pod 做端到端验证

仓库自带示例 examples/nvidia/default_use.yaml,申请 1 块物理 GPU、3000Mi 显存:

kubectl apply -f examples/nvidia/default_use.yaml

Pod 状态变为Running,且kubectl describe pod gpu-pod的 limits 里同时出现nvidia.com/gpu与nvidia.com/gpumem: 3000,即完成安装闭环。之后可通过节点端口31993的/metrics或 WebUI 面板观察各容器显存占用:

升级、回滚与卸载

  • 升级:helm upgrade hami hami-charts/hami -n kube-system(先执行helm repo update)
  • 回滚:helm rollback hami <上一版本号> -n kube-system
  • 卸载:helm uninstall hami -n kube-system

注意:卸载只清理集群内资源,节点上的daemon.json、config.toml改动和节点标签不会回退,需要自行保留或恢复。

更多行为细节可以看仓库内的 charts/hami/values.yaml 逐项注释(如deviceSplitCount、migStrategy、scheduler.defaultSchedulerPolicy),MIG 动态生命周期说明在 docs/develop/dynamic-mig-lifecycle.md,完整配置项参考 charts/hami/README.md。装好之后,建议先在一台节点上用切片 Pod 压一轮显存上限,再扩到整个 GPU 池。

【免费下载链接】HAMiHeterogeneous GPU Sharing on Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ha/HAMi

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询