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

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏,单击集群
  3. 集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 在集群管理页左侧导航栏,选择应用 > 云原生AI套件
  5. 云原生AI套件页面,单击一键部署
  6. 在一键部署云原生AI套件页面,选中调度组件(批量任务调度、GPU共享、GPU拓扑感知、NPU调度),单击页面下方的部署云原生AI套件1
    说明 如果您已经部署了云原生AI套件,则在云原生AI套件页面的组件列表,单击ack-ai-installer右侧操作列下的部署
    组件安装成功后,在云原生AI套件页面的组件列表中能看到已安装的共享GPU组件ack-ai-installer

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

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏,单击集群
  3. 集群列表页面单击已安装ack-ai-installer组件集群操作列的节点池
  4. 节点池页面单击创建节点池
  5. 创建节点池页面,设置创建节点池的配置项,然后单击确认配置
    关于配置项的详细说明,请参见创建ACK Pro版集群。部分配置项说明如下:
    • 数量:设置节点池初始节点数量。如不需要创建节点,可以填写为0。
    • 操作系统:选择节点的操作系统,包括CentOS、Alibaba Cloud Linux 2.x、Windows。
    • ECS标签:您可以为ECS实例添加标签。
    • 自定义资源组:您可以指定节点池所扩容节点的资源组信息。
    • 节点标签:为集群节点添加标签。关于节点标签的详细说明,请参见ACK调度GPU使用的节点标签说明
      • 开启GPU共享调度能力,同时开启GPU显存隔离能力。
        单击节点标签节点标签,设置为ack.node.gpu.schedule,为cgpu。
        说明 如果只需要节点池支持共享调度,不支持显存隔离,您可以设置节点标签ack.node.gpu.scheduleshare
      • 在节点上使用Binpack算法为Pod选择GPU卡。

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

步骤三:添加GPU节点

完成创建节点池后,您还可以在节点池中添加GPU节点。添加GPU节点时,您需要将实例规格类型设置为异构计算GPU/FPGA/NPU。具体操作,请参见添加已有节点创建节点池
说明 如果您添加节点池时已经创建GPU节点,您可以跳过此步骤。

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

  1. 配置kubeconfig文件。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群
  2. 下载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
  3. 执行以下命令,为kubectl-inspect-cgpu添加执行权限。
    sudo chmod +x /usr/local/bin/kubectl-inspect-cgpu
  4. 执行以下命令,查看集群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%)