安装共享GPU调度组件

ACK提供GPU共享调度能力,服务于共享单GPU的模型预测场景,同时也支持通过NVIDIA驱动内核态保障GPU显存的隔离。本文介绍如何在GPU节点上安装共享GPU组件和GPU资源查询工具,实现GPU的调度和隔离能力。

前提条件

使用限制

  • 请勿将共享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显存隔离能力仅在以下地域中支持,请确保对应集群属于以下地域。

    展开查看地域信息

    地域

    地域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版本

    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套件

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

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

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

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

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

    如果对cGPU算力共享无特殊要求,建议使用默认policy: 5。cGPU支持的policy,请参见安装并使用cGPU服务2.jpg

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

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

已部署云原生AI套件

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

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

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

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

    如果对cGPU算力共享无特殊要求,建议使用默认policy: 5。cGPU支持的policy,请参见安装并使用cGPU服务2.jpg

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

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

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

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

  2. 节点池页面,单击创建节点池

  3. 创建节点池页面,设置创建节点池的配置项,然后单击确认配置

    以下为重要配置项的说明,其余配置项的配置方法,请参见创建节点池

    配置项

    说明

    期望节点数

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

    节点标签

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

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

    单击节点标签节点标签,设置为ack.node.gpu.schedule,为cgpu。

    重要

    添加共享GPU调度标签后,请勿通过kubectl label nodes命令切换节点GPU调度属性标签值或使用控制台节点页面的标签管理功能更改节点标签,以避免引发潜在的问题,请参见使用kubectl label nodes或通过控制台节点标签管理功能切换标签值存在的问题。推荐您基于节点池划分GPU资源调度能力

步骤三:添加GPU节点

说明

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

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

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

  1. 下载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
  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%)