当前位置: 首页 > ai >正文

【AI算力平台】算力高效调度策略——GPU调度

概述

作为AI算力平台,如何高效调度GPU资源,使其利用率最大化,是必须回答的一个问题。

本文以CCE集群+Volcano调度器为例,介绍常见的GPU调度策略及其使用场景

一、GPU整卡调度

  • GPU整卡:表示GPU整卡调度,即该容器将独立使用GPU卡,系统不会将该卡划分给其他容器使用。

  • nvidia.com/gpu设置为整数:表示GPU整卡调度

    即该容器将独占使用一张物理GPU卡,系统不会将该卡划分给其他容器使用,适用于对资源性能和隔离要求高的场景。

二、GPU虚拟化

CCE GPU虚拟化采用自研xGPU虚拟化技术,能够动态对GPU设备显存与算力进行划分。

单个GPU卡最多虚拟化成20个GPU虚拟设备。

2.1 GPU虚拟化优势

  • 灵活性:算力分配粒度为5%GPU,显存分配粒度达MiB级别。

  • 隔离性:支持显存和算力的严格隔离,支持单显存隔离,算力与显存同时隔离两类场景

2.2 限制条件

  • 单个GPU卡最多虚拟化成20个GPU虚拟设备。

  • init容器不支持使用GPU虚拟化资源。

  • 单个GPU卡仅支持调度同一种隔离模式的工作负载。

  • 容器内应用程序初始化时,通过nvidia-smi监测工具监测到的实时算力可能超过容器可用的算力上限。

  • GPU虚拟化的算显隔离功能在渲染场景无法使用,渲染场景请使用整卡模式或显存隔离模式。

  • 节点上开启了GPU虚拟化且有多张GPU卡时,如果GPU资源不足,不支持抢占其他Pod的GPU资源。

2.3 资源准备

2.3.1 开启GPU虚拟化

“配置中心 > 异构资源配置”,开启“GPU虚拟化”,支持配置集群级别节点池级别的GPU虚拟化

1)集群级别GPU虚拟化

开启“GPU配置 > GPU虚拟化”,开启后,全局默认开启GPU虚拟化,支持单GPU卡的算力与显存切分。

2)节点池级别GPU虚拟化

“GPU配置 > 节点池配置”

3)检查GPU虚拟化是否配置成功

找到配置GPU虚拟化的节点,查看YAML

如果YAML中“node-status.volcano.sh/nvidia”字段的值为“{"enableXGPU":true}”,则说明该节点GPU虚拟化配置成功。

2.3.2 创建GPU节点

在集群中创建支持GPU虚拟化的节点以使用GPU虚拟化功能,确保节点或节点池中有符合GPU虚拟化条件的GPU节点

2.3.3 修复Volcano调度策略

Volcano针对GPU节点的调度策略默认为Spread,即如果节点配置相同,会选择一个正在运行的容器数量最少的节点,可以尽量将容器平均分配到各个节点。

而Binpack调度策略与之相反,它会尽可能地把所有的容器调度到一台节点上运行,尽量少用节点,避免资源碎片化。

在使用GPU虚拟化特性时需要使用Binpack调度策略

2.4 创建GPU虚拟化应用

当显存设置为单张GPU卡的容量上限或算力设置为100%时,将会使用整张GPU卡。

使用GPU虚拟化时,工作负载调度器将默认指定为Volcano且不可更改。

在使用GPU虚拟化特性时需要使用Binpack调度策略

1)创建工作负载

2)配置工作负载信息

在“容器配置>基本信息”中设置GPU配额:

  • 显存:显存值单位为MiB,需为正整数,且为128的倍数。若配置的显存超过单张GPU卡的显存,将会出现无法调度状况。

  • 算力:算力值单位为%,需为5的倍数,且最大不超过100。

3)工作负载创建成功后,验证GPU虚拟化的隔离能力

2.5 GPU虚拟化关键参数

参数是否必选描述
volcano.sh/gpu-mem.128Mi该数值表示128Mi的倍数,需为正整数,显存值单位为MiB。若配置的显存超过单张GPU卡的显存,将会出现无法调度状况。
volcano.sh/gpu-core.percentage算力值单位为%,需为5的倍数,且最大不超过100。

三、GPU共享模式

共享模式:表示GPU共享调度,即多个容器可共享同一张物理GPU卡的计算资源和显存。

工作负载支持Kubernetes默认GPU调度,即设置nvidia.com/gpu参数

3.1 使用场景

1)nvidia.com/gpu设置为小数:表示GPU共享调度

即多个容器可共享同一张物理GPU卡的计算资源和显存,适用于轻量级推理等对算力需求较低的场景。

例如,在16GiB的GPU上,nvidia.com/gpu设置为0.5,则容器将被分配0.5×16GiB=8GiB=8192MiB(128MiB的64倍)

2)nvidia.com/gpu设置为整数:表示GPU整卡调度

即该容器将独占使用一张物理GPU卡,系统不会将该卡划分给其他容器使用,适用于对资源性能和隔离要求高的场景。

3.2 限制条件

  • 使用不同GPU资源名称的Pod之间不支持装箱调度。

  • 使用nvidia.com/gpu和volcano.sh/gpu-mem.128Mi声明资源的Pod,由于资源标识不一致,调度器无法将其视为同类资源,因此二者之间不支持装箱调度原则。

3.3 兼容GPU共享调度模式

1)创建一个使用nvidia.com/gpu资源的工作负载

nvidia.com/gpu: 0.1   # 表示GPU申请值

四、GPU多卡均分调度

4.1 使用场景

  • 单张GPU常因算力或显存不足无法满足需求,因此需要多张GPU卡协同工作。

  • GPU虚拟化的多卡均分调度功能允许任务跨多张GPU卡分配显存和计算力,实现更高效的资源利用。

  • 通过多卡均分调度,一个Pod可以灵活使用多张GPU,且每张GPU提供等量资源,实现GPU资源的精细化分配与高效利用。

4.2 限制条件

4.3 多卡均分调度使用示例

  • 在“容器配置 > 基本信息 >GPU配额”中选择GPU虚拟化。在下方开启“多卡均分调度”

  • “多卡均分调度”与“卡数”为容器共用配置,修改后将对负载的所有容器生效。

4.4 GPU多卡均分关键参数

参数是否必选描述
volcano.sh/gpu-num: '2'指定多卡均分调度的GPU卡数量,此例中Pod申请2卡,每卡占据4GB显存
volcano.sh/gpu-mem.128Mi该数值表示128Mi的倍数,需为正整数,显存值单位为MiB。若配置的显存超过单张GPU卡的显存,将会出现无法调度状况。
volcano.sh/gpu-core.percentage算力值单位为%,需为5的倍数,且最大不超过100。

小结

我们以CCE集群+Volcano调度器为例,介绍GPU整卡调度、GPU虚拟化、GPU共享模式、GPU多卡均分调度等多种GPU调度策略,适合不同的场景使用,有利于提高算力使用率。

http://www.xdnf.cn/news/18791.html

相关文章:

  • Rust 登堂 之 函数式编程(三)
  • vagrant怎么在宿主机管理虚拟机镜像box(先搁置)
  • PyTorch生成式人工智能——PatchGAN详解与实现
  • LeetCode 438. 找到字符串中所有的字母异位词
  • 功能强大的PDF工具箱-- PDF补丁丁,v1.1.0.4657新版本,免费无广告,开箱即用版~
  • flutter专栏--dart基础知识
  • Android系统学习2——Android.Utils.Log模块讨论
  • [Maven 基础课程]Maven 是什么
  • Java微服务AI集成指南:LangChain4j vs SpringAI
  • imx6ull-驱动开发篇43——I.MX6U 的 I2C 驱动分析
  • 软件开发技术栈
  • 集成电路学习:什么是ResNet深度残差网络
  • LeetCode 2140. 解决智力问题
  • JavaScript常用的算法详解
  • 8.26网络编程——Modbus TCP
  • 【跨国数仓迁移最佳实践7】基于MaxCompute多租的大数据平台架构
  • 发力低空经济领域,移动云为前沿产业加速崛起注入云端动能
  • Tomcat下载历史版本
  • 前沿技术趋势与应用:探索数字世界的下一个十年
  • 【第三章】软件测试缺陷管理:从判断到回归的全流程实践指南​
  • 支持向量机学习
  • 33.ansible 比较重要的配置文件
  • 可口可乐考虑出售Costa咖世家!加上星巴克中国、Peet’s皮爷咖啡,三大国际咖啡品牌“纷纷卖身”!咖啡行业格局彻底改写!
  • MyBatis-Flex是如何避免不同数据库语法差异的?
  • 微服务-23.网关登录校验-自定义GlobalFilter
  • 数据结构青铜到王者第五话---LinkedList与链表(2)
  • 洛谷: CF632D Longest Subsequence-普及+/提高
  • 相机激光安全等级和人眼安全
  • 亚马逊云科技免费套餐新政解析与实战:数据分析与可视化平台
  • 机器学习(二)特征工程