共享GPU调度默认按1 GiB为单位申请显存,申请更细粒度的显存需要更改显存最小分配单位。本文介绍如何将共享GPU调度显存最小分配单位更改为128 MiB,以申请更细粒度的显存。

前提条件

  • 您的集群需要安装共享GPU调度专业版的组件,然后您才可以更改共享GPU调度显存最小分配单位。关于安装共享GPU调度专业版的组件,请参见安装并使用共享GPU组件和资源工具
  • 若已安装ack-ai-installer,需要卸载重新安装并设置gpuMemoryUnit值为128 MiB。
  • 集群类型为ACK Pro且集群版本≥1.18.8。关于创建ACK Pro集群和升级集群,请参见创建ACK Pro版集群升级集群

注意事项

  • 如果集群中已存在共享GPU应用(申请了aliyun.com/gpu-mem的Pod),需要删除这些任务才能进行显存单元切换工作(1 GiB -> 128 MiB或128 MiB -> 1 GiB),否则调度器账本会发生混乱。
  • 该功能仅支持集群中节点开启只共享不隔离的情景(即节点打上了标签ack.node.gpu.schedule=share),对于既共享又隔离的情景(即节点打上了标签:ack.node.gpu.schedule=cgpu),因为隔离模块限制了一块GPU卡上仅能创建16个Pod,所以在一张显存为32 GiB的GPU卡上,即使您的Pod申请的显存为128 MiB,也只能创建16个Pod。
  • 当节点按128 MiB为单位上报显存资源时,不支持节点弹性伸缩,例如某个Pod申请aliyun.com/gpu-mem资源数为32,此时集群中节点没有足够的显存满足该Pod需求,该Pod处于Pending状态,即使配置了节点弹性伸缩,也不会弹出放置该Pod的节点。
  • 若集群创建时间早于2021年10月20日,需要提交工单让售后同学重启调度器,配置才能生效。

更改显存单位

  1. 登录容器服务管理控制台
  2. 在左侧导航栏,选择市场 > 应用市场
  3. 应用目录页签下搜索框中搜索ack-ai-installer,单击ack-ai-installer
  4. ack-ai-installer界面右上角,单击一键部署
  5. 选择集群、输入命名空间和发布名称,单击下一步
  6. 设置gpuMemoryUnit值为128 MiB,单击确定
    1

申请显存示例

下面是一个示例Pod,该Pod通过aliyun.com/gpu-mem申请16个单位为128 MiB的显存,总共申请:16 * 128 MiB = 2GiB。

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: binpack
  labels:
    app: binpack
spec:
  replicas: 1
  serviceName: "binpack-1"
  podManagementPolicy: "Parallel"
  selector: # define how the deployment finds the pods it manages
    matchLabels:
      app: binpack-1
  template: # 定义Pods规范。
    metadata:
      labels:
        app: binpack-1
    spec:
      containers:
      - name: binpack-1
        image: registry.cn-beijing.aliyuncs.com/ai-samples/gpushare-sample:tensorflow-1.5
        command:
        - bash
        - gpushare/run.sh
        resources:
          limits:
            # 128 MiB
            aliyun.com/gpu-mem: 16   # 16 * 128 MiB = 2 GiB