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

【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.dtcms.com/a/351824.html

相关文章:

  • mysql 执行sql流程概述
  • FreeRTOS学习笔记(四):任务执行与切换
  • ProfiNet 转 Ethernet/IP基于西门子 S7 - 1500 与罗克韦尔 PLC 的汽车零部件加工线协同案例
  • 基于微服务的水果分销系统-项目分享
  • LeetCode 3000.对角线最长的矩形的面积:一次遍历
  • 【golang长途旅行第32站】反射
  • 【机器学习深度学习】连续微调与权重合并的陷阱与最佳实践
  • 修改C盘缓存文件路径
  • MongoDB /redis/mysql 界面化的数据查看页面App
  • UCIE Specification详解(八)
  • 在MiniOB源码中学习使用Flex与Bison解析SQL语句-第一节
  • Rust 环境搭建与 SeekStorm 项目编译部署(支持中文)
  • Robrain V2.0正式登场:落地人形机器人,引爆智能进化革命
  • Ubuntu操作系统下使用mysql、mongodb、redis
  • [特殊字符] CentOS 7 升级 OpenSSH 10.0p2 完整教程(含 Telnet 备份)
  • 如果 我退休了
  • 汽车域控中Hypervisor方案极致安全原理与弊端
  • APP UI自动化测试的思路总结
  • 破解豆瓣Ajax动态加载:Python爬取完整长评论和短评
  • Java面试实战系列【JVM篇】- JVM内存结构与运行时数据区详解(私有区域)
  • 数据结构:链式队列尝试;0826
  • poi生成word固定表格列宽
  • Spring - 文件上传与下载:真正的企业开发高频需求——Spring Boot文件上传与下载全场景实践指南
  • 位运算卡常技巧详解
  • Charles抓包微信小程序请求响应数据
  • 信号无忧,转决千里:耐达讯自动化PROFIBUS集线器与编码器连接术
  • 快速了解卷积神经网络
  • springweb项目中多线程使用详解
  • 问:单证硕士含金量是否不足?
  • 【Linux 进程】进程程序替换