Skip to content

Commit fe8ab84

Browse files
Merge pull request #93 from SamYuan1990/usingDeepSeekV3Fori18n
try to use deepseek v3 for i18n
2 parents e7779eb + f650910 commit fe8ab84

File tree

9 files changed

+478
-26
lines changed

9 files changed

+478
-26
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
---
2+
title: 贡献者名单
3+
---
4+
5+
- 请查阅[HAMi社区成员制度](https://github.com/Project-HAMi/community/blob/main/community-membership.md)了解如何成为贡献者。
6+
- 完整[维护者名单](https://github.com/Project-HAMi/community/blob/main/MAINTAINERS.md)请参见此处。
7+
8+
以下贡献者(按字母顺序排列)已签署或提交了HAMi代码库的提交记录:
9+
10+
| 贡献者 | 邮箱 |
11+
|-----------------|-----------|
12+
| [archlitchi](https://github.com/archlitchi) | [email protected]|
13+
| [atttx123](https://github.com/atttx123) | - |
14+
| [chaunceyjiang](https://github.com/chaunceyjiang) | [email protected]|
15+
| [CoderTH](https://github.com/CoderTH) | - |
16+
| [gsakun](https://github.com/gsakun) | - |
17+
| [lengrongfu](https://github.com/lengrongfu) | - |
18+
| [ouyangluwei](https://github.com/ouyangluwei163) | [email protected] |
19+
| peizhaoyou | [email protected] |
20+
| [wawa0210](https://github.com/wawa0210) | [email protected] |
21+
| [whybeyoung](https://github.com/whybeyoung) | - |
22+
| [yinyu](https://github.com/Nimbus318) | [email protected] |
23+
| [yangshiqi](https://github.com/yangshiqi) | [email protected] |
24+
| zhengbingxian | - |
Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,47 @@
11
---
2-
slug: /
3-
title: 什么是 HAMi?
2+
title: 什么是HAMi?
43
translated: true
4+
slug: /
55
---
66

7-
## HAMi: 异构AI计算虚拟化中间件
7+
## 目录 {#toc}
8+
9+
- [HAMi:异构AI计算虚拟化中间件](#hami-heterogeneous-ai-computing-virtualization-middleware)
10+
- [为什么选择HAMi](#why-hami)
11+
- [后续步骤](#whats-next)
12+
13+
## HAMi:异构AI计算虚拟化中间件 {#hami-heterogeneous-ai-computing-virtualization-middleware}
814

9-
异构AI计算虚拟化中间件(HAMi),前称为k8s-vGPU-scheduler,是一个设计用于管理k8s集群中异构AI计算设备的“全合一”图表。它可以提供在任务之间共享异构AI设备的能力
15+
异构AI计算虚拟化中间件(HAMi),前身为k8s-vGPU-scheduler,是一个专为管理k8s集群中异构AI计算设备而设计的"一体化"Helm Chart。它能够实现异构AI设备在多个任务间的共享能力
1016

11-
HAMi是一个[云原生计算基金会](https://cncf.io/)的沙箱项目和[景观项目](https://landscape.cncf.io/?item=orchestration-management--scheduling-orchestration--hami)以及[CNAI景观项目](https://landscape.cncf.io/?group=cnai&item=cnai--general-orchestration--hami)
17+
HAMi是[云原生计算基金会(CNCF)](https://cncf.io/)的SandBox项目,同时被收录于[CNCF技术全景图-编排与调度类目](https://landscape.cncf.io/?item=orchestration-management--scheduling-orchestration--hami)[CNAI技术全景图](https://landscape.cncf.io/?group=cnai&item=cnai--general-orchestration--hami)
1218

13-
## 为什么选择HAMi:
14-
- __设备共享__
15-
- 支持多种异构AI计算设备
16-
- 支持多设备容器的设备共享
19+
## 为什么选择HAMi {#why-hami}
1720

18-
- __设备内存控制__
19-
- 容器内的硬限制
20-
- 支持动态设备内存分配
21-
- 支持按MB或百分比分配内存
21+
- **设备共享**
22+
- 支持多种异构AI计算设备(如NVIDIA GPU/CUDA)
23+
- 支持多设备容器的设备共享
2224

23-
- __设备规格__
24-
- 支持指定某种类型的异构AI计算设备
25-
- 支持使用设备UUID指定某个异构AI计算设备
25+
- **设备内存控制**
26+
- 容器内硬性内存限制
27+
- 支持动态设备内存分配
28+
- 支持按MB或百分比分配内存
2629

27-
- __易于尝试__
28-
- 对容器内的任务透明
29-
- 使用helm安装/卸载,简单且环保
30+
- **设备规格指定**
31+
- 支持指定特定类型的异构AI计算设备
32+
- 支持通过设备UUID指定具体设备
3033

31-
- __开放和中立__
32-
- 由互联网、金融、制造、云服务提供商等共同发起
33-
- 目标是与CNCF进行开放治理
34+
- **开箱即用**
35+
- 对容器内任务透明无感
36+
- 通过helm一键安装/卸载,简洁环保
3437

38+
- **开放中立**
39+
- 由互联网、金融、制造业、云服务商等多领域联合发起
40+
- 以CNCF开放治理为目标
3541

36-
## 下一步
42+
## 后续步骤 {#whats-next}
3743

38-
以下是一些推荐的下一步操作
44+
推荐继续了解
3945

40-
- 了解HAMi的[架构](./architecture.md)
41-
- 开始[安装HAMi](../installation/prequisities.md)
46+
- 学习HAMi的[架构设计](./architecture.md)
47+
- 开始[安装HAMi](../installation/prequisities.md)
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
---
2+
title: 昆仑芯拓扑感知调度
3+
---
4+
5+
## 背景
6+
7+
当单个P800服务器配置多块XPU时,若GPU连接或位于同一NUMA节点内(如下图所示),可获得最优性能表现。这种配置会在服务器内所有GPU之间形成特定拓扑关系。
8+
9+
![img](../resources/kunlunxin_topo.jpg)
10+
11+
当用户作业申请特定数量的`kunlunxin.com/xpu`资源时,Kubernetes会将pod调度到合适节点以最小化资源碎片并保持高性能。选定节点后,XPU设备会根据以下规则进行细粒度资源分配:
12+
13+
1. 仅允许1、2、4或8卡分配方案
14+
2. 1/2/4卡分配不得跨NUMA节点
15+
3. 分配后应最小化资源碎片
16+
17+
## 过滤阶段
18+
19+
过滤阶段识别所有符合分配条件的节点。针对每个节点,系统会筛选最优XPU组合方案并缓存,供评分阶段使用。筛选流程如下图所示:
20+
21+
![img](../resources/kunlunxin_filter.png)
22+
23+
## 评分阶段
24+
25+
在评分阶段,所有通过过滤的节点会接受评估并打分以选择最优调度目标。我们引入**MTF**(最小填充分任务数)指标,用于量化节点在分配后容纳未来任务的能力。
26+
27+
下表展示了XPU占用情况与对应MTF值的示例:
28+
29+
| XPU占用状态 | MTF | 说明 |
30+
|----------------|-----|-------------|
31+
| 11111111 | 0 | 完全占用,无法调度新任务 |
32+
| 00000000 | 1 | 可被一个8-XPU任务完全占用 |
33+
| 00000011 | 2 | 可调度一个4-XPU任务和一个2-XPU任务 |
34+
| 00000001 | 3 | 可容纳一个4-XPU、一个2-XPU和一个1-XPU任务 |
35+
| 00010001 | 4 | 可容纳两个2-XPU任务和两个1-XPU任务 |
36+
37+
节点得分基于分配前后的**MTF差值**计算。差值越小表示适配度越高,得分也越高。具体评分逻辑如下:
38+
39+
| MTF差值 | 得分 | 示例 |
40+
|------------|-------|---------|
41+
| -1 | 2000 | 00000111->00001111 |
42+
| 0 | 1000 | 00000111->00110111 |
43+
| 1 | 0 | 00001111->00011111 |
44+
| 2 | -1000 | 00000000->00000001 |
45+
46+
## 绑定阶段
47+
48+
在绑定阶段,分配结果会以注解形式注入pod。例如:
49+
50+
```
51+
BAIDU_COM_DEVICE_IDX=0,1,2,3
52+
```
Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
---
2+
title: 使用helm部署HAMi
3+
---
4+
5+
## 目录 {#toc}
6+
7+
- [先决条件](#prerequisites)
8+
- [安装步骤](#installation)
9+
- [演示](#demo)
10+
11+
本指南将涵盖:
12+
13+
- 为每个GPU节点配置nvidia容器运行时
14+
- 使用helm安装HAMi
15+
- 启动vGPU任务
16+
- 验证容器内设备资源是否受限
17+
18+
## 先决条件 {#prerequisites}
19+
20+
- [Helm](https://helm.sh/zh/docs/) v3+版本
21+
- [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) v1.16+版本
22+
- [CUDA](https://developer.nvidia.com/cuda-toolkit) v10.2+版本
23+
- [NVIDIA驱动](https://www.nvidia.cn/drivers/unix/) v440+版本
24+
25+
## 安装步骤 {#installation}
26+
27+
### 1. 配置nvidia-container-toolkit {#configure-nvidia-container-toolkit}
28+
29+
<summary> 配置nvidia-container-toolkit </summary>
30+
31+
在所有GPU节点执行以下操作。
32+
33+
本文档假设已预装NVIDIA驱动和`nvidia-container-toolkit`,并已将`nvidia-container-runtime`配置为默认底层运行时。
34+
35+
参考:[nvidia-container-toolkit安装指南](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html)
36+
37+
#### 基于Debian系统(使用`Docker``containerd`)示例 {#example-for-debian-based-systems-with-docker-and-containerd}
38+
39+
##### 安装`nvidia-container-toolkit` {#install-the-nvidia-container-toolkit}
40+
41+
```bash
42+
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
43+
curl -s -L https://nvidia.github.io/libnvidia-container/gpgkey | sudo apt-key add -
44+
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
45+
sudo tee /etc/apt/sources.list.d/libnvidia-container.list
46+
47+
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
48+
```
49+
50+
##### 配置`Docker` {#configure-docker}
51+
52+
当使用`Docker`运行`Kubernetes`时,编辑配置文件(通常位于`/etc/docker/daemon.json`),将`nvidia-container-runtime`设为默认底层运行时:
53+
54+
```json
55+
{
56+
"default-runtime": "nvidia",
57+
"runtimes": {
58+
"nvidia": {
59+
"path": "/usr/bin/nvidia-container-runtime",
60+
"runtimeArgs": []
61+
}
62+
}
63+
}
64+
```
65+
66+
然后重启`Docker`
67+
68+
```bash
69+
sudo systemctl daemon-reload && systemctl restart docker
70+
```
71+
72+
##### 配置`containerd` {#configure-containerd}
73+
74+
当使用`containerd`运行`Kubernetes`时,修改配置文件(通常位于`/etc/containerd/config.toml`),将`nvidia-container-runtime`设为默认底层运行时:
75+
76+
```toml
77+
version = 2
78+
[plugins]
79+
[plugins."io.containerd.grpc.v1.cri"]
80+
[plugins."io.containerd.grpc.v1.cri".containerd]
81+
default_runtime_name = "nvidia"
82+
83+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
84+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia]
85+
privileged_without_host_devices = false
86+
runtime_engine = ""
87+
runtime_root = ""
88+
runtime_type = "io.containerd.runc.v2"
89+
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia.options]
90+
BinaryName = "/usr/bin/nvidia-container-runtime"
91+
```
92+
93+
然后重启`containerd`
94+
95+
```bash
96+
sudo systemctl daemon-reload && systemctl restart containerd
97+
```
98+
99+
#### 2. 标记节点 {#label-your-nodes}
100+
101+
通过添加"gpu=on"标签将GPU节点标记为可调度HAMi任务。未标记的节点将无法被调度器管理。
102+
103+
```bash
104+
kubectl label nodes {节点ID} gpu=on
105+
```
106+
107+
#### 3. 使用helm部署HAMi {#deploy-hami-using-helm}
108+
109+
首先通过以下命令确认Kubernetes版本:
110+
111+
```bash
112+
kubectl version
113+
```
114+
115+
然后添加helm仓库:
116+
117+
```bash
118+
helm repo add hami-charts https://project-hami.github.io/HAMi/
119+
```
120+
121+
安装时需设置Kubernetes调度器镜像版本与集群版本匹配。例如集群版本为1.16.8时,使用以下命令部署:
122+
123+
```bash
124+
helm install hami hami-charts/hami \
125+
--set scheduler.kubeScheduler.imageTag=v1.16.8 \
126+
-n kube-system
127+
```
128+
129+
若一切正常,可见vgpu-device-plugin和vgpu-scheduler的Pod均处于Running状态
130+
131+
### 演示 {#demo}
132+
133+
#### 1. 提交演示任务 {#submit-demo-task}
134+
135+
容器现在可通过`nvidia.com/gpu`资源类型申请NVIDIA vGPU:
136+
137+
```yaml
138+
apiVersion: v1
139+
kind: Pod
140+
metadata:
141+
name: gpu-pod
142+
spec:
143+
containers:
144+
- name: ubuntu-container
145+
image: ubuntu:18.04
146+
command: ["bash", "-c", "sleep 86400"]
147+
resources:
148+
limits:
149+
nvidia.com/gpu: 1 # 申请1个vGPU
150+
nvidia.com/gpumem: 10240 # 每个vGPU包含10240m设备内存(可选,整型)
151+
```
152+
153+
#### 验证容器内资源限制 {#verify-in-container-resouce-control}
154+
155+
执行查询命令:
156+
157+
```bash
158+
kubectl exec -it gpu-pod nvidia-smi
159+
```
160+
161+
预期输出:
162+
163+
```text
164+
[HAMI-core Msg(28:140561996502848:libvgpu.c:836)]: 初始化中.....
165+
2024年4月10日 星期三 09:28:58
166+
+-----------------------------------------------------------------------------------------+
167+
| NVIDIA-SMI 550.54.15 驱动版本: 550.54.15 CUDA版本: 12.4 |
168+
|-----------------------------------------+------------------------+----------------------+
169+
| GPU 名称 持久化-M | 总线ID 显存.A | 易失性ECC错误 |
170+
| 风扇 温度 性能 功耗:使用/上限 | 显存使用率 | GPU利用率 计算模式 |
171+
| | | MIG模式 |
172+
|=========================================+========================+======================|
173+
| 0 Tesla V100-PCIE-32GB 启用 | 00000000:3E:00.0 关闭 | 0 |
174+
| N/A 29C P0 24W/250W | 0MiB/10240MiB | 0% 默认模式 |
175+
| | | N/A |
176+
+-----------------------------------------+------------------------+----------------------+
177+
178+
+-----------------------------------------------------------------------------------------+
179+
| 进程: |
180+
| GPU GI CI 进程ID 类型 进程名称 显存使用量 |
181+
| ID ID |
182+
|=========================================================================================|
183+
| 未找到运行中的进程 |
184+
+-----------------------------------------------------------------------------------------+
185+
[HAMI-core Msg(28:140561996502848:multiprocess_memory_limit.c:434)]: 调用退出处理程序28
186+
```
348 KB
Loading
33.6 KB
Loading

0 commit comments

Comments
 (0)