Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
86 changes: 86 additions & 0 deletions i18n/zh/docusaurus-plugin-content-docs/version-v2.7.0.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
{
"version.label": {
"message": "下一个",
"description": "The label for version current"
},
"sidebar.docs.category.Core Concepts": {
"message": "核心概念",
"description": "The label for category Core Concepts in sidebar docs"
},
"sidebar.docs.category.Get Started": {
"message": "开始使用",
"description": "The label for category Get Started in sidebar docs"
},
"sidebar.docs.category.Installation": {
"message": "安装",
"description": "The label for category Installation in sidebar docs"
},
"sidebar.docs.category.User Guide": {
"message": "用户指南",
"description": "The label for category User Guide in sidebar docs"
},
"sidebar.docs.category.Monitoring": {
"message": "监控",
"description": "The label for category Monitoring in sidebar docs"
},
"sidebar.docs.category.Share NVIDIA GPU devices": {
"message": "共享 NVIDIA GPU 设备",
"description": "The label for category Share NVIDIA GPU devices in sidebar docs"
},
"sidebar.docs.category.Examples": {
"message": "示例",
"description": "The label for category Examples in sidebar docs"
},
"sidebar.docs.category.Share Cambricon MLU devices": {
"message": "共享寒武纪 MLU 设备",
"description": "The label for category Share Cambricon MLU devices in sidebar docs"
},
"sidebar.docs.category.Contributor Guide": {
"message": "贡献者指南",
"description": "The label for category Contributor Guide in sidebar docs"
},
"sidebar.docs.category.Developer Guide": {
"message": "开发者指南",
"description": "The label for category Developer Guide in sidebar docs"
},
"sidebar.docs.category.Key Features": {
"message": "核心功能",
"description": "The label for category Key Features in sidebar docs"
},
"sidebar.docs.category.Share Hygon DCU devices": {
"message": "共享海光 DCU 设备",
"description": "The label for category Share Hygon DCU devices in sidebar docs"
},
"sidebar.docs.category.Share Mthreads GPU devices": {
"message": "共享摩尔线程 GPU 设备",
"description": "The label for category Share Mthreads GPU devices in sidebar docs"
},
"sidebar.docs.category.Optimize Metax GPU scheduling": {
"message": "优化沐曦 GPU 调度",
"description": "The label for category Optimize Metax GPU scheduling in sidebar docs"
},
"sidebar.docs.category.Volcano vgpu support": {
"message": "Volcano vGPU 支持",
"description": "The label for category Volcano vgpu support in sidebar docs"
},
"sidebar.docs.category.Share Ascend devices": {
"message": "共享昇腾 GPU 设备",
"description": "The label for category Share Ascend devices in sidebar docs"
},
"sidebar.docs.category.Share Illuvatar GPU devices": {
"message": "共享天数 GPU 设备",
"description": "The label for category Share Illuvatar GPU devices in sidebar docs"
},
"sidebar.docs.category.Share Enflame GCU devices": {
"message": "共享燧原 GCU 设备",
"description": "The label for category Share Enflame GCU devices in sidebar docs"
},
"sidebar.docs.category.Share Metax GPU devices": {
"message": "共享沐曦 GPU 设备",
"description": "The label for category Share Metax GPU devices in sidebar docs"
},
"sidebar.docs.category.Metax GPU topology-aware scheduling": {
"message": "Metax GPU 拓扑感知调度",
"description": "The label for category Metax GPU topology-aware scheduling in sidebar docs"
}
}
194 changes: 194 additions & 0 deletions i18n/zh/docusaurus-plugin-content-docs/version-v2.7.0/FAQ/FAQ.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@
---
title: 常见问题
---


## 支持的设备厂商及具体型号

| **GPU 厂商** | **GPU 型号** | **粒度** | **多 GPU 支持** |
| --- | --- | --- | --- |
| NVIDIA | 几乎所有主流消费级和数据中心 GPU | 核心 1%,内存 1M | 支持。多 GPU 仍可通过虚拟化进行拆分和共享。 |
| 昇腾 | 910A、910B2、910B3、310P | 最小粒度取决于卡类型模板。参考[官方模板](https://www.hiascend.com/document/detail/zh/mindx-dl/50rc1/AVI/cpaug/cpaug_0005.html)。 | 支持,但当 `npu > 1` 时不支持拆分,整卡独占。 |
| 海光 | Z100、Z100L、K100-AI | 核心 1%,内存 1M | 支持,但当 `dcu > 1` 时不支持拆分,整卡独占。 |
| 寒武纪 | 370、590 | 核心 1%,内存 256M | 支持,但当 `mlu > 1` 时不支持拆分,整卡独占。 |
| 天数智芯 | 全部 | 核心 1%,内存 256M | 支持,但当 `gpu > 1` 时不支持拆分,整卡独占。 |
| 摩尔线程 | MTT S4000 | 核心为 1 个核心组,内存 512M | 支持,但当 `gpu > 1` 时不支持拆分,整卡独占。 |
| 魅特思 | MXC500 | 不支持拆分,只能整卡分配。 | 支持,但所有分配均为整卡。 |

## 什么是 vGPU?为什么看到 10 个 vGPU 却无法在同一张卡上分配两个 vGPU?

**简要说明**

vGPU 通过逻辑划分方式提升 GPU 利用率,使多个任务共享同一块物理 GPU。设置 `deviceSplitCount: 10` 表示该 GPU 最多可同时服务 10 个任务,但并不允许一个任务使用该 GPU 上的多个 vGPU。

---

### vGPU 的概念

vGPU 是通过虚拟化在物理 GPU 上创建的逻辑实例,使多个任务可共享同一个物理 GPU。例如配置为 `deviceSplitCount: 10`,表示该物理 GPU 最多可被分配给 10 个任务。这种分配并不会增加物理资源,仅改变逻辑可见性。

**为什么无法在同一张卡上分配两个 vGPU?**

1. **vGPU 的含义**
vGPU 是物理 GPU 的不同任务视图,并非物理资源的划分。当任务请求 `nvidia.com/gpu: 2`,它被理解为需要两张物理 GPU,而非同一张卡上的两个 vGPU。

2. **资源分配机制**
vGPU 的设计初衷是让多个任务共享一张 GPU,而不是让单个任务绑定多个 vGPU。`deviceSplitCount: 10` 表示最多有 10 个任务可以并发共享此 GPU,并不支持一个任务使用多个 vGPU。

3. **容器与节点视图一致性**
容器中的 GPU UUID 与节点上的物理 GPU UUID 是一致的,即反映的是同一块 GPU。虽然可见多个 vGPU,但这些是逻辑视图而非独立资源。

4. **设计目的**
vGPU 的设计是为了 **让一张 GPU 可供多个任务共享**,而不是 **让一个任务使用多个 vGPU**。vGPU 超售的目标是提升资源利用率,而非扩展单个任务的计算能力。

## HAMi 的 `nvidia.com/priority` 字段仅支持两级,如何在资源紧张时实现多级用户自定义优先级的排队调度?

**简要说明**

HAMi 的两级优先级用于同一张卡内任务的运行时抢占。若需支持多级用户自定义的任务调度优先级,可将 HAMi 与 **Volcano** 集成,利用其队列调度功能实现多级任务分配与抢占。

---

HAMi 原生的 `nvidia.com/priority` 字段(0 为高优先级,1 为低/默认)是为 **单卡内运行时抢占场景** 设计的。例如一个低优先级训练任务正在运行,若此时有高优先级的推理任务到来,高优先级任务会暂停低优任务,占用资源,完成后低优任务再恢复。此机制仅适用于单设备上的资源抢占,并非用于调度系统中多个任务队列的优先级排序。

若需在资源不足、多个任务排队等待的场景中,按照用户提交的多级优先级进行调度,HAMi 本身不具备此能力。

但你仍然可以通过与调度器 **Volcano** 集成来实现:

1. **Volcano 实现多级调度优先级**:
- Volcano 支持定义多个具有不同优先级的队列;
- 可根据队列优先级决定任务的资源分配顺序,并可对任务间进行抢占,支持 HAMi 管理的 vGPU 资源。

2. **HAMi 管理 GPU 共享与运行时优先级**:
- HAMi 可通过其 [volcano-vgpu-device-plugin](https://github.com/Project-HAMi/volcano-vgpu-device-plugin) 与 Volcano 集成;
- Volcano 负责任务队列排序,HAMi 则负责实际运行时的 GPU 共享与抢占逻辑。

**总结**:HAMi 的优先级机制用于卡内任务的运行时抢占;若要实现多级任务调度优先级,应结合 **Volcano 与 HAMi** 使用。

## 与其他开源工具的集成情况

**已支持**:

- **Volcano**:通过 [`volcano-vgpu-device-plugin`](https://github.com/Project-HAMi/volcano-vgpu-device-plugin) 与 Volcano 集成,实现 GPU 资源调度与管理。
- **Koordinator**:支持与 Koordinator 集成,实现端到端的 GPU 共享。通过在节点部署 HAMi-core 并在 Pod 中配置 label 和资源请求,Koordinator 能够利用 HAMi 的 GPU 隔离能力。

配置说明参见:[Device Scheduling - GPU Share With HAMi](https://koordinator.sh/docs/user-manuals/device-scheduling-gpu-share-with-hami/)

**暂不支持**:

- **KubeVirt 与 Kata Containers**:由于它们依赖虚拟化进行资源隔离,而 HAMi 的 GPU 插件依赖直接挂载 GPU,无法兼容。若要支持需重构设备分配逻辑,但会增加性能开销,HAMi 当前优先支持高性能直挂场景。

## 为什么我的 Pod 输出中有 `[HAMI-core Warn(...)]` 日志?可以关闭吗?

这是正常日志,可忽略。如需关闭,可在容器中设置环境变量 `LIBCUDA_LOG_LEVEL=0`。

## HAMi 支持多节点、多 GPU 分布式训练吗?支持跨节点和跨 GPU 吗?

**简要说明**

HAMi 支持多节点多 GPU 分布式训练,单个 Pod 可使用同节点多个 GPU,跨节点则通过多个 Pod 配合分布式框架实现。

---

### 多节点多 GPU 分布式训练

在 Kubernetes 中,HAMi 支持通过在不同节点运行多个 Pod,结合分布式框架(如 PyTorch、TensorFlow、Horovod),实现多节点多 GPU 协同训练。每个 Pod 使用本地 GPU,通过 NCCL、RDMA 等高性能网络通信。

### 跨节点与跨 GPU 场景

1. **跨节点**:多个 Pod 分布在不同节点上,节点间通过网络同步梯度和参数;
2. **跨 GPU**:单个 Pod 可使用所在节点内的多个 GPU。

**注意**:一个 Pod 无法跨节点。需采用多 Pod 分布式训练,由分布式框架协调。

## HAMi 插件、Volcano 插件、NVIDIA 官方插件三者的关系与兼容性

**简要说明**

同一节点只能启用一个 GPU 插件,避免资源冲突。

---

### 插件关系说明

三种插件都用于 GPU 资源管理,但适用场景及资源汇报方式不同:

- **HAMi 插件**
- 使用扩展资源名 `nvidia.com/gpu`;
- 支持 HAMi 的 GPU 管理能力(如 vGPU 拆分、自定义调度);
- 适用于复杂资源管理场景。

- **Volcano 插件**
- 使用扩展资源名 `volcano.sh/vgpu-number`;
- 为 Volcano 提供 vGPU 虚拟化资源;
- 适合分布式任务、细粒度调度场景。

- **NVIDIA 官方插件**
- 使用扩展资源名 `nvidia.com/gpu`;
- 提供基本 GPU 分配功能;
- 适合直接使用物理 GPU 的稳定场景。

### 是否可共存

- **HAMi 与 NVIDIA 插件**:不建议共存,会产生资源冲突;
- **HAMi 与 Volcano 插件**:理论上可共存,但推荐只启用一个;
- **NVIDIA 与 Volcano 插件**:理论上可共存,但不建议混合使用。

## 为什么 Node Capacity 中只有 `nvidia.com/gpu` 而没有 `nvidia.com/gpucores` 或 `nvidia.com/gpumem`?

**简要说明**

Kubernetes 的 Device Plugin 每次只能上报一种资源类型。HAMi 将核心数和内存信息以 Node 注解方式记录供调度器使用。

---

### Device Plugin 的设计限制

- Device Plugin 接口(如 Registration、ListAndWatch)仅允许每个插件实例上报一个资源;
- 这简化了资源管理,但限制了同时上报多个指标(如核心和内存)。

### HAMi 的实现

- HAMi 将 GPU 详细信息(如算力、内存、型号)存储为 **节点注解**,供调度器解析;
- 示例:
```yaml
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,...

### 后续问题说明

**为什么使用 `volcano-vgpu-device-plugin` 时 Node Capacity 中会出现 `volcano.sh/vgpu-number` 和 `volcano.sh/vgpu-memory`?**

- `volcano-vgpu-device-plugin` 是通过 Kubernetes API **直接补丁方式**将 `volcano.sh/vgpu-number` 和 `volcano.sh/vgpu-memory` 写入 Node 的 `capacity` 和 `allocatable` 字段中,而不是通过标准的 Device Plugin 接口进行注册。
- **注意**:通过这种方式注册的资源并不受 kubelet 的标准机制管理,**kubelet 无法自动更新或释放这些资源**。

---

## 为什么某些国产厂商不需要单独安装运行时?

某些国产厂商(例如:**海光**、**寒武纪**)的 Device Plugin 插件已内置了设备发现与挂载的能力,因此不再需要额外的运行时组件。
相比之下,**NVIDIA** 和 **昇腾** 等厂商的插件则依赖运行时来完成以下功能:

- 环境变量和软件依赖配置;
- 设备节点挂载;
- 高级功能(如拓扑感知、NUMA、性能隔离等)支持。

---

**简要总结**

当官方插件无法满足高级功能(如缺少必要信息)或引入配置复杂性时,**HAMi 会选择自研 Device Plugin 插件**,以确保调度器获取完整资源信息。

---

HAMi 的调度器需要从节点获取足够的 GPU 信息来完成资源调度和设备分配。主要通过以下三种方式:

1. **Patch 节点注解(Annotations)**;
2. **通过标准 Device Plugin 接口上报资源给 kubelet**;
3. **直接修改节点的 `status.capacity` 与 `status.allocatable` 字段**。

---

**为什么 HAMi 要自研插件?举例如下:**

- **昇腾插件问题**:官方插件需为每种卡类型部署不同插件,HAMi 将其抽象为统一模板,简化集成;
- **NVIDIA 插件问题**:无法支持如 GPU 核心/内存比例限制、GPU 资源超售、NUMA 感知等高级功能,HAMi 需定制插件实现这些调度优化功能。
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
title: readme
slug: /readme
---
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
---
title: HAMi 采用者
---

# HAMi 采用者

您和您的组织正在使用 HAMi?太棒了!我们很乐意听到您的使用反馈!💖

## 添加您的信息

[这里](https://github.com/Project-HAMi/website/blob/master/src/pages/adopters.mdx)列出了在生产环境中采用 HAMi 项目的组织。

您只需为您的公司添加一个条目,合并后它将自动添加到我们的网站中。

要添加您的组织,请按照以下步骤操作:

1. Fork [HAMi-io/website](https://github.com/Project-HAMi/website) 仓库。
2. 使用 `git clone https://github.com/<您的-GH-用户名>/website.git` 将其克隆到本地。
3. (可选) 将您组织的 logo 添加到 `static/img/supporters` 目录。建议将 logo 文件命名为 `<公司名>.png`。
这些内容不会用于商业用途。
4. 编辑 [adopters.mdx](https://github.com/Project-HAMi/website/blob/master/src/pages/adopters.mdx) 中的采用者列表。
您可以参考下面的示例表格格式。

| 公司名称 | 联系方式 | 环境 | 场景描述 |
| -------- | --------------------------------- | ---- | ------------------------------ |
| 我的公司 | [email](mailto:[email protected]) | 生产 | We use HAMi to manage our GPU. |

5. 保存文件,然后执行 `git add -A` 并使用 `git commit -s -m "Add MY-ORG to adopters"` 提交。
6. 使用 `git push origin main` 推送提交。
7. 向 [HAMi-io/website](https://github.com/Project-HAMi/website) 开启一个拉取请求(Pull Request),预览构建将会出现。

非常感谢您成为我们社区的一员 - 我们非常感激!
Loading