ACK提供了GPU共享调度能力,服务于共享单GPU的模型预测场景,同时也可以通过Nvidia驱动内核态保障GPU显存的隔离。本文介绍如何在GPU节点上安装共享GPU组件和GPU资源查询工具,实现GPU的调度和隔离能力。
前提条件
- 目前仅支持操作系统Alibaba Cloud Linux 2.x和CentOS 7.x。
- 支持共享GPU调度的节点不能设置CPU Policy为
static
。 - 目前cGPU不兼容5XX系列的GPU驱动(以5开头的驱动,例如:510.47.03)。
- cGPU服务的隔离功能不支持以UVM的方式申请显存,即调用
CUDA API cudaMallocManaged()
,请使用其他方式申请显存,例如调用cudaMalloc()
等。更多信息,请参见NVIDIA。 - 已创建ACK Pro集群。ACK Pro集群的实例规格类型需要设置为异构计算GPU/FPGA/NPU,其他配置请参见创建ACK Pro版集群。
- 获取集群KubeConfig并通过kubectl工具连接集群。
- 共享GPU组件的安装没有地域限制,但是目前只有以下地域支持GPU显存隔离能力。如果您需要使用显存隔离能力,请确保集群所在地域在此范围内。
地域 地域ID 华北2(北京) cn-beijing 华东2(上海) cn-shanghai 华东1(杭州) cn-hangzhou 华北3(张家口) cn-zhangjiakou 华北6(乌兰察布) cn-wulanchabu 华南1(深圳) cn-shenzhen 西南1(成都) cn-chengdu 华南2(河源) cn-heyuan 中国(香港) cn-hongkong 日本(东京) ap-northeast-1 印度尼西亚(雅加达) ap-southeast-5 新加坡 ap-southeast-1 美国(弗吉尼亚) us-east-1 美国(硅谷) us-west-1
使用须知
配置 | 支持版本 |
---|---|
Kubernetes版本 | 1.18.8及其以上 |
Helm版本 | 3.0及以上版本 |
Nvidia驱动版本 | 418.87.01≤版本<520.x.x |
Docker版本 | 19.03.5及以上版本 |
Containerd版本 | 1.4.3及以上版本 |
操作系统 | CentOS 7.6、CentOS 7.7、CentOS 7.9、Ubuntu 16.04、Ubuntu 18.04和Alibaba Cloud Linux 2.x |
支持显卡 | Tesla P4、Tesla P100、 Tesla T4、Tesla A10、Tesla A100 和Tesla v100 |
nvidia-container-runtime版本 | 1.7.0及以下版本 |
步骤一:安装共享GPU组件
- 登录容器服务管理控制台。
- 在控制台左侧导航栏,单击集群。
- 在集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏,选择 。
- 在云原生AI套件页面,单击一键部署。
- 在一键部署云原生AI套件页面,选中调度组件(批量任务调度、GPU共享、GPU拓扑感知、NPU调度),单击页面下方的部署云原生AI套件。说明 如果您已经部署了云原生AI套件,则在云原生AI套件页面的组件列表,单击ack-ai-installer右侧操作列下的部署。组件安装成功后,在云原生AI套件页面的组件列表中能看到已安装的共享GPU组件ack-ai-installer。
步骤二:开启GPU共享调度能力和显存隔离能力
- 登录容器服务管理控制台。
- 在控制台左侧导航栏,单击集群。
- 在集群列表页面单击已安装ack-ai-installer组件集群操作列的节点池。
- 在节点池页面单击创建节点池。
- 在创建节点池页面,设置创建节点池的配置项,然后单击确认配置。关于配置项的详细说明,请参见创建ACK Pro版集群。部分配置项说明如下:
- 数量:设置节点池初始节点数量。如不需要创建节点,可以填写为0。
- 操作系统:选择节点的操作系统,包括CentOS、Alibaba Cloud Linux 2.x、Windows。
- ECS标签:您可以为ECS实例添加标签。
- 自定义资源组:您可以指定节点池所扩容节点的资源组信息。
- 节点标签:为集群节点添加标签。关于节点标签的详细说明,请参见ACK调度GPU使用的节点标签说明。
- 开启GPU共享调度能力,同时开启GPU显存隔离能力。单击节点标签的
,设置键为ack.node.gpu.schedule,值为cgpu。
说明 如果只需要节点池支持共享调度,不支持显存隔离,您可以设置节点标签的键为ack.node.gpu.schedule,值为share。 - 在节点上使用Binpack算法为Pod选择GPU卡。
单击节点标签的
,设置键为ack.node.gpu.placement,设置值为binpack。
- 开启GPU共享调度能力,同时开启GPU显存隔离能力。
步骤三:添加GPU节点
步骤四:安装和使用GPU资源查询工具
- 配置kubeconfig文件。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
- 下载kubectl-inspect-cgpu。
- 如果您使用的是Linux系统,您可以通过以下命令下载kubectl-inspect-cgpu。
sudo 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。
sudo wget http://aliacs-k8s-cn-beijing.oss-cn-beijing.aliyuncs.com/gpushare/kubectl-inspect-cgpu-darwin -O /usr/local/bin/kubectl-inspect-cgpu
- 如果您使用的是Linux系统,您可以通过以下命令下载kubectl-inspect-cgpu。
- 执行以下命令,为kubectl-inspect-cgpu添加执行权限。
sudo 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%)