Project-HAMi/HAMi
GitHub: Project-HAMi/HAMi
HAMi 是一个用于 Kubernetes 的异构 AI 计算虚拟化中间件,旨在通过设备共享与资源隔离提高 GPU 和 NPU 等异构算力的利用率。
Stars: 3283 | Forks: 510
英文版 | [中文版](README_cn.md) | [日本語版](README_ja.md)
[](/LICENSE)
[](https://github.com/Project-HAMi/HAMi/actions/workflows/ci.yaml)
[](https://github.com/Project-HAMi/HAMi/releases/latest)
[](https://www.bestpractices.dev/en/projects/9416)
[](https://goreportcard.com/report/github.com/Project-HAMi/HAMi)
[](https://codecov.io/gh/Project-HAMi/HAMi)
[](https://app.fossa.com/projects/git%2Bgithub.com%2FProject-HAMi%2FHAMi?ref=badge_shield)
[](https://hub.docker.com/r/projecthami/hami)
[](https://github.com/Project-HAMi/HAMi#meeting--contact)
[](https://cloud-native.slack.com/archives/C07T10BU4R2)
[](https://discord.gg/Amhy7XmbNq)
[](http://project-hami.io)
## Project-HAMi: 异构 AI 计算虚拟化中间件
## 简介
HAMi(原名“k8s-vGPU-scheduler”)是一个用于 Kubernetes 的异构设备管理中间件。它可以管理不同类型的异构设备(如 GPU、NPU 等),在 pod 之间共享异构设备,并根据设备拓扑和调度策略做出更好的调度决策。
其目标是消除不同异构设备之间的差距,为用户提供统一的接口进行管理,而无需修改其应用程序。截至 2024 年 12 月,HAMi 不仅在互联网、公有云和私有云领域得到广泛应用,还被金融、证券、能源、电信、教育和制造业等多个垂直行业广泛采用。超过 50 家公司或机构不仅作为最终用户,也是积极的贡献者。

HAMi 是
[Cloud Native Computing Foundation](https://cncf.io/)(CNCF) 的 sandbox 和 [landscape](https://landscape.cncf.io/?item=orchestration-management--scheduling-orchestration--hami) 项目,
以及 [CNAI Landscape project](https://landscape.cncf.io/?group=cnai&item=cnai--general-orchestration--hami).
## 设备虚拟化
HAMi 通过支持设备共享和设备资源隔离,为包括 GPU 在内的多种异构设备提供设备虚拟化。有关支持设备虚拟化的设备列表,请参阅 [受支持的设备](#supported-devices)
### 设备共享
- 允许通过指定设备核心使用量来分配部分设备。
- 允许通过指定设备内存来分配部分设备。
- 对流多处理器(SM)实施硬限制。
- 无需修改现有程序。
- 支持 [dynamic-mig](docs/dynamic-mig-support.md) 功能,[示例](examples/nvidia/dynamic_mig_example.yaml)
### 设备资源隔离
设备隔离的简单演示:
一个具有以下资源的任务将在容器内看到 3000M 的设备内存:
```
resources:
limits:
nvidia.com/gpu: 1 # declare how many physical GPUs the pod needs
nvidia.com/gpumem: 3000 # identifies 3G GPU memory each physical GPU allocates to the pod
```

1. **安装 HAMi 后,节点上注册的 `nvidia.com/gpu` 值默认为 vGPU 的数量。**
2. **在 pod 中请求资源时,`nvidia.com/gpu` 指的是当前 pod 所需的物理 GPU 数量。**
### 受支持的设备
[NVIDIA GPU](https://github.com/Project-HAMi/HAMi#preparing-your-gpu-nodes)
[Cambricon MLU](docs/cambricon-mlu-support.md)
[HYGON DCU](docs/hygon-dcu-support.md)
[Iluvatar CoreX GPU](docs/iluvatar-gpu-support.md)
[Moore Threads GPU](docs/mthreads-support.md)
[HUAWEI Ascend NPU](https://github.com/Project-HAMi/ascend-device-plugin/blob/main/README.md)
[MetaX GPU](docs/metax-support.md)
## 架构
HAMi 由多个组件组成,包括一个统一的 mutatingwebhook、一个统一的 scheduler extender、针对每种异构 AI 设备的不同 device-plugins 以及不同的容器内虚拟化技术。
## 快速开始
### 选择您的编排器
[](#prerequisites)
[](docs/how-to-use-volcano-vgpu.md)
### 前置条件
运行 NVIDIA 设备插件的前置条件列表如下:
- NVIDIA drivers >= 440
- nvidia-docker version > 2.0
- 容器运行时 containerd/docker/cri-o 的默认运行时配置为 nvidia
- Kubernetes version >= 1.18
- glibc >= 2.17 & glibc < 2.30
- kernel version >= 3.10
- helm > 3.0
### 安装
首先,为您的 GPU 节点添加标签 "gpu=on",以便 HAMi 进行调度。如果没有此标签,我们的调度器将无法管理这些节点。
```
kubectl label nodes {nodeid} gpu=on
```
在 helm 中添加我们的仓库
```
helm repo add hami-charts https://project-hami.github.io/HAMi/
```
使用以下命令进行部署:
```
helm install hami hami-charts/hami -n kube-system
```
通过调整 [configs](docs/config.md) 来自定义您的安装。
使用以下命令验证您的安装:
```
kubectl get pods -n kube-system
```
如果 `hami-device-plugin`(原名 `vgpu-device-plugin`)和 `hami-scheduler`(原名 `vgpu-scheduler`)pod 都处于 *Running* 状态,说明您的安装成功。您可以尝试 [这里](examples/nvidia/default_use.yaml) 的示例
### WebUI
自 HAMi v2.4 起,[HAMi-WebUI](https://github.com/Project-HAMi/HAMi-WebUI) 可用
点击 [此处](https://github.com/Project-HAMi/HAMi-WebUI/blob/main/docs/installation/helm/index.md) 查看安装指南
### 监控
安装后会自动启用监控。通过访问以下 URL 获取集群信息概览:
```
http://{scheduler ip}:{monitorPort}/metrics
```
默认 monitorPort 为 31993;可以在安装过程中使用 `--set devicePlugin.service.httpPort` 设置其他值。
Grafana 仪表板 [示例](docs/dashboard.md)
## 注意事项
- 如果在使用设备插件配合 NVIDIA 镜像时未请求 vGPU,机器上的所有 GPU 可能会在您的容器中暴露。
- 目前,A100 MIG 仅支持 "none" 和 "mixed" 模式。
- 带有 "nodeName" 字段的任务目前无法调度;请改用 "nodeSelector"。
## 会议与联系
HAMi 社区致力于营造开放和热情的环境,提供多种方式与其他用户和开发者交流。
如果您有任何问题,请随时通过以下渠道联系我们:
- 定期社区会议:每周五 UTC+8 时间 16:00(中文)。[转换为您的时区](https://www.thetimezoneconverter.com/?t=14%3A30&tz=GMT%2B8&).
- [会议纪要和议程](https://docs.google.com/document/d/1YC6hco03_oXbF9IOUPJ29VWEddmITIKIfSmBX8JtGBw/edit#heading=h.g61sgp7w0d0c)
- [会议链接](https://meeting.tencent.com/dm/Ntiwq1BICD1P)
- 邮箱:请参阅 [MAINTAINERS.md](MAINTAINERS.md) 查找所有维护者的邮箱地址。欢迎通过邮件联系我们报告问题或提出疑问。
- [邮件列表](https://groups.google.com/forum/#!forum/hami-project)
## 演讲与参考资料
| | 链接 |
|------------------|-------------------------------------------------------------------------------------------------------------------------|
| CHINA CLOUD COMPUTING INFRASTRUCTURE DEVELOPER CONFERENCE (北京 2024) | [Unlocking heterogeneous AI infrastructure on k8s clusters](https://live.csdn.net/room/csdnnews/3zwDP09S) 从 03:06:15 开始 |
| KubeDay(日本 2024) | [Unlocking Heterogeneous AI Infrastructure K8s Cluster:Leveraging the Power of HAMi](https://www.youtube.com/watch?v=owoaSb4nZwg) |
| KubeCon & AI_dev Open Source GenAI & ML Summit(中国 2024) | [Is Your GPU Really Working Efficiently in the Data Center?N Ways to Improve GPU Usage](https://www.youtube.com/watch?v=ApkyK3zLF5Q) |
| KubeCon & AI_dev Open Source GenAI & ML Summit(中国 2024) | [Unlocking Heterogeneous AI Infrastructure K8s Cluster](https://www.youtube.com/watch?v=kcGXnp_QShs) |
| KubeCon(欧洲 2024)| [Cloud Native Batch Computing with Volcano: Updates and Future](https://youtu.be/fVYKk6xSOsw) |
## 许可证
HAMi 采用 Apache 2.0 许可证。详情请参阅 [LICENSE](
[](/LICENSE)
[](https://github.com/Project-HAMi/HAMi/actions/workflows/ci.yaml)
[](https://github.com/Project-HAMi/HAMi/releases/latest)
[](https://www.bestpractices.dev/en/projects/9416)
[](https://goreportcard.com/report/github.com/Project-HAMi/HAMi)
[](https://codecov.io/gh/Project-HAMi/HAMi)
[](https://app.fossa.com/projects/git%2Bgithub.com%2FProject-HAMi%2FHAMi?ref=badge_shield)
[](https://hub.docker.com/r/projecthami/hami)
[](https://github.com/Project-HAMi/HAMi#meeting--contact)
[](https://cloud-native.slack.com/archives/C07T10BU4R2)
[](https://discord.gg/Amhy7XmbNq)
[](http://project-hami.io)
## Project-HAMi: 异构 AI 计算虚拟化中间件
## 简介
HAMi(原名“k8s-vGPU-scheduler”)是一个用于 Kubernetes 的异构设备管理中间件。它可以管理不同类型的异构设备(如 GPU、NPU 等),在 pod 之间共享异构设备,并根据设备拓扑和调度策略做出更好的调度决策。
其目标是消除不同异构设备之间的差距,为用户提供统一的接口进行管理,而无需修改其应用程序。截至 2024 年 12 月,HAMi 不仅在互联网、公有云和私有云领域得到广泛应用,还被金融、证券、能源、电信、教育和制造业等多个垂直行业广泛采用。超过 50 家公司或机构不仅作为最终用户,也是积极的贡献者。

HAMi 是
[Cloud Native Computing Foundation](https://cncf.io/)(CNCF) 的 sandbox 和 [landscape](https://landscape.cncf.io/?item=orchestration-management--scheduling-orchestration--hami) 项目,
以及 [CNAI Landscape project](https://landscape.cncf.io/?group=cnai&item=cnai--general-orchestration--hami).
## 设备虚拟化
HAMi 通过支持设备共享和设备资源隔离,为包括 GPU 在内的多种异构设备提供设备虚拟化。有关支持设备虚拟化的设备列表,请参阅 [受支持的设备](#supported-devices)
### 设备共享
- 允许通过指定设备核心使用量来分配部分设备。
- 允许通过指定设备内存来分配部分设备。
- 对流多处理器(SM)实施硬限制。
- 无需修改现有程序。
- 支持 [dynamic-mig](docs/dynamic-mig-support.md) 功能,[示例](examples/nvidia/dynamic_mig_example.yaml)
### 设备资源隔离
设备隔离的简单演示:
一个具有以下资源的任务将在容器内看到 3000M 的设备内存:
```
resources:
limits:
nvidia.com/gpu: 1 # declare how many physical GPUs the pod needs
nvidia.com/gpumem: 3000 # identifies 3G GPU memory each physical GPU allocates to the pod
```

1. **安装 HAMi 后,节点上注册的 `nvidia.com/gpu` 值默认为 vGPU 的数量。**
2. **在 pod 中请求资源时,`nvidia.com/gpu` 指的是当前 pod 所需的物理 GPU 数量。**
### 受支持的设备
[NVIDIA GPU](https://github.com/Project-HAMi/HAMi#preparing-your-gpu-nodes)
[Cambricon MLU](docs/cambricon-mlu-support.md)
[HYGON DCU](docs/hygon-dcu-support.md)
[Iluvatar CoreX GPU](docs/iluvatar-gpu-support.md)
[Moore Threads GPU](docs/mthreads-support.md)
[HUAWEI Ascend NPU](https://github.com/Project-HAMi/ascend-device-plugin/blob/main/README.md)
[MetaX GPU](docs/metax-support.md)
## 架构
HAMi 由多个组件组成,包括一个统一的 mutatingwebhook、一个统一的 scheduler extender、针对每种异构 AI 设备的不同 device-plugins 以及不同的容器内虚拟化技术。
## 快速开始
### 选择您的编排器
[](#prerequisites)
[](docs/how-to-use-volcano-vgpu.md)
### 前置条件
运行 NVIDIA 设备插件的前置条件列表如下:
- NVIDIA drivers >= 440
- nvidia-docker version > 2.0
- 容器运行时 containerd/docker/cri-o 的默认运行时配置为 nvidia
- Kubernetes version >= 1.18
- glibc >= 2.17 & glibc < 2.30
- kernel version >= 3.10
- helm > 3.0
### 安装
首先,为您的 GPU 节点添加标签 "gpu=on",以便 HAMi 进行调度。如果没有此标签,我们的调度器将无法管理这些节点。
```
kubectl label nodes {nodeid} gpu=on
```
在 helm 中添加我们的仓库
```
helm repo add hami-charts https://project-hami.github.io/HAMi/
```
使用以下命令进行部署:
```
helm install hami hami-charts/hami -n kube-system
```
通过调整 [configs](docs/config.md) 来自定义您的安装。
使用以下命令验证您的安装:
```
kubectl get pods -n kube-system
```
如果 `hami-device-plugin`(原名 `vgpu-device-plugin`)和 `hami-scheduler`(原名 `vgpu-scheduler`)pod 都处于 *Running* 状态,说明您的安装成功。您可以尝试 [这里](examples/nvidia/default_use.yaml) 的示例
### WebUI
自 HAMi v2.4 起,[HAMi-WebUI](https://github.com/Project-HAMi/HAMi-WebUI) 可用
点击 [此处](https://github.com/Project-HAMi/HAMi-WebUI/blob/main/docs/installation/helm/index.md) 查看安装指南
### 监控
安装后会自动启用监控。通过访问以下 URL 获取集群信息概览:
```
http://{scheduler ip}:{monitorPort}/metrics
```
默认 monitorPort 为 31993;可以在安装过程中使用 `--set devicePlugin.service.httpPort` 设置其他值。
Grafana 仪表板 [示例](docs/dashboard.md)
## 注意事项
- 如果在使用设备插件配合 NVIDIA 镜像时未请求 vGPU,机器上的所有 GPU 可能会在您的容器中暴露。
- 目前,A100 MIG 仅支持 "none" 和 "mixed" 模式。
- 带有 "nodeName" 字段的任务目前无法调度;请改用 "nodeSelector"。
## 会议与联系
HAMi 社区致力于营造开放和热情的环境,提供多种方式与其他用户和开发者交流。
如果您有任何问题,请随时通过以下渠道联系我们:
- 定期社区会议:每周五 UTC+8 时间 16:00(中文)。[转换为您的时区](https://www.thetimezoneconverter.com/?t=14%3A30&tz=GMT%2B8&).
- [会议纪要和议程](https://docs.google.com/document/d/1YC6hco03_oXbF9IOUPJ29VWEddmITIKIfSmBX8JtGBw/edit#heading=h.g61sgp7w0d0c)
- [会议链接](https://meeting.tencent.com/dm/Ntiwq1BICD1P)
- 邮箱:请参阅 [MAINTAINERS.md](MAINTAINERS.md) 查找所有维护者的邮箱地址。欢迎通过邮件联系我们报告问题或提出疑问。
- [邮件列表](https://groups.google.com/forum/#!forum/hami-project)
## 演讲与参考资料
| | 链接 |
|------------------|-------------------------------------------------------------------------------------------------------------------------|
| CHINA CLOUD COMPUTING INFRASTRUCTURE DEVELOPER CONFERENCE (北京 2024) | [Unlocking heterogeneous AI infrastructure on k8s clusters](https://live.csdn.net/room/csdnnews/3zwDP09S) 从 03:06:15 开始 |
| KubeDay(日本 2024) | [Unlocking Heterogeneous AI Infrastructure K8s Cluster:Leveraging the Power of HAMi](https://www.youtube.com/watch?v=owoaSb4nZwg) |
| KubeCon & AI_dev Open Source GenAI & ML Summit(中国 2024) | [Is Your GPU Really Working Efficiently in the Data Center?N Ways to Improve GPU Usage](https://www.youtube.com/watch?v=ApkyK3zLF5Q) |
| KubeCon & AI_dev Open Source GenAI & ML Summit(中国 2024) | [Unlocking Heterogeneous AI Infrastructure K8s Cluster](https://www.youtube.com/watch?v=kcGXnp_QShs) |
| KubeCon(欧洲 2024)| [Cloud Native Batch Computing with Volcano: Updates and Future](https://youtu.be/fVYKk6xSOsw) |
## 许可证
HAMi 采用 Apache 2.0 许可证。详情请参阅 [LICENSE](标签:AI, AMD, CUDA, Device Plugin, DNS解析, EVTX分析, GPU, GPU切分, GPU虚拟化, HPC, MLOps, NIDS, Python工具, Scheduler, vGPU, 中间件, 云平台, 人工智能基础设施, 华为昇腾, 子域名突变, 容器化, 开源项目, 异构计算, 日志审计, 深度学习, 算力共享, 算力管理, 自动化代码审查, 虚拟化, 请求拦截, 资源调度, 资源隔离