GPU设备的ACS集群支持将多个GPU Pod调度到同一个GPU-HPN节点,Pod之间可以通过NVLink等方式实现GPU之间数据通信。为了保障GPU设备之间的通信效率和公平性,ACS在设备调度时会遵循不同机型的Partition约束。本文介绍ACS GPU的Partition调度机制以及使用场景案例。
前提条件
仅支持gpu-hpn计算类型(compute-class)的Pod和对应类型的节点。
背景介绍
节点中GPU设备之间通过一条或多条通道相互连接通信,ACS支持不同GPU规格的Pod在GPU-HPN节点上同时运行。为了保障GPU的通讯效率和公平性,避免Pod之间互相干扰,ACS会参考GPU的拓扑情况进行调度,针对不同的GPU数量需求划为多个分区(partition),为其分配最优结果。
下图展示了一台8卡节点,每四张卡为一个分组,组内卡之间直通互联,分组之间通过PCIe连接。
针对不同规格的Pod,ACS的Partition划分如下。
Pod申请的GPU数量 | 可选的设备分配结果 |
Pod申请的GPU数量 | 可选的设备分配结果 |
8 | [0,1,2,3,4,5,6,7] |
4 | [0,1,2,3], [4,5,6,7] |
2 | [0,1], [2,3], [4,5], [6,7] |
1 | [0], [1], [2], [3], [4], [5], [6], [7] |
随着不断有Pod在节点上创建删除,GPU设备可能出现Partition碎片导致Pod Pending无法调度,您可以参考存量Pod的调度结果,结合业务优先级情况驱逐部分Pod,以满足Pending Pod的资源需求。
查询GPU-HPN节点的Partition
ACS不同型号GPU-HPN节点的Partition情况和卡型有所不同。GPU-HPN节点的具体卡型请提交工单咨询。
查询Pod的调度结果
设备分配结果
对于GPU-HPN类型的Pod,您可以在Pod Annotation中查看到设备分配结果,格式如下。
apiVersion: v1
kind: Pod
metadata:
annotations:
alibabacloud.com/device-allocation: '{"gpus": {"minor": [0,1,2,3]}}'
Partition碎片的调度失败提示
当Pod不可调度时会处于Pending状态,通过kubectl describe pod
命令,可以看到类似0/5 nodes are available: xxx
的信息,其中Insufficient Partitioned GPU Devices
表示节点因为设备资源碎片导致调度失败,示例如下。
kubectl describe pod pod-demo
预期输出,省略其他内容:
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 26m default-scheduler 0/5 nodes are available: 2 Node(s) Insufficient Partitioned GPU Devices, 1 Node(s) xxx, 2 Node(s) xxx.
常见问题
如何规划节点资源和策略,避免Partition碎片
根据业务Pod的GPU需求数量,划分不同的节点池,例如将8卡大任务和1卡小任务规划到不同的节点池。
当集群内出现因碎片导致的Pending Pod时,可以利用重调度等机制,驱逐部分低优先级的小任务,腾挪空闲资源供Pending Pod使用。
使用自定义调度器时,关于Partition有哪些注意事项
自定义调度器为Pod分配节点后,ACS会负责Pod在对应节点上的设备分配,在设备分配阶段,ACS会尽量集中调度避免碎片。
自定义调度器只需关注节点GPU整体容量,建议对于GPU资源优先采用Node集中调度策略(MostAllocated),可以有效减少Partition碎片的出现。
- 本页导读 (0)
- 前提条件
- 背景介绍
- 查询GPU-HPN节点的Partition
- 查询Pod的调度结果
- 设备分配结果
- Partition碎片的调度失败提示
- 常见问题
- 如何规划节点资源和策略,避免Partition碎片
- 使用自定义调度器时,关于Partition有哪些注意事项