HAMi 是什么?Kubernetes GPU 共享运维要关注哪些问题?
HAMi 已成为 CNCF Incubating 项目,面向 Kubernetes 提供 GPU 和异构加速器虚拟化能力。本文解释它解决的问题、核心组件和运维检查点。
GPU 昂贵,真正让平台团队头疼的不是“有没有 GPU”,而是 GPU 经常被低效使用。一个小推理服务可能只需要几 GB 显存,却占了一整张卡;多个团队同时排队申请 GPU,资源碎片越来越严重;不同厂商的加速器又有不同的插件和管理方式。
HAMi 正是为这个问题出现的。2026 年 7 月,CNCF 宣布 HAMi 成为 Incubating 项目。它的定位是 Kubernetes 上的开源、云原生 GPU 虚拟化中间件,可以把物理 GPU 或其他加速器按显存、核心或设备数切分给不同工作负载。
HAMi 解决什么问题
从运维视角看,HAMi 主要解决三类问题:
第一,GPU 切分。让一个物理设备可以被多个工作负载共享,而不是简单整卡分配。
第二,资源隔离。限制容器实际可用的显存和算力,避免一个任务把整张卡吃满。
第三,调度策略。根据 binpack、spread、拓扑感知等策略选择合适节点和设备,减少碎片。
这对教育、云平台、企业 AI 平台都很有价值。不是所有任务都需要整卡训练,很多实验、开发、推理、微调场景都更适合共享 GPU。
HAMi 的核心组件
官方介绍中 HAMi 包含几个关键组件:
- Mutating Webhook:拦截 Pod 提交,改写调度字段和资源请求。
- Scheduler Extender:过滤、评分、绑定 Pod 到节点和设备。
- Device Plugins:把不同厂商设备注册给 Kubernetes。
- HAMi-Core:在容器内执行资源限制,例如拦截 CUDA 调用。
- HAMi-WebUI:提供设备和集群可视化。
- Observability Layer:暴露 Prometheus 指标,方便接 Grafana。
运维排障时,要知道这些组件分别在什么命名空间、什么节点、用什么日志。
kubectl get pods -A | grep -i hami
kubectl get mutatingwebhookconfigurations | grep -i hami
kubectl logs -n <namespace> <hami-scheduler-pod>
kubectl describe pod <gpu-workload> -n <namespace>
什么时候适合使用 HAMi
适合:
- 多团队共享 GPU 集群。
- 推理服务显存占用不高,但数量多。
- 学生实验、开发测试、模型微调需要隔离配额。
- 希望在不改应用代码的情况下提高 GPU 利用率。
不一定适合:
- 单租户整卡训练。
- 对性能抖动极敏感的高性能训练任务。
- 还没有 GPU 监控、配额、命名空间治理的早期集群。
共享 GPU 不是免费午餐。它提升利用率,也带来隔离、性能、故障定位和容量规划复杂度。
运维上线前检查清单
第一,明确共享策略。哪些命名空间可以共享 GPU?哪些任务必须独占整卡?
第二,定义资源规格。比如按显存切分时,常用规格是 4Gi、8Gi、16Gi,还是按比例?
第三,启用监控。至少需要 GPU 利用率、显存使用、温度、错误数、Pod 到 GPU 的映射。
第四,验证隔离。一个 Pod 超出显存限制时,是否会被正确限制?是否影响同卡其他 Pod?
第五,做故障演练。杀掉 HAMi 组件、重启 GPU 节点、删除 Pod,看资源是否能恢复。
常见问题 FAQ
HAMi 和 MIG 是一回事吗?
不是。MIG 是 NVIDIA 部分 GPU 的硬件级切分能力,HAMi 是 Kubernetes 层面的多厂商 GPU 虚拟化中间件。两者关注层不同。
HAMi 会不会影响性能?
共享资源一定要关注性能抖动。对开发、实验、推理任务影响通常可接受;对严肃训练任务要压测后再决定。
为什么它进入 CNCF Incubating 值得关注?
Incubating 表示项目在社区、采用、治理和成熟度上比 Sandbox 更进一步。对企业选型来说,这是一个重要信号。
初学者应该学 HAMi 吗?
如果目标是 AI 平台运维、Kubernetes GPU 运维,值得学。普通 Linux 运维可以先理解 GPU 共享和调度基本概念。
参考资料
- CNCF: HAMi becomes a CNCF incubating project: https://www.cncf.io/blog/2026/07/15/hami-becomes-a-cncf-incubating-project/
- HAMi 项目主页: https://project-hami.io/
