跳转到文档内容
版本:下一个

协议设计

设备注册

HAMi 设备注册协议图,显示节点注解过程

HAMi 需要了解集群中每个 AI 设备的规格信息以进行准确调度。在设备注册期间,device-plugin 需要每隔 30 秒将每个设备的规格持续更新(Patch)到节点注解(Node Annotation)中,格式如下:

hami.io/node-handshake-{device-type}: Reported_{device_node_current_timestamp}
hami.io/node-{device-type}-register: {Device 1}:{Device2}:...:{Device N}

每个设备的定义格式如下:

{Device UUID},{device split count},{device memory limit},{device core limit},{device type},{device numa},{healthy}

示例如下:

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:

在此示例中,该节点包含两种不同的 AI 设备:2 张 NVIDIA-V100 GPU 和 2 张寒武纪 (Cambricon) 370-X4 MLU。

设备节点可能因硬件或网络故障而变得不可用。如果节点在过去 60 秒内未注册,调度器会将其标记为“不可用”(unavailable)。

由于调度器节点与“设备”节点上的系统时钟可能未准确对齐,调度器节点每 15 秒会 Patch 以下设备节点注解:

hami.io/node-handshake-{device-type}: Requesting_{scheduler_node_current_timestamp}

任务分发与调度决策

bind 过程中,kube-scheduler 将 Pod 绑定到节点。在容器创建期间,kubelet 调用 device-plugin 的 Allocate 方法并将其响应传递给容器运行时。在 GPU 共享场景下,device-plugin 无法原生获取工作负载请求的设备规格(例如 GPU 显存和计算核心限制)。

因此,HAMi 使用一种协议让调度器将任务分配元数据传递给 device-plugin。调度器通过向 Pod 写入分配注解(Annotation)来传递这些信息,device-plugin 在容器启动时读取这些注解,如下图所示:

HAMi 任务分发协议图,显示调度器与 device-plugin 的交互过程

在此过程中,主要涉及以下注解:

  • hami.io/bind-time:调度决策的时间戳。
  • hami.io/vgpu-devices-allocated:调度器分配的设备及其规格。
  • hami.io/vgpu-devices-to-allocate:待分配的设备。调度器创建 Pod 注解时,hami.io/vgpu-devices-to-allocate 包含目标设备。device-plugin 根据此注解确定分配方案,分配完成后移除已分配的设备。任务成功运行后,hami.io/vgpu-devices-to-allocate 序列化为 ;(表示空列表),而不是空字符串或省略该注解。

以下是一个请求 3000 MiB 设备显存的 GPU 任务在 Pod 上生成的注解示例:

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: ;
CNCFHAMi 是 CNCF 孵化项目