Skip to content
2 changes: 1 addition & 1 deletion docs/developers/protocol.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ An example is shown below:
```text
hami.io/node-handshake-nvidia: Reported 2024-01-23 04:30:04.434037031 +0000 UTC m=+1104711.777756895
hami.io/node-handshake-mlu: Requesting_2024.01.10 04:06:57
hami.io/node-mlu-register: MLU-45013011-2257-0000-0000-000000000000,10,23308,0,MLU-MLU370-X4,0,false:MLU-54043011-2257-0000-0000-000000000000,10,23308,0,
hami.io/node-mlu-register: MLU-45013011-2257-0000-0000-000000000000,10,23308,0,MLU-MLU370-X4,0,false:MLU-54043011-2257-0000-0000-000000000000,10,23308,0,MLU-MLU370-X4,0,false:
Comment thread
moezdil marked this conversation as resolved.
Resolved
hami.io/node-nvidia-register: GPU-00552014-5c87-89ac-b1a6-7b53aa24b0ec,10,32768,100,NVIDIA-Tesla V100-PCIE-32GB,0,true:GPU-0fc3eda5-e98b-a25b-5b0d-cf5c855d1448,10,32768,100,NVIDIA-Tesla V100-PCIE-32GB,0,true:

```
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,33 +5,37 @@ translated: true

## 设备注册

为了进行更准确的调度,HAMi 调度器需要在设备注册时感知设备的规格,包括 UUID、显存、计算能力、型号、numa 数量等。
<img src="/img/docs/common/developers/protocol/protocol-register.png" width="600px" alt="HAMi 设备注册协议图,显示节点注解过程" />

然而,device-plugin 设备注册 API 并未提供相应的参数获取,因此 HAMi-device-plugin 在注册时将这些补充信息存储在节点的注释中,以供调度器读取,如下图所示:
HAMi 需要了解集群中每个 AI 设备的规格信息以进行准确调度。在设备注册期间,device-plugin 需要每隔 30 秒将每个设备的规格持续更新(Patch)到节点注解(Node Annotation)中,格式如下:

<img src="/img/docs/common/developers/protocol/device-registration.png" width="600px" alt="HAMi 设备注册协议图,显示节点注解过程" />
```text
hami.io/node-handshake-\{device-type\}: Reported_\{device_node_current_timestamp\}
hami.io/node-\{device-type\}-register: \{Device 1\}:\{Device2\}:...:\{Device N\}
```

这里需要使用两个注释,其中一个是时间戳,如果超过指定的阈值,则认为对应节点上的设备无效。另一个是设备注册信息。一个具有 2 个 32G-V100 GPU 的节点可以注册如下所示:
每个设备的定义格式如下:

```yaml
hami.io/node-handshake: Requesting_2024.05.14 07:07:33
hami.io/node-nvidia-register: "GPU-00552014-5c87-89ac-b1a6-7b53aa24b0ec,10,32768,100,NVIDIA-Tesla V100-PCIE-32GB,0,true:GPU-0fc3eda5-e98b-a25b-5b0d-cf5c855d1448,10,32768,100,NVIDIA-Tesla V100-PCIE-32GB,0,true:"
```text
\{Device UUID\},\{device split count\},\{device memory limit\},\{device core limit\},\{device type\},\{device numa\},\{healthy\}
```

### 调度决策
示例如下:

kube-scheduler 在 `bind` 过程中调用 device-plugin 挂载设备,但仅向 device-plugin 提供设备的 `UUID`。因此,在设备共享的场景中,device-plugin 无法获取任务请求的相应设备规格,如 `设备显存` 和 `计算核心`。
```text
hami.io/node-handshake-nvidia: Reported 2024-01-23 04:30:04.434037031 +0000 UTC m=+1104711.777756895
hami.io/node-handshake-mlu: Requesting_2024.01.10 04:06:57
hami.io/node-mlu-register: MLU-45013011-2257-0000-0000-000000000000,10,23308,0,MLU-MLU370-X4,0,false:MLU-54043011-2257-0000-0000-000000000000,10,23308,0,MLU-MLU370-X4,0,false:
hami.io/node-nvidia-register: GPU-00552014-5c87-89ac-b1a6-7b53aa24b0ec,10,32768,100,NVIDIA-Tesla V100-PCIE-32GB,0,true:GPU-0fc3eda5-e98b-a25b-5b0d-cf5c855d1448,10,32768,100,NVIDIA-Tesla V100-PCIE-32GB,0,true:

因此,有必要开发一个协议,使调度器层与 device-plugin 进行通信以传递任务调度信息。调度器通过将调度结果补丁到 Pod 的注释中并在 device-plugin 中读取它来传递此信息,如下图所示:
```

<img src="/img/docs/common/developers/protocol/task-dispatch.png" width="600px" alt="HAMi 任务分发流程图" />
在此示例中,该节点包含两种不同的 AI 设备:2 张 NVIDIA-V100 GPU 和 2 张寒武纪 (Cambricon) 370-X4 MLU。

在此过程中,需要设置 3 个注释,分别是 `时间戳`、`待分配设备` 和 `已分配设备`。调度器创建时,`待分配设备` 和 `已分配设备` 的内容相同,但 device-plugin 将根据 `待分配设备` 的内容确定当前设备分配情况,当分配成功时,相应设备将从注释中移除,因此当任务成功运行时,`待分配设备` 的内容将为空。
设备节点可能因硬件或网络故障而变得不可用。如果节点在过去 5 分钟内未注册,调度器会将其标记为“不可用”(unavailable)。
Comment thread
moezdil marked this conversation as resolved.
Resolved
Comment thread
moezdil marked this conversation as resolved.
Resolved

一个请求 3000M 设备显存的 GPU 任务的示例将生成如下的相应注释:
由于调度器节点与“设备”节点上的系统时钟可能未准确对齐,调度器节点每 30 秒会 Patch 以下设备节点注解:
Comment thread
moezdil marked this conversation as resolved.
Resolved

```yaml
hami.io/bind-time: 1716199325
hami.io/vgpu-devices-allocated: GPU-0fc3eda5-e98b-a25b-5b0d-cf5c855d1448,NVIDIA,3000,0:;
hami.io/vgpu-devices-to-allocate: ;
```text
hami.io/node-handshake-\{device-type\}: Requesting_{scheduler_node_current_timestamp}
```
Original file line number Diff line number Diff line change
Expand Up @@ -7,33 +7,37 @@ translated: true

### 设备注册

为了进行更准确的调度,HAMi 调度器需要在设备注册时感知设备的规格,包括 UUID、显存、计算能力、型号、numa 数量等。
<img src="/img/docs/common/developers/protocol/protocol-register.png" width="600px" alt="HAMi 项目图" />
Comment thread
moezdil marked this conversation as resolved.
Resolved

然而,device-plugin 设备注册 API 并未提供相应的参数获取,因此 HAMi-device-plugin 在注册时将这些补充信息存储在节点的注释中,以供调度器读取,如下图所示:
HAMi 需要了解集群中每个 AI 设备的规格信息以进行准确调度。在设备注册期间,device-plugin 需要每隔 30 秒将每个设备的规格持续更新(Patch)到节点注解(Node Annotation)中,格式如下:

<img src="/img/docs/common/developers/protocol/device-registration.png" width="600px" alt="HAMi 设备注册协议图,显示节点注解过程" />
```text
hami.io/node-handshake-\{device-type\}: Reported_\{device_node_current_timestamp\}
hami.io/node-\{device-type\}-register: \{Device 1\}:\{Device2\}:...:\{Device N\}
```

这里需要使用两个注释,其中一个是时间戳,如果超过指定的阈值,则认为对应节点上的设备无效。另一个是设备注册信息。一个具有 2 个 32G-V100 GPU 的节点可以注册如下所示:
每个设备的定义格式如下:

```yaml
hami.io/node-handshake: Requesting_2024.05.14 07:07:33
hami.io/node-nvidia-register: 'GPU-00552014-5c87-89ac-b1a6-7b53aa24b0ec,10,32768,100,NVIDIA-Tesla V100-PCIE-32GB,0,true:GPU-0fc3eda5-e98b-a25b-5b0d-cf5c855d1448,10,32768,100,NVIDIA-Tesla V100-PCIE-32GB,0,true:'
```text
\{Device UUID\},\{device split count\},\{device memory limit\},\{device core limit\},\{device type\},\{device numa\},\{healthy\}
```

### 调度决策
示例如下:

kube-scheduler 在 `bind` 过程中调用 device-plugin 挂载设备,但仅向 device-plugin 提供设备的 `UUID`。因此,在设备共享的场景中,device-plugin 无法获取任务请求的相应设备规格,如 `设备显存` 和 `计算核心`。
```text
hami.io/node-handshake-nvidia: Reported 2024-01-23 04:30:04.434037031 +0000 UTC m=+1104711.777756895
hami.io/node-handshake-mlu: Requesting_2024.01.10 04:06:57
hami.io/node-mlu-register: MLU-45013011-2257-0000-0000-000000000000,10,23308,0,MLU-MLU370-X4,0,false:MLU-54043011-2257-0000-0000-000000000000,10,23308,0,MLU-MLU370-X4,0,false:
hami.io/node-nvidia-register: GPU-00552014-5c87-89ac-b1a6-7b53aa24b0ec,10,32768,100,NVIDIA-Tesla V100-PCIE-32GB,0,true:GPU-0fc3eda5-e98b-a25b-5b0d-cf5c855d1448,10,32768,100,NVIDIA-Tesla V100-PCIE-32GB,0,true:

因此,有必要开发一个协议,使调度器层与 device-plugin 进行通信以传递任务调度信息。调度器通过将调度结果补丁到 Pod 的注释中并在 device-plugin 中读取它来传递此信息,如下图所示:
```

<img src="/img/docs/common/developers/protocol/task-dispatch.png" width="600px" alt="HAMi 任务分发流程图" />
在此示例中,该节点包含两种不同的 AI 设备:2 张 Nvidia-V100 GPU 和 2 张寒武纪 (Cambricon) 370-X4 MLU。

在此过程中,需要设置 3 个注释,分别是 `时间戳`、`待分配设备` 和 `已分配设备`。调度器创建时,`待分配设备` 和 `已分配设备` 的内容相同,但 device-plugin 将根据 `待分配设备` 的内容确定当前设备分配情况,当分配成功时,相应设备将从注释中移除,因此当任务成功运行时,`待分配设备` 的内容将为空。
设备节点可能因硬件或网络故障而变得不可用。如果节点在过去 5 分钟内未注册,调度器会将其标记为"不可用"(unavailable)。

一个请求 3000M 设备显存的 GPU 任务的示例将生成如下的相应注释:
由于调度器节点与"设备"节点上的系统时钟可能未准确对齐,调度器节点每 30 秒会 Patch 以下设备节点注解:

```yaml
hami.io/bind-time: 1716199325
hami.io/vgpu-devices-allocated: GPU-0fc3eda5-e98b-a25b-5b0d-cf5c855d1448,NVIDIA,3000,0:;
hami.io/vgpu-devices-to-allocate: ;
```text
hami.io/node-handshake-\{device-type\}: Requesting_{scheduler_node_current_timestamp}
```
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Resolved
Original file line number Diff line number Diff line change
Expand Up @@ -7,33 +7,37 @@ translated: true

### 设备注册

为了进行更准确的调度,HAMi 调度器需要在设备注册时感知设备的规格,包括 UUID、显存、计算能力、型号、numa 数量等。
<img src="/img/docs/common/developers/protocol/protocol-register.png" width="600px" alt="HAMi 项目图" />

然而,device-plugin 设备注册 API 并未提供相应的参数获取,因此 HAMi-device-plugin 在注册时将这些补充信息存储在节点的注释中,以供调度器读取,如下图所示:
HAMi 需要了解集群中每个 AI 设备的规格信息以进行准确调度。在设备注册期间,device-plugin 需要每隔 30 秒将每个设备的规格持续更新(Patch)到节点注解(Node Annotation)中,格式如下:

<img src="/img/docs/common/developers/protocol/device-registration.png" width="600px" alt="HAMi 设备注册协议图,显示节点注解过程" />
```text
hami.io/node-handshake-\{device-type\}: Reported_\{device_node_current_timestamp\}
hami.io/node-\{device-type\}-register: \{Device 1\}:\{Device2\}:...:\{Device N\}
```

这里需要使用两个注释,其中一个是时间戳,如果超过指定的阈值,则认为对应节点上的设备无效。另一个是设备注册信息。一个具有 2 个 32G-V100 GPU 的节点可以注册如下所示:
每个设备的定义格式如下:

```yaml
hami.io/node-handshake: Requesting_2024.05.14 07:07:33
hami.io/node-nvidia-register: 'GPU-00552014-5c87-89ac-b1a6-7b53aa24b0ec,10,32768,100,NVIDIA-Tesla V100-PCIE-32GB,0,true:GPU-0fc3eda5-e98b-a25b-5b0d-cf5c855d1448,10,32768,100,NVIDIA-Tesla V100-PCIE-32GB,0,true:'
```text
\{Device UUID\},\{device split count\},\{device memory limit\},\{device core limit\},\{device type\},\{device numa\},\{healthy\}
```

### 调度决策
示例如下:

kube-scheduler 在 `bind` 过程中调用 device-plugin 挂载设备,但仅向 device-plugin 提供设备的 `UUID`。因此,在设备共享的场景中,device-plugin 无法获取任务请求的相应设备规格,如 `设备显存` 和 `计算核心`。
```text
hami.io/node-handshake-nvidia: Reported 2024-01-23 04:30:04.434037031 +0000 UTC m=+1104711.777756895
hami.io/node-handshake-mlu: Requesting_2024.01.10 04:06:57
hami.io/node-mlu-register: MLU-45013011-2257-0000-0000-000000000000,10,23308,0,MLU-MLU370-X4,0,false:MLU-54043011-2257-0000-0000-000000000000,10,23308,0,MLU-MLU370-X4,0,false:
hami.io/node-nvidia-register: GPU-00552014-5c87-89ac-b1a6-7b53aa24b0ec,10,32768,100,NVIDIA-Tesla V100-PCIE-32GB,0,true:GPU-0fc3eda5-e98b-a25b-5b0d-cf5c855d1448,10,32768,100,NVIDIA-Tesla V100-PCIE-32GB,0,true:

因此,有必要开发一个协议,使调度器层与 device-plugin 进行通信以传递任务调度信息。调度器通过将调度结果补丁到 pod 的注释中并在 device-plugin 中读取它来传递此信息,如下图所示:
```

<img src="/img/docs/common/developers/protocol/task-dispatch.png" width="600px" alt="HAMi 任务分发流程图" />
在此示例中,该节点包含两种不同的 AI 设备:2 张 Nvidia-V100 GPU 和 2 张寒武纪 (Cambricon) 370-X4 MLU。

在此过程中,需要设置 3 个注释,分别是 `时间戳`、`待分配设备` 和 `已分配设备`。调度器创建时,`待分配设备` 和 `已分配设备` 的内容相同,但 device-plugin 将根据 `待分配设备` 的内容确定当前设备分配情况,当分配成功时,相应设备将从注释中移除,因此当任务成功运行时,`待分配设备` 的内容将为空。
设备节点可能因硬件或网络故障而变得不可用。如果节点在过去 5 分钟内未注册,调度器会将其标记为"不可用"(unavailable)。

一个请求 3000M 设备显存的 GPU 任务的示例将生成如下的相应注释:
由于调度器节点与"设备"节点上的系统时钟可能未准确对齐,调度器节点每 30 秒会 Patch 以下设备节点注解:

```yaml
hami.io/bind-time: 1716199325
hami.io/vgpu-devices-allocated: GPU-0fc3eda5-e98b-a25b-5b0d-cf5c855d1448,NVIDIA,3000,0:;
hami.io/vgpu-devices-to-allocate: ;
```text
hami.io/node-handshake-\{device-type\}: Requesting_{scheduler_node_current_timestamp}
```
Original file line number Diff line number Diff line change
Expand Up @@ -5,33 +5,37 @@ translated: true

## 设备注册

为了进行更准确的调度,HAMi 调度器需要在设备注册时感知设备的规格,包括 UUID、显存、计算能力、型号、numa 数量等。
<img src="/img/docs/common/developers/protocol/protocol-register.png" width="600px" alt="HAMi 设备注册协议图,显示节点注解过程" />

然而,device-plugin 设备注册 API 并未提供相应的参数获取,因此 HAMi-device-plugin 在注册时将这些补充信息存储在节点的注释中,以供调度器读取,如下图所示:
HAMi 需要了解集群中每个 AI 设备的规格信息以进行准确调度。在设备注册期间,device-plugin 需要每隔 30 秒将每个设备的规格持续更新(Patch)到节点注解(Node Annotation)中,格式如下:

<img src="/img/docs/common/developers/protocol/device-registration.png" width="600px" alt="HAMi 设备注册协议图,显示节点注解过程" />
```text
hami.io/node-handshake-\{device-type\}: Reported_\{device_node_current_timestamp\}
hami.io/node-\{device-type\}-register: \{Device 1\}:\{Device2\}:...:\{Device N\}
```

这里需要使用两个注释,其中一个是时间戳,如果超过指定的阈值,则认为对应节点上的设备无效。另一个是设备注册信息。一个具有 2 个 32G-V100 GPU 的节点可以注册如下所示:
每个设备的定义格式如下:

```yaml
hami.io/node-handshake: Requesting_2024.05.14 07:07:33
hami.io/node-nvidia-register: 'GPU-00552014-5c87-89ac-b1a6-7b53aa24b0ec,10,32768,100,NVIDIA-Tesla V100-PCIE-32GB,0,true:GPU-0fc3eda5-e98b-a25b-5b0d-cf5c855d1448,10,32768,100,NVIDIA-Tesla V100-PCIE-32GB,0,true:'
```text
\{Device UUID\},\{device split count\},\{device memory limit\},\{device core limit\},\{device type\},\{device numa\},\{healthy\}
```

### 调度决策
示例如下:

kube-scheduler 在 `bind` 过程中调用 device-plugin 挂载设备,但仅向 device-plugin 提供设备的 `UUID`。因此,在设备共享的场景中,device-plugin 无法获取任务请求的相应设备规格,如 `设备显存` 和 `计算核心`。
```text
hami.io/node-handshake-nvidia: Reported 2024-01-23 04:30:04.434037031 +0000 UTC m=+1104711.777756895
hami.io/node-handshake-mlu: Requesting_2024.01.10 04:06:57
hami.io/node-mlu-register: MLU-45013011-2257-0000-0000-000000000000,10,23308,0,MLU-MLU370-X4,0,false:MLU-54043011-2257-0000-0000-000000000000,10,23308,0,MLU-MLU370-X4,0,false:
hami.io/node-nvidia-register: GPU-00552014-5c87-89ac-b1a6-7b53aa24b0ec,10,32768,100,NVIDIA-Tesla V100-PCIE-32GB,0,true:GPU-0fc3eda5-e98b-a25b-5b0d-cf5c855d1448,10,32768,100,NVIDIA-Tesla V100-PCIE-32GB,0,true:

因此,有必要开发一个协议,使调度器层与 device-plugin 进行通信以传递任务调度信息。调度器通过将调度结果补丁到 pod 的注释中并在 device-plugin 中读取它来传递此信息,如下图所示:
```

<img src="/img/docs/common/developers/protocol/task-dispatch.png" width="600px" alt="HAMi 任务分发流程图" />
在此示例中,该节点包含两种不同的 AI 设备:2 张 Nvidia-V100 GPU 和 2 张寒武纪 (Cambricon) 370-X4 MLU。
Comment thread
moezdil marked this conversation as resolved.
Resolved

在此过程中,需要设置 3 个注释,分别是 `时间戳`、`待分配设备` 和 `已分配设备`。调度器创建时,`待分配设备` 和 `已分配设备` 的内容相同,但 device-plugin 将根据 `待分配设备` 的内容确定当前设备分配情况,当分配成功时,相应设备将从注释中移除,因此当任务成功运行时,`待分配设备` 的内容将为空。
设备节点可能因硬件或网络故障而变得不可用。如果节点在过去 5 分钟内未注册,调度器会将其标记为"不可用"(unavailable)。

一个请求 3000M 设备显存的 GPU 任务的示例将生成如下的相应注释:
由于调度器节点与"设备"节点上的系统时钟可能未准确对齐,调度器节点每 30 秒会 Patch 以下设备节点注解:

```yaml
hami.io/bind-time: 1716199325
hami.io/vgpu-devices-allocated: GPU-0fc3eda5-e98b-a25b-5b0d-cf5c855d1448,NVIDIA,3000,0:;
hami.io/vgpu-devices-to-allocate: ;
```text
hami.io/node-handshake-\{device-type\}: Requesting_{scheduler_node_current_timestamp}
```
Loading