安装共享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节点

说明

如果您添加节点池时已经创建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%)