Skip to content

Commit ae2b375

Browse files
authored
Merge pull request #108 from Project-HAMi/release/v2.7.0
Release v2.7.0 documentation
2 parents 62faf4d + 9d1906c commit ae2b375

File tree

489 files changed

+12826
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

489 files changed

+12826
-0
lines changed
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
{
2+
"version.label": {
3+
"message": "下一个",
4+
"description": "The label for version current"
5+
},
6+
"sidebar.docs.category.Core Concepts": {
7+
"message": "核心概念",
8+
"description": "The label for category Core Concepts in sidebar docs"
9+
},
10+
"sidebar.docs.category.Get Started": {
11+
"message": "开始使用",
12+
"description": "The label for category Get Started in sidebar docs"
13+
},
14+
"sidebar.docs.category.Installation": {
15+
"message": "安装",
16+
"description": "The label for category Installation in sidebar docs"
17+
},
18+
"sidebar.docs.category.User Guide": {
19+
"message": "用户指南",
20+
"description": "The label for category User Guide in sidebar docs"
21+
},
22+
"sidebar.docs.category.Monitoring": {
23+
"message": "监控",
24+
"description": "The label for category Monitoring in sidebar docs"
25+
},
26+
"sidebar.docs.category.Share NVIDIA GPU devices": {
27+
"message": "共享 NVIDIA GPU 设备",
28+
"description": "The label for category Share NVIDIA GPU devices in sidebar docs"
29+
},
30+
"sidebar.docs.category.Examples": {
31+
"message": "示例",
32+
"description": "The label for category Examples in sidebar docs"
33+
},
34+
"sidebar.docs.category.Share Cambricon MLU devices": {
35+
"message": "共享寒武纪 MLU 设备",
36+
"description": "The label for category Share Cambricon MLU devices in sidebar docs"
37+
},
38+
"sidebar.docs.category.Contributor Guide": {
39+
"message": "贡献者指南",
40+
"description": "The label for category Contributor Guide in sidebar docs"
41+
},
42+
"sidebar.docs.category.Developer Guide": {
43+
"message": "开发者指南",
44+
"description": "The label for category Developer Guide in sidebar docs"
45+
},
46+
"sidebar.docs.category.Key Features": {
47+
"message": "核心功能",
48+
"description": "The label for category Key Features in sidebar docs"
49+
},
50+
"sidebar.docs.category.Share Hygon DCU devices": {
51+
"message": "共享海光 DCU 设备",
52+
"description": "The label for category Share Hygon DCU devices in sidebar docs"
53+
},
54+
"sidebar.docs.category.Share Mthreads GPU devices": {
55+
"message": "共享摩尔线程 GPU 设备",
56+
"description": "The label for category Share Mthreads GPU devices in sidebar docs"
57+
},
58+
"sidebar.docs.category.Optimize Metax GPU scheduling": {
59+
"message": "优化沐曦 GPU 调度",
60+
"description": "The label for category Optimize Metax GPU scheduling in sidebar docs"
61+
},
62+
"sidebar.docs.category.Volcano vgpu support": {
63+
"message": "Volcano vGPU 支持",
64+
"description": "The label for category Volcano vgpu support in sidebar docs"
65+
},
66+
"sidebar.docs.category.Share Ascend devices": {
67+
"message": "共享昇腾 GPU 设备",
68+
"description": "The label for category Share Ascend devices in sidebar docs"
69+
},
70+
"sidebar.docs.category.Share Illuvatar GPU devices": {
71+
"message": "共享天数 GPU 设备",
72+
"description": "The label for category Share Illuvatar GPU devices in sidebar docs"
73+
},
74+
"sidebar.docs.category.Share Enflame GCU devices": {
75+
"message": "共享燧原 GCU 设备",
76+
"description": "The label for category Share Enflame GCU devices in sidebar docs"
77+
},
78+
"sidebar.docs.category.Share Metax GPU devices": {
79+
"message": "共享沐曦 GPU 设备",
80+
"description": "The label for category Share Metax GPU devices in sidebar docs"
81+
},
82+
"sidebar.docs.category.Metax GPU topology-aware scheduling": {
83+
"message": "Metax GPU 拓扑感知调度",
84+
"description": "The label for category Metax GPU topology-aware scheduling in sidebar docs"
85+
}
86+
}
Lines changed: 194 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,194 @@
1+
---
2+
title: 常见问题
3+
---
4+
5+
6+
## 支持的设备厂商及具体型号
7+
8+
| **GPU 厂商** | **GPU 型号** | **粒度** | **多 GPU 支持** |
9+
| --- | --- | --- | --- |
10+
| NVIDIA | 几乎所有主流消费级和数据中心 GPU | 核心 1%,内存 1M | 支持。多 GPU 仍可通过虚拟化进行拆分和共享。 |
11+
| 昇腾 | 910A、910B2、910B3、310P | 最小粒度取决于卡类型模板。参考[官方模板](https://www.hiascend.com/document/detail/zh/mindx-dl/50rc1/AVI/cpaug/cpaug_0005.html)| 支持,但当 `npu > 1` 时不支持拆分,整卡独占。 |
12+
| 海光 | Z100、Z100L、K100-AI | 核心 1%,内存 1M | 支持,但当 `dcu > 1` 时不支持拆分,整卡独占。 |
13+
| 寒武纪 | 370、590 | 核心 1%,内存 256M | 支持,但当 `mlu > 1` 时不支持拆分,整卡独占。 |
14+
| 天数智芯 | 全部 | 核心 1%,内存 256M | 支持,但当 `gpu > 1` 时不支持拆分,整卡独占。 |
15+
| 摩尔线程 | MTT S4000 | 核心为 1 个核心组,内存 512M | 支持,但当 `gpu > 1` 时不支持拆分,整卡独占。 |
16+
| 魅特思 | MXC500 | 不支持拆分,只能整卡分配。 | 支持,但所有分配均为整卡。 |
17+
18+
## 什么是 vGPU?为什么看到 10 个 vGPU 却无法在同一张卡上分配两个 vGPU?
19+
20+
**简要说明**
21+
22+
vGPU 通过逻辑划分方式提升 GPU 利用率,使多个任务共享同一块物理 GPU。设置 `deviceSplitCount: 10` 表示该 GPU 最多可同时服务 10 个任务,但并不允许一个任务使用该 GPU 上的多个 vGPU。
23+
24+
---
25+
26+
### vGPU 的概念
27+
28+
vGPU 是通过虚拟化在物理 GPU 上创建的逻辑实例,使多个任务可共享同一个物理 GPU。例如配置为 `deviceSplitCount: 10`,表示该物理 GPU 最多可被分配给 10 个任务。这种分配并不会增加物理资源,仅改变逻辑可见性。
29+
30+
**为什么无法在同一张卡上分配两个 vGPU?**
31+
32+
1. **vGPU 的含义**
33+
vGPU 是物理 GPU 的不同任务视图,并非物理资源的划分。当任务请求 `nvidia.com/gpu: 2`,它被理解为需要两张物理 GPU,而非同一张卡上的两个 vGPU。
34+
35+
2. **资源分配机制**
36+
vGPU 的设计初衷是让多个任务共享一张 GPU,而不是让单个任务绑定多个 vGPU。`deviceSplitCount: 10` 表示最多有 10 个任务可以并发共享此 GPU,并不支持一个任务使用多个 vGPU。
37+
38+
3. **容器与节点视图一致性**
39+
容器中的 GPU UUID 与节点上的物理 GPU UUID 是一致的,即反映的是同一块 GPU。虽然可见多个 vGPU,但这些是逻辑视图而非独立资源。
40+
41+
4. **设计目的**
42+
vGPU 的设计是为了 **让一张 GPU 可供多个任务共享**,而不是 **让一个任务使用多个 vGPU**。vGPU 超售的目标是提升资源利用率,而非扩展单个任务的计算能力。
43+
44+
## HAMi 的 `nvidia.com/priority` 字段仅支持两级,如何在资源紧张时实现多级用户自定义优先级的排队调度?
45+
46+
**简要说明**
47+
48+
HAMi 的两级优先级用于同一张卡内任务的运行时抢占。若需支持多级用户自定义的任务调度优先级,可将 HAMi 与 **Volcano** 集成,利用其队列调度功能实现多级任务分配与抢占。
49+
50+
---
51+
52+
HAMi 原生的 `nvidia.com/priority` 字段(0 为高优先级,1 为低/默认)是为 **单卡内运行时抢占场景** 设计的。例如一个低优先级训练任务正在运行,若此时有高优先级的推理任务到来,高优先级任务会暂停低优任务,占用资源,完成后低优任务再恢复。此机制仅适用于单设备上的资源抢占,并非用于调度系统中多个任务队列的优先级排序。
53+
54+
若需在资源不足、多个任务排队等待的场景中,按照用户提交的多级优先级进行调度,HAMi 本身不具备此能力。
55+
56+
但你仍然可以通过与调度器 **Volcano** 集成来实现:
57+
58+
1. **Volcano 实现多级调度优先级**
59+
- Volcano 支持定义多个具有不同优先级的队列;
60+
- 可根据队列优先级决定任务的资源分配顺序,并可对任务间进行抢占,支持 HAMi 管理的 vGPU 资源。
61+
62+
2. **HAMi 管理 GPU 共享与运行时优先级**
63+
- HAMi 可通过其 [volcano-vgpu-device-plugin](https://github.com/Project-HAMi/volcano-vgpu-device-plugin) 与 Volcano 集成;
64+
- Volcano 负责任务队列排序,HAMi 则负责实际运行时的 GPU 共享与抢占逻辑。
65+
66+
**总结**:HAMi 的优先级机制用于卡内任务的运行时抢占;若要实现多级任务调度优先级,应结合 **Volcano 与 HAMi** 使用。
67+
68+
## 与其他开源工具的集成情况
69+
70+
**已支持**
71+
72+
- **Volcano**:通过 [`volcano-vgpu-device-plugin`](https://github.com/Project-HAMi/volcano-vgpu-device-plugin) 与 Volcano 集成,实现 GPU 资源调度与管理。
73+
- **Koordinator**:支持与 Koordinator 集成,实现端到端的 GPU 共享。通过在节点部署 HAMi-core 并在 Pod 中配置 label 和资源请求,Koordinator 能够利用 HAMi 的 GPU 隔离能力。
74+
75+
配置说明参见:[Device Scheduling - GPU Share With HAMi](https://koordinator.sh/docs/user-manuals/device-scheduling-gpu-share-with-hami/)
76+
77+
**暂不支持**
78+
79+
- **KubeVirt 与 Kata Containers**:由于它们依赖虚拟化进行资源隔离,而 HAMi 的 GPU 插件依赖直接挂载 GPU,无法兼容。若要支持需重构设备分配逻辑,但会增加性能开销,HAMi 当前优先支持高性能直挂场景。
80+
81+
## 为什么我的 Pod 输出中有 `[HAMI-core Warn(...)]` 日志?可以关闭吗?
82+
83+
这是正常日志,可忽略。如需关闭,可在容器中设置环境变量 `LIBCUDA_LOG_LEVEL=0`
84+
85+
## HAMi 支持多节点、多 GPU 分布式训练吗?支持跨节点和跨 GPU 吗?
86+
87+
**简要说明**
88+
89+
HAMi 支持多节点多 GPU 分布式训练,单个 Pod 可使用同节点多个 GPU,跨节点则通过多个 Pod 配合分布式框架实现。
90+
91+
---
92+
93+
### 多节点多 GPU 分布式训练
94+
95+
在 Kubernetes 中,HAMi 支持通过在不同节点运行多个 Pod,结合分布式框架(如 PyTorch、TensorFlow、Horovod),实现多节点多 GPU 协同训练。每个 Pod 使用本地 GPU,通过 NCCL、RDMA 等高性能网络通信。
96+
97+
### 跨节点与跨 GPU 场景
98+
99+
1. **跨节点**:多个 Pod 分布在不同节点上,节点间通过网络同步梯度和参数;
100+
2. **跨 GPU**:单个 Pod 可使用所在节点内的多个 GPU。
101+
102+
**注意**:一个 Pod 无法跨节点。需采用多 Pod 分布式训练,由分布式框架协调。
103+
104+
## HAMi 插件、Volcano 插件、NVIDIA 官方插件三者的关系与兼容性
105+
106+
**简要说明**
107+
108+
同一节点只能启用一个 GPU 插件,避免资源冲突。
109+
110+
---
111+
112+
### 插件关系说明
113+
114+
三种插件都用于 GPU 资源管理,但适用场景及资源汇报方式不同:
115+
116+
- **HAMi 插件**
117+
- 使用扩展资源名 `nvidia.com/gpu`
118+
- 支持 HAMi 的 GPU 管理能力(如 vGPU 拆分、自定义调度);
119+
- 适用于复杂资源管理场景。
120+
121+
- **Volcano 插件**
122+
- 使用扩展资源名 `volcano.sh/vgpu-number`
123+
- 为 Volcano 提供 vGPU 虚拟化资源;
124+
- 适合分布式任务、细粒度调度场景。
125+
126+
- **NVIDIA 官方插件**
127+
- 使用扩展资源名 `nvidia.com/gpu`
128+
- 提供基本 GPU 分配功能;
129+
- 适合直接使用物理 GPU 的稳定场景。
130+
131+
### 是否可共存
132+
133+
- **HAMi 与 NVIDIA 插件**:不建议共存,会产生资源冲突;
134+
- **HAMi 与 Volcano 插件**:理论上可共存,但推荐只启用一个;
135+
- **NVIDIA 与 Volcano 插件**:理论上可共存,但不建议混合使用。
136+
137+
## 为什么 Node Capacity 中只有 `nvidia.com/gpu` 而没有 `nvidia.com/gpucores``nvidia.com/gpumem`
138+
139+
**简要说明**
140+
141+
Kubernetes 的 Device Plugin 每次只能上报一种资源类型。HAMi 将核心数和内存信息以 Node 注解方式记录供调度器使用。
142+
143+
---
144+
145+
### Device Plugin 的设计限制
146+
147+
- Device Plugin 接口(如 Registration、ListAndWatch)仅允许每个插件实例上报一个资源;
148+
- 这简化了资源管理,但限制了同时上报多个指标(如核心和内存)。
149+
150+
### HAMi 的实现
151+
152+
- HAMi 将 GPU 详细信息(如算力、内存、型号)存储为 **节点注解**,供调度器解析;
153+
- 示例:
154+
```yaml
155+
hami.io/node-nvidia-register: GPU-fc28df76-54d2-c387-e52e-5f0a9495968c,10,49140,100,NVIDIA-NVIDIA L40S,0,true:GPU-b97db201-0442-8531-56d4-367e0c7d6edd,10,49140,100,...
156+
157+
### 后续问题说明
158+
159+
**为什么使用 `volcano-vgpu-device-plugin` 时 Node Capacity 中会出现 `volcano.sh/vgpu-number` 和 `volcano.sh/vgpu-memory`?**
160+
161+
- `volcano-vgpu-device-plugin` 是通过 Kubernetes API **直接补丁方式**将 `volcano.sh/vgpu-number` 和 `volcano.sh/vgpu-memory` 写入 Node 的 `capacity` 和 `allocatable` 字段中,而不是通过标准的 Device Plugin 接口进行注册。
162+
- **注意**:通过这种方式注册的资源并不受 kubelet 的标准机制管理,**kubelet 无法自动更新或释放这些资源**。
163+
164+
---
165+
166+
## 为什么某些国产厂商不需要单独安装运行时?
167+
168+
某些国产厂商(例如:**海光**、**寒武纪**)的 Device Plugin 插件已内置了设备发现与挂载的能力,因此不再需要额外的运行时组件。
169+
相比之下,**NVIDIA** 和 **昇腾** 等厂商的插件则依赖运行时来完成以下功能:
170+
171+
- 环境变量和软件依赖配置;
172+
- 设备节点挂载;
173+
- 高级功能(如拓扑感知、NUMA、性能隔离等)支持。
174+
175+
---
176+
177+
**简要总结**
178+
179+
当官方插件无法满足高级功能(如缺少必要信息)或引入配置复杂性时,**HAMi 会选择自研 Device Plugin 插件**,以确保调度器获取完整资源信息。
180+
181+
---
182+
183+
HAMi 的调度器需要从节点获取足够的 GPU 信息来完成资源调度和设备分配。主要通过以下三种方式:
184+
185+
1. **Patch 节点注解(Annotations)**;
186+
2. **通过标准 Device Plugin 接口上报资源给 kubelet**;
187+
3. **直接修改节点的 `status.capacity` 与 `status.allocatable` 字段**。
188+
189+
---
190+
191+
**为什么 HAMi 要自研插件?举例如下:**
192+
193+
- **昇腾插件问题**:官方插件需为每种卡类型部署不同插件,HAMi 将其抽象为统一模板,简化集成;
194+
- **NVIDIA 插件问题**:无法支持如 GPU 核心/内存比例限制、GPU 资源超售、NUMA 感知等高级功能,HAMi 需定制插件实现这些调度优化功能。
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
title: readme
3+
slug: /readme
4+
---
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
---
2+
title: HAMi 采用者
3+
---
4+
5+
# HAMi 采用者
6+
7+
您和您的组织正在使用 HAMi?太棒了!我们很乐意听到您的使用反馈!💖
8+
9+
## 添加您的信息
10+
11+
[这里](https://github.com/Project-HAMi/website/blob/master/src/pages/adopters.mdx)列出了在生产环境中采用 HAMi 项目的组织。
12+
13+
您只需为您的公司添加一个条目,合并后它将自动添加到我们的网站中。
14+
15+
要添加您的组织,请按照以下步骤操作:
16+
17+
1. Fork [HAMi-io/website](https://github.com/Project-HAMi/website) 仓库。
18+
2. 使用 `git clone https://github.com/<您的-GH-用户名>/website.git` 将其克隆到本地。
19+
3. (可选) 将您组织的 logo 添加到 `static/img/supporters` 目录。建议将 logo 文件命名为 `<公司名>.png`
20+
这些内容不会用于商业用途。
21+
4. 编辑 [adopters.mdx](https://github.com/Project-HAMi/website/blob/master/src/pages/adopters.mdx) 中的采用者列表。
22+
您可以参考下面的示例表格格式。
23+
24+
| 公司名称 | 联系方式 | 环境 | 场景描述 |
25+
| -------- | --------------------------------- | ---- | ------------------------------ |
26+
| 我的公司 | [email](mailto:[email protected]) | 生产 | We use HAMi to manage our GPU. |
27+
28+
5. 保存文件,然后执行 `git add -A` 并使用 `git commit -s -m "Add MY-ORG to adopters"` 提交。
29+
6. 使用 `git push origin main` 推送提交。
30+
7.[HAMi-io/website](https://github.com/Project-HAMi/website) 开启一个拉取请求(Pull Request),预览构建将会出现。
31+
32+
非常感谢您成为我们社区的一员 - 我们非常感激!

0 commit comments

Comments
 (0)