安装云原生AI套件的调度组件ack-ai-installer之后,您可以为GPU节点打上调度属性标签,帮助GPU节点启用共享GPU调度、GPU拓扑感知调度等能力。本文介绍GPU节点调度属性标签及如何切换标签的值。
GPU节点调度属性标签说明
标签ack.node.gpu.schedule
分类 | 标签值 | 是否可以切换到其他标签值 | 说明 |
独占GPU调度 | default | 可切换至:
|
|
共享GPU调度 | cgpu | 可切换至:
|
|
core_mem | 可切换至:
|
| |
share | 可切换至:
|
| |
GPU拓扑感知调度 | topology | 可切换至:
|
|
动态划分MIG | mig | 不可切换。 |
|
标签ack.node.gpu.placement
分类 | 标签值 | 是否可以切换到其他标签值 | 说明 |
共享GPU调度 | spread | 可切换至:binpack |
|
binpack | 可切换至:spread |
|
标签值切换
使用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:用于管理支持显存隔离和算力限制的节点。
同时如果一个GPU节点需要从一种GPU资源调度能力(例如上面的A)切换到另一种GPU资源调度能力(例如上面的B),需要将该节点从一个节点池(节点池A)中移除,然后再将该节点添加到另一个节点池(节点池B)中。详细操作,请参见移除节点和添加已有节点。
手动切换节点GPU资源调度能力
除了基于节点池划分GPU资源调度能力以外,您也可以手动切换。手动切换步骤比较复杂,下面是节点状态流转及操作,包括:
节点下线:先将节点置为不可调度,不让节点接收新的Pod。
排空节点:排空节点上的已有运行Pod。
登录节点进行重置操作:登录到节点,进行重置操作。重置操作因不同的标签值而有所不同。详细信息,请参见标签配置重置。
切换节点标签:进行重置操作以后,可以使用
kubectl label
给节点打上对应标签。节点上线:标签打完后,上线节点。
标签配置重置
分类 | 标签 | 切换到其他标签之前需要的节点重置操作 |
共享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节点卡型属性标签。