GPU节点调度属性标签说明及标签值的切换方法

安装云原生AI套件的调度组件ack-ai-installer之后,您可以为GPU节点打上调度属性标签,帮助GPU节点启用共享GPU调度、GPU拓扑感知调度等能力。本文介绍GPU节点调度属性标签及如何切换标签的值。

GPU节点调度属性标签说明

标签ack.node.gpu.schedule

分类

标签值

是否可以切换到其他标签值

说明

独占GPU调度

default

可切换至:

  • 共享GPU调度标签值。

  • GPU拓扑感知调度标签值。

  • 节点开启独占GPU调度能力,表示该节点以单个GPU卡为最小划分单元,为Pod分配GPU资源。

  • 该标签与节点中未打ack.node.gpu.schedule:default标签行为一致(添加到ACK集群的GPU节点默认开启独占GPU调度)。

  • 如果某个节点已经拥有标签ack.node.gpu.schedule(比如开启共享GPU调度能力),且需要该节点恢复独占GPU调度能力,只能通过为节点打上标签ack.node.gpu.schedule:default实现。删除节点标签ack.node.gpu.schedule并不能恢复节点独占GPU调度能力。

共享GPU调度

cgpu

可切换至:

  • 独占GPU调度标签值。

  • GPU拓扑感知调度标签值。

core_mem

可切换至:

  • 独占GPU调度标签值。

  • GPU拓扑感知调度标签值。

share

可切换至:

  • 独占GPU调度标签值。

  • GPU拓扑感知调度标签值。

  • cgpu。

  • core_mem。

  • 节点开启共享GPU调度能力。

  • 节点不安装cGPU隔离模块。

  • Pod仅申请GPU显存资源,一张卡上多个Pod实行算力共享策略。

GPU拓扑感知调度

topology

可切换至:

  • 独占GPU调度标签值。

  • GPU拓扑感知调度标签值。

  • 节点开启GPU拓扑感知调度能力。

  • 节点仍以单个GPU卡为最小划分单元,为Pod分配GPU资源。每个Pod分配到的GPU卡的数量考虑了GPU卡之间的通信带宽。

动态划分MIG

mig

不可切换。

  • 节点开启MIG能力。

  • 节点按最大支持MIG实例数上报MIG资源,每个Pod的Container最多仅能够申请1个MIG资源。

  • 开启节点MIG能力涉及修改节点硬件属性,只能通过移除MIG节点池,再加入其他节点池方式完成。不能使用kubectl label切换节点标签值到其他GPU调度策略。

标签ack.node.gpu.placement

分类

标签值

是否可以切换到其他标签值

说明

共享GPU调度

spread

可切换至:binpack

  • 该标签仅在节点开启共享GPU调度能力的情况才有效。

  • 当节点上存在多张GPU卡时,该策略能够允许申请GPU资源的Pod打散在各GPU上。

binpack

可切换至:spread

  • 该标签仅在节点开启共享GPU调度能力的情况才有效。

  • 当节点上存在多张GPU卡时,该策略能够允许申请GPU资源的Pod先占满一张GPU卡,再占用另一张GPU卡,避免资源出现碎片。

  • 在开启共享GPU调度情况下,GPU节点上如果没有ack.node.gpu.placement标签,那么调度器将使用binpack策略为Pod寻找节点上的GPU卡资源。

标签值切换

使用kubectl label nodes或通过控制台节点标签管理功能切换标签值存在的问题

当一个GPU节点从一种GPU资源调度能力A切换到另一种GPU资源调度能力B时,直接使用kubectl label nodes命令切换节点GPU调度属性标签值,或在容器服务管理控制台节点页面使用标签管理功能切换节点标签,会引发以下问题。

  • 该GPU节点上可能还存在使用GPU资源的应用,这些应用是以A方式在申请GPU资源。节点的能力由A切换到B以后,调度器维护该节点GPU资源的账本也会发生变化,导致节点上已经申请GPU资源的应用被遗漏。此时,调度器对该节点上的GPU资源账本与节点上实际分配GPU资源的情况不一致,导致GPU应用之间相互影响。

  • 某些能力是需要在节点上设置一些配置,当使用kubectl label nodes或通过控制台节点标签管理功能切换节点标签值时,系统并不会重置节点上先前的配置,可能造成GPU节点启用的新的GPU资源调度能力失败。

基于以上问题,强烈建议您使用节点池划分GPU资源调度能力

基于节点池划分GPU资源调度能力

假设现在您的一个集群需要同时使用GPU资源调度能力中的“共享GPU调度(仅显存隔离)”和“共享GPU调度(显存隔离和算力限制)”。那么可以在这个集群中创建两个节点池:

  • 节点池A:用于管理仅支持显存隔离的节点。

  • 节点池B:用于管理支持显存隔离和算力限制的节点。

2.png

同时如果一个GPU节点需要从一种GPU资源调度能力(例如上面的A)切换到另一种GPU资源调度能力(例如上面的B),需要将该节点从一个节点池(节点池A)中移除,然后再将该节点添加到另一个节点池(节点池B)中。详细操作,请参见移除节点添加已有节点

手动切换节点GPU资源调度能力

除了基于节点池划分GPU资源调度能力以外,您也可以手动切换。手动切换步骤比较复杂,下面是节点状态流转及操作,包括:

  1. 节点下线:先将节点置为不可调度,不让节点接收新的Pod。

  2. 排空节点:排空节点上的已有运行Pod。

  3. 登录节点进行重置操作:登录到节点,进行重置操作。重置操作因不同的标签值而有所不同。详细信息,请参见标签配置重置

  4. 切换节点标签:进行重置操作以后,可以使用kubectl label给节点打上对应标签。

  5. 节点上线:标签打完后,上线节点。

3.png

标签配置重置

分类

标签

切换到其他标签之前需要的节点重置操作

共享GPU调度

ack.node.gpu.schedule=cgpu

bash /usr/local/cgpu-installer/uninstall.sh

ack.node.gpu.schedule=core_mem

bash /usr/local/cgpu-installer/uninstall.sh

相关文档

GPU节点卡型属性标签基本信息以及如何使业务运行或不运行在指定卡型上。详细信息,请参见GPU节点卡型属性标签