共享GPU调度默认按1 GiB为单位申请显存,申请更细粒度的显存需要更改显存最小分配单位。本文介绍如何将共享GPU调度显存最小分配单位更改为128 MiB,以申请更细粒度的显存。
前提条件
注意事项
- 如果集群中已存在共享GPU应用(申请了 - aliyun.com/gpu-mem的Pod),需要删除这些任务才能进行显存单元切换工作,否则调度器账本会发生混乱。
- 该功能仅支持节点开启只共享不隔离的情景(即节点标签为 - ack.node.gpu.schedule=share)。对于既共享又隔离的情景(即节点标签为- ack.node.gpu.schedule=cgpu),由于隔离模块限制,即使每个Pod申请的显存为128 MiB,每块GPU卡只能创建16个Pod。
- 当节点按128 MiB为单位上报显存资源时,不支持节点弹性伸缩,例如某个Pod申请 - aliyun.com/gpu-mem资源数为32,此时集群中节点没有足够的显存满足该Pod需求,该Pod处于Pending状态,即使配置了节点弹性伸缩,也不会弹出放置该Pod的节点。
- 若集群创建时间早于2021年10月20日,需提交工单让售后同学重启调度器,配置才能生效。 
更改显存单位
未安装ack-ai-installer
- 登录容器服务管理控制台,在左侧导航栏选择集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。 
- 单击页面下方的一键部署,选中调度策略扩展(批量任务调度、GPU共享、GPU拓扑感知)并单击高级配置。 
- 单击高级配置,在如下位置添加代码 - gpuMemoryUnit: 128MiB,然后单击确定。 
- 配置完成后单击部署云原生AI套件。 - 组件ack-ai-installer的状态从部署中变为已部署,表明组件已部署完成。 
已安装ack-ai-installer
- 登录容器服务管理控制台,在左侧导航栏选择集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。 
- 单击组件ack-ai-installer所在行的卸载,单击确定。 
- 卸载完成后,单击组件ack-ai-installer所在行的部署,增加如下代码 - gpuMemoryUnit: 128MiB。 
- 单击确定。 - 组件ack-ai-installer的状态从部署中变为已部署,表明组件ack-ai-installer已部署完成。 
申请显存示例
下面是一个示例Pod,该Pod通过aliyun.com/gpu-mem申请16个单位为128 MiB的显存,总共申请2 GiB。
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