ACK提供GPU共享调度能力,服务于共享单GPU的模型预测场景,同时也支持通过NVIDIA驱动内核态保障GPU显存的隔离。本文介绍如何在GPU节点上安装共享GPU组件和GPU资源查询工具,实现GPU的调度和隔离能力。
前提条件
在使用共享GPU调度前,需开通云原生AI套件。关于云原生AI套件的介绍及计费说明,请参见云原生AI套件概述、云原生AI套件计费说明。
已创建ACK集群Pro版且集群实例规格架构设置为GPU云服务器,请参见创建ACK托管集群。
使用限制
请勿将共享GPU调度的节点的CPU Policy设置为
static
。cGPU服务的隔离功能不支持以UVM的方式申请显存,即调用
CUDA API cudaMallocManaged()
,请使用其他方式申请显存,例如调用cudaMalloc()
等。更多信息,请参见NVIDIA。共享GPU的DaemonSet的Pod在节点上的优先级不是最高的,所以节点资源有可能被其他优先级高的Pod抢占而导致被驱逐。如果想避免这个问题,可以对您实际使用的DaemonSet(如共享GPU显存的
gpushare-device-plugin-ds
)进行修改,加上priorityClassName: system-node-critical
来保证其优先级。共享GPU组件的安装没有地域限制,但GPU显存隔离能力仅在以下地域中支持,请确保对应集群属于以下地域。
版本配套信息
配置
支持版本
Kubernetes版本
1.18.8及以上
Nvidia驱动版本
≥418.87.01
容器运行时版本
Docker:19.03.5及以上
containerd:1.4.3及以上
操作系统
Alibaba Cloud Linux 3.x、Alibaba Cloud Linux 2.x、CentOS 7.6、CentOS 7.7、CentOS 7.9
支持显卡
P系列、T系列、V系列、A系列、H系列
步骤一:安装共享GPU组件
未部署云原生AI套件
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在云原生AI套件页面,单击一键部署。
在一键部署云原生AI套件页面,选中调度组件(批量任务调度、GPU共享、GPU拓扑感知、NPU调度)。
(可选)单击调度组件(批量任务调度、GPU共享、GPU拓扑感知、NPU调度)右侧的高级配置。在弹出的参数配置窗口,修改cGPU的
policy
字段。修改完成后,单击确定。如果对cGPU算力共享无特殊要求,建议使用默认
policy: 5
。cGPU支持的policy,请参见安装并使用cGPU服务。在云原生AI套件页面最下方,单击部署云原生AI套件。
组件安装成功后,在云原生AI套件页面的组件列表中能看到已安装的共享GPU组件ack-ai-installer。
已部署云原生AI套件
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在组件ack-ai-installer所在行,单击操作列的部署。
(可选)在弹出的参数配置窗口,修改cGPU的
policy
字段。如果对cGPU算力共享无特殊要求,建议使用默认
policy: 5
。cGPU支持的policy,请参见安装并使用cGPU服务。修改完成后,单击确定。
组件安装完成后,ack-ai-installer的状态为已部署。
步骤二:开启GPU共享调度能力和显存隔离能力
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在节点池页面,单击创建节点池。
在创建节点池页面,设置创建节点池的配置项,然后单击确认配置。
以下为重要配置项的说明,其余配置项的配置方法,请参见创建节点池。
配置项
说明
期望节点数
设置节点池初始节点数量。如无需创建节点,可以填写为0。
节点标签
标签的值需根据您的业务需求添加。关于节点标签的详细说明,请参见GPU节点调度属性标签。
下文以标签值cgpu为例,该值表示节点开启共享GPU调度能力,每个Pod仅需申请GPU显存资源,多个Pod在一张卡上实行显存隔离和算力共享。
单击节点标签的,设置键为ack.node.gpu.schedule,值为cgpu。
重要关于cGPU隔离功能注意事项,请参见cGPU隔离能力注意事项。
添加共享GPU调度标签后,请勿通过
kubectl label nodes
命令切换节点GPU调度属性标签值或使用控制台节点页面的标签管理功能更改节点标签,以避免引发潜在的问题,请参见使用kubectl label nodes或通过控制台节点标签管理功能切换标签值存在的问题。推荐您基于节点池划分GPU资源调度能力。
步骤三:添加GPU节点
步骤四:安装和使用GPU资源查询工具
下载kubectl-inspect-cgpu。
如果您使用的是Linux系统,您可以通过以下命令下载kubectl-inspect-cgpu。
wget http://aliacs-k8s-cn-beijing.oss-cn-beijing.aliyuncs.com/gpushare/kubectl-inspect-cgpu-linux -O /usr/local/bin/kubectl-inspect-cgpu
如果您使用的是macOS系统,您可以通过以下命令下载kubectl-inspect-cgpu。
wget http://aliacs-k8s-cn-beijing.oss-cn-beijing.aliyuncs.com/gpushare/kubectl-inspect-cgpu-darwin -O /usr/local/bin/kubectl-inspect-cgpu
执行以下命令,为kubectl-inspect-cgpu添加执行权限。
chmod +x /usr/local/bin/kubectl-inspect-cgpu
执行以下命令,查看集群GPU使用情况。
kubectl inspect cgpu
预期输出:
NAME IPADDRESS GPU0(Allocated/Total) GPU Memory(GiB) cn-shanghai.192.168.6.104 192.168.6.104 0/15 0/15 ---------------------------------------------------------------------- Allocated/Total GPU Memory In Cluster: 0/15 (0%)