管理共享GPU调度组件

ACK提供GPU共享调度能力,服务于共享单GPU的模型预测场景,同时也支持通过NVIDIA驱动内核态保障GPU显存的隔离。当您的集群已经安装共享GPU调度组件,但节点GPU驱动版本与集群中已存在的cGPU版本不兼容,或者节点操作系统版本与集群中已存在的cGPU版本不兼容时,您需要将共享GPU调度组件升级到最新版本。本文介绍如何在GPU节点上管理共享GPU调度组件,实现GPU的调度和隔离能力。

前提条件

使用限制

  • 请勿将共享GPU调度的节点的CPU Policy设置为static

  • 若您需要自定义KubeConfig文件路径,由于kubectl inspect cgpu命令不支持--kubeconfig参数,请使用export KUBECONFIG=<kubeconfig>指定该路径。

  • cGPU服务的隔离功能不支持以UVM的方式(即调用CUDA API cudaMallocManaged())申请显存,请您使用其他方式申请显存,例如调用cudaMalloc()等。更多信息,请参见NVIDIA官方文档

  • 共享GPUDaemonSetPod在节点上的优先级不是最高的,所以节点资源有可能被其他优先级高的Pod抢占而导致被驱逐。如果想避免这个问题,可以对您实际使用的DaemonSet(如共享GPU显存的gpushare-device-plugin-ds)进行修改,加上priorityClassName: system-node-critical来保证其优先级。

  • 为考虑性能因素,在使用cGPU的情况下,单张GPU卡最多创建20Pod。当已创建Pod数超过此限制时,后续调度到该卡上的Pod将无法运行,并出现错误信息Error occurs when creating cGPU instance: unknown

  • 共享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

    德国(法兰克福)

    eu-central-1

  • 版本配套信息。

    配置

    支持版本

    Kubernetes版本

    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、Ubuntu 22.04

    支持显卡

    P系列、T系列、V系列、A系列、H系列

安装共享GPU调度组件

步骤一:安装共享GPU组件

未部署云原生AI套件

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择应用 > 云原生AI套件

  3. 云原生AI套件页面,单击一键部署

  4. 在一键部署云原生AI套件页面,选中调度策略扩展(批量任务调度、GPU共享、GPU拓扑感知)。

  5. (可选)单击调度策略扩展(批量任务调度、GPU共享、GPU拓扑感知)右侧的高级配置。在弹出的参数配置窗口,修改cGPUpolicy字段。修改完成后,单击确定

    如果对cGPU算力共享无特殊要求,建议使用默认policy: 5,即原生调度。cGPU支持的policy,请参见安装并使用cGPU服务image

  6. 云原生AI套件页面最下方,单击部署云原生AI套件

    组件安装成功后,在云原生AI套件页面的组件列表中能看到已安装的共享GPU组件ack-ai-installer

已部署云原生AI套件

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择应用 > 云原生AI套件

  3. 在调度组件ack-ai-installer所在行,单击操作列的部署

  4. (可选)在弹出的参数配置窗口,修改cGPUpolicy字段。

    如果对cGPU算力共享无特殊要求,建议使用默认policy: 5,即原生调度。cGPU支持的policy,请参见安装并使用cGPU服务image

  5. 修改完成后,单击确定

    组件安装完成后,ack-ai-installer状态已部署

步骤二:开启GPU共享调度能力和显存隔离能力

  1. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择节点管理 > 节点池

  2. 节点池页面,单击创建节点池。参见创建和管理节点池完成相关配置。

  3. 创建节点池页面,设置创建节点池的配置项,然后单击确认配置。重要配置项及其说明如下:

    配置项

    说明

    期望节点数

    设置节点池初始节点数量。如无需创建节点,可以填写为0。

    节点标签

    标签的值需根据您的业务需求添加。关于节点标签的详细说明,请参见GPU节点调度属性标签

    下文以标签值cgpu为例,该值表示节点开启共享GPU调度能力,每个Pod仅需申请GPU显存资源,多个Pod在一张卡上实行显存隔离和算力共享。

    单击节点标签节点标签,设置ack.node.gpu.schedulecgpu

    重要

步骤三:添加GPU节点

说明

如果您添加节点池时已经创建GPU节点,可以跳过此步骤。

完成创建节点池后,您还可以在节点池中添加GPU节点。添加GPU节点时,您需要指定实例规格的架构为GPU云服务器。具体操作,请参见添加已有节点创建和管理节点池

步骤四:安装和使用GPU资源查询工具

  1. 下载kubectl-inspect-cgpu。需将执行文件下载至PATH环境变量包含目录下,本文以/usr/local/bin/为例。

    • 如果您使用的是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
  2. 执行以下命令,为kubectl-inspect-cgpu添加执行权限。

    chmod +x /usr/local/bin/kubectl-inspect-cgpu
  3. 执行以下命令,查看集群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%)

升级共享GPU调度组件

步骤一:确认共享GPU调度组件的升级方式

您需要根据集群共享GPU调度组件(ack-ai-installer)的安装方式选择升级方式。安装共享GPU调度组件有两种方式。

  • 通过云原生AI套件安装(推荐):在云原生AI套件页面安装共享GPU调度组件ack-ai-installer。

  • 通过应用目录安装(该方式已关闭):在应用市场应用目录页面安装共享GPU调度组件ack-ai-installer。目前该安装方式已关闭。但对于已通过该方式安装的存量组件,您仍然可以在此方式完成组件的升级。

    重要

    如果您卸载了集群中通过此方式安装的组件,再次安装时,您需要开通云原生AI套件服务并完成安装。

如何确定集群中共享GPU调度组件的安装方式?

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择应用 > 云原生AI套件

  3. 确认云原生AI套件页面是否已部署ack-ai-installer组件。

    如有,则表明共享GPU调度组件通过云原生AI套件完成了安装,反之则是通过应用目录完成了安装。

步骤二:升级组件

通过云原生AI套件升级

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择应用 > 云原生AI套件

  3. 组件列表区域,定位ack-ai-installer组件并在操作列单击升级

通过应用目录升级

  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择应用 > Helm

  3. Helm列表,定位ack-ai-installer组件,在操作列单击更新,根据页面指引选择最新的Chart版本并完成组件更新。

    重要

    如需进行Chart的自定义配置,请在修改配置后确认组件的更新。

    更新后,请在Helm列表确认ack-ai-installer组件的Chart版本为最新版本。

步骤三:升级存量节点

ack-ai-installer组件升级完成后,并不会升级存量节点的cGPU版本。请参见下方说明,判断节点是否启用cGPU隔离功能。

  • 若集群中包含启用了cGPU隔离功能的GPU节点,还需升级存量节点的cGPU版本。具体操作,请参见升级节点cGPU版本

  • 若集群中不存在已开启cGPU隔离能力的节点,则忽略此步骤。

    说明
    • 若节点上存在标签ack.node.gpu.schedule=cgpuack.node.gpu.schedule=core_mem,代表已启用cGPU隔离能力。

    • 升级存量节点cGPU版本需要停掉节点上的所有业务Pod,请根据业务场景,在低峰期执行此操作。