问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

如何为多进程GPU负载提供高效的计算资源共享?

创作时间:
作者:
@小白创作中心

如何为多进程GPU负载提供高效的计算资源共享?

引用
1
来源
1.
https://www.modb.pro/db/1864493798760394752

随着GPU在高性能计算、人工智能和数据分析等领域的广泛应用,如何提高GPU资源的使用效率并减少不必要的基础设施成本成为企业关注的重点。本文将深入探讨GPU Time-Slicing技术,分析其在并发场景下的应用与优势,并探讨其适用场景。

GPU(图形处理单元)已成为企业级系统中不可或缺的核心组件,尤其在高性能计算、人工智能和数据分析等需要处理大量计算工作负载的场景下。然而,许多企业在配置GPU资源时往往采取超额订购的方式,导致部分硬件资源未得到完全充分利用,从而产生计算能力的浪费。这种情况在企业运行无法完全占用GPU集群内存或计算能力的应用程序时尤为明显。

为提高GPU资源的使用效率并减少不必要的基础设施成本,企业可以采用多种资源共享策略。例如,多进程服务 (MPS)、多实例 GPU (MIG) 和 GPU Time-Slicing等技术能够在多个进程之间分配并复用闲置的GPU资源。这些方法不仅提升了GPU的整体利用率,也能显著降低企业的运维成本,并提高资源配置的灵活性和生产力。

本文将聚焦于GPU Time-Slicing共享技术,深入探讨其在并发场景下的应用与优势,并分析其如何为多进程的GPU负载提供高效的计算资源共享。

1. 为什么需要对GPU进行分区?

所谓"GPU 分区",其实从本质上来讲是一项旨在优化跨集群GPU资源利用率的先进技术。通过将单个物理GPU划分为多个逻辑分区,我们可以为不同类型的计算任务分配适量的GPU资源,从而显著提升整体资源利用率。

通常而言,无论是基于成本还是业务场景特性的支撑,GPU分区所带来的价值优势不容忽视,具体可参考:

  1. 精准资源分配:针对不同工作负载的计算需求,GPU分区能够实现细粒度的资源分配,确保每个应用程序都能获得最适合其运行的GPU资源,从而避免资源浪费或不足。
  2. 提高系统性能:通过将大型GPU分割成多个较小的分区,可以同时支持多个并发任务,提高系统的整体吞吐量。此外,GPU分区还能有效隔离不同任务,减少相互干扰,从而提升系统稳定性。
  3. 降低运营成本:通过优化资源利用率,GPU分区可以减少对额外GPU硬件的需求,从而降低数据中心的运营成本。
  4. 增强服务质量:GPU分区能够为不同的应用程序提供不同的服务质量保证,例如,为高优先级的任务分配更多的GPU资源,以确保其及时完成。
  5. 提高系统灵活性:GPU分区使得系统能够根据实际需求动态调整资源分配,从而适应不断变化的工作负载。

虽然对于那些拥有足够大GPU的用户来说,GPU分区可能不是必需的,但对于需要在多个任务之间共享GPU资源,或者需要为不同类型的应用程序提供不同级别服务质量的用户来说,GPU分区无疑是一种非常有效的解决方案。


图:GPU分区参考示意图

因此,从宏观角度而言,GPU分区是现代高性能计算环境中不可或缺的一项技术。通过合理地规划和配置GPU分区,我们可以最大限度地发挥GPU硬件的潜力,提高计算效率,降低运营成本,并为各种类型的应用程序提供更好的支持。

2. 如何理解 GPUTime-Slicing?

作为一种关键的虚拟化技术,GPU Time-Slicing通过将GPU的计算资源划分为连续的时间片,使多个工作负载或虚拟机 (VM) 能够共享同一GPU实例。

具体而言,GPU Time-Slicing机制将GPU的计算和内存资源按顺序在不同任务或用户之间分配,确保每个工作负载在各自的时间片内能够获得所需的GPU资源支持。通过这一方式,单个GPU实现了在多个任务之间的并行处理,不仅有效提高了资源利用率,还保障了对所有工作负载的公平资源分配。

这种Time-Slicing技术尤其适用于需要动态调度和高并发处理的场景,如云计算和容器化环境。在这些场景中,Time-Slicing为不同的用户任务提供了隔离而独立的资源访问路径,从而避免资源争夺,保证任务稳定运行。同时,这种资源分配模式帮助企业大幅降低硬件成本,使其无需配置多个GPU即可满足高负载需求。此外,通过Time-Slicing,企业能够在保障性能的前提下实现灵活的GPU资源管理,从而优化整体的计算能力和基础设施投资回报。

其实,从本质上来讲,在云原生环境中, 尽管该方案被称为'Time Slicing'( 时间切片 ),但在Kubernetes动态资源分配 (DRA) 驱动中device-plugin的实现方式与实际的Time-Slicing机制并无直接关联。实际上,这种方案更确切地说是一种GPU超分配策略,其核心在于通过逻辑分配超出物理GPU的实际容量,以实现对GPU资源的更高利用率。

这种超分配策略旨在满足多个工作负载的并发需求,使得在计算需求较为波动的场景下,系统能够动态分配和调整资源。相比真正的Time-Slicing,这种方法不会严格按照时间片对物理资源进行分割,而是通过虚拟化手段,按需分配超出GPU物理容量的资源请求。此策略在保持一定的性能表现下,有效提升了GPU的总体利用率,特别适用于资源需求不确定但希望节约硬件成本的应用场景。

在使用Time Slicing共享GPU资源时,可通过以下扩展配置选项实现灵活的资源管理:

version: v1
sharing:
  timeSlicing:
    renameByDefault: true
    failRequestsGreaterThanOne: true
    resources:
- name: nvidia.com/gpu
      replicas: 10

基于上述配置,若 将此配置应用于一个具有8个GPU的节点,该插件将会向Kubernetes注册总共80个nvidia.com/gpu资源,而不是原始的8个。这种配置扩展了GPU资源的共享范围,允许通过Time-Slicing实现更高的并发性。

需要注意的是,与传统的GPU请求方式不同,请求多个共享GPU并不意味着获取更高的计算资源比例 。此配置仅意味着客户端将获得访问共享GPU的权限,而并非独占某一部分的计算能力。通过Time Slicing,CUDA底层会公平分配GPU资源,为所有客户端的进程提供等量的时间份额。这意味着各个客户端在共享GPU上可以并行运行任意数量的进程,而无需关心GPU硬件的具体分配情况。

配置选项中的failRequestsGreaterThanOne标志用于帮助用户更清晰地理解这一共享机制的特性。设置该标志为true后,系统将拒绝超过单个共享GPU的资源请求。这一设计可以防止用户将共享请求误解为独占资源请求,确保资源请求被视为单一访问权限,而非更高比例的计算能力请求。推荐将failRequestsGreaterThanOne设置为true,但默认情况下该值为false,以保留与早期版本的向后兼容性。

3. GPU Time-Slicing是如何工作的?

如上所述,GPU Time-Slicing技术的核心在于通过时间片调度来实现GPU资源的动态分配。


图:GPU Time-Slicing 工作原理参考示意图

根据预设的配置,系统会将GPU的计算时间划分为若干个时间段,并在这些时间段内将GPU资源分配给不同的任务。具体调度过程可参考如下所示:

1、调度器的实现

GPU调度器是负责在多个任务之间高效管理和分配GPU资源的关键组件。它通过将GPU的可用计算时间划分为细小的时间片,并根据预定义的策略将这些时间片分配给各种工作负载或虚拟机 (VM),以确保资源的公平利用和高效分配。每个时间片表示一个固定的时间段,在此期间内,特定的工作负载可以独占访问GPU资源。这些时间片通常设置为非常短的时长,使GPU能够快速在不同任务之间切换,从而实现多任务的并发执行。

2、任务排队

当有新的GPU任务请求资源时,这些任务被放入由调度器管理的任务队列中。调度器负责对队列中的任务进行排序和管理,根据任务的优先级、资源需求和其他预设策略对其进行组织。调度器可以应用多种任务调度策略,例如常用的轮询 (Round Robin) 调度策略,该策略通过均匀分配时间片,使各任务依次获得GPU资源,从而实现公平分配和负载均衡。

3、资源分配

当分配给任务的时间片结束时,GPU将进行上下文切换,以便保存当前任务的状态,并加载下一个任务的状态。上下文切换的过程包括保存和恢复寄存器、内存指针以及其他相关的运行时数据。GPU确保每个任务在其分配的时间片内都能够访问所需的计算和内存资源。资源分配过程还包括管理GPU的内存使用,确保数据能够正确、高效地从CPU传输到GPU,并在任务完成后将数据从GPU返回至CPU,从而避免内存瓶颈并提升数据流的效率。

4、任务执行与调度监控

在任务的时间片内,任务在GPU上运行并充分利用GPU的计算核心、内存和其他资源。调度器在任务执行期间持续监控任务的性能表现,并根据实际需求动态调整时间片的长短和资源分配策略,以优化整体的GPU利用率。这种实时监控和动态调节机制确保了资源的公平分配,使各任务在满足资源需求的同时也能适应系统的整体负载,避免过度分配或资源争用。此外,调度器能够在高优先级任务进入队列时优先为其分配资源,以确保关键任务的响应时间,从而提升系统的整体计算效率和任务处理能力 。

4. GPU Time-Slicing优劣势解析

作为一种在GPU上实现应用程序并发的默认方法,GPU Time-Slicing与其他并发技术(如多实例GPU (MIG) 和多进程服务 (MPS))相比具有独特优势。

首先,MIG和MPS都仅允许有限数量的GPU分区,而Time-Slicing则不受此限制。通过Time-Slicing,可以在同一 GPU硬件上运行几乎无限数量的进程,从而最大限度地利用硬件资源。

其次,Time-Slicing具有高度的灵活性,与MIG固定的资源划分方式不同。MIG将GPU分割为多个独立隔离的实例,每个实例的CUDA核心和内存容量都是固定的,不可更改。而Time-Slicing则在整个GPU资源范围内动态转移资源,从一个进程切换到另一个进程,没有固定的CUDA核心或内存限制。这种灵活性避免了硬件供应商设置的分区约束,支持更加弹性的资源调配,允许进程动态适应整个GPU的计算和内存资源。

第三, Time-Slicing支持多种GPU代际架构,是一种通用功能,适用于几乎所有GPU,无论其架构和型号。这使得企业可以充分利用价格较低的上一代GPU来满足需要GPU加速但又关注成本的项目需求,从而实现良好的成本效益。而相较之下,MIG仅支持Ampere和Hopper架构的GPU(如A30、A100和H100等),适用范围有限。

尽管Time-Slicing显著提升了GPU利用率,但其特性也带来了某些局限性,具体如下所示:

  1. 由于上下文切换涉及的时间开销,Time-Slicing并不适用于对延迟高度敏感的工作负载。频繁的上下文切换会导致内存传输的争用,从而增加周转时间,降低性能的可预测性。尽管Time-Slicing在资源利用效率上优于GPU直通模式,但由于进程切换中的延迟,单个应用程序的GPU性能可能会有所降低。
  2. 交替使用时间片的进程可能无法充分利用GPU资源。在每个时间片内,未被当前进程占用的CUDA线程、寄存器内存和共享内存等资源可能处于闲置状态,导致资源浪费。这种资源未使用情况在高负载应用中会导致GPU整体资源的利用效率下降。
  3. 在Kubernetes环境中,Time-Slicing面临特定的技术挑战。Kubernetes API将GPU视为无法超额订购的离散资源,阻碍了在同一硬件上并发运行容器化工作负载的灵活性。因此,当多个容器共享同一GPU时,往往会出现瓶颈现象,导致资源利用不足。为应对这一挑战,Nvidia和AMD已开发API解决方案,以通过Time-Slicing更好地管理工作负载的并发性,从而减轻容器化应用在Kubernetes中的资源调度问题。
  4. Time-Slicing的一个重要限制是:只有当所有进程的资源需求总量低于GPU的可用资源时,才能启动两个以上的并发进程。尽管通过Time-Slicing不同进程不会在GPU上同时执行,但仍需确保GPU能够满足各个进程的资源需求,否则可能会出现进程因内存不足而崩溃的风险。因此,在应用GPU Time-Slicing时,企业应确保任务的资源需求处于合理范围,以避免资源竞争对稳定性和性能的负面影响。

5. 哪些业务类型最适合采用GPU Time-Slicing模式?

从性能和成本角度来看,最适合采用GPU Time-Slicing方案的业务普遍具有并发性高、对计算延迟敏感度较低的特征,因此可以有效地利用GPU Time-Slicing在提升资源利用率和控制成本方面的优势 ,即"在线推理与服务型业务"。

最为典型的便是自动驾驶中的实时图像处理、语音识别系统、自然语言处理、个性化推荐系统等。例如,在自动驾驶场景下,系统需要对大量传感器数据进行实时分析和判断。而在体育赛事直播中,也需快速处理和识别图像,得到大量的应用。上述类型应用通常具有短时间、高并发的请求,要求系统具备较快的响应速度,但单次推理任务的延迟要求相对较宽松。多项推理任务可以并行运行,不需要对每项任务分配专用的GPU资源。

从成本优势角度来看:采用GPU Time-Slicing方案,多个推理任务可以在同一GPU上共享计算资源。通过时间片快速切换,GPU可以同时支持大量推理请求的并发执行。这样一来,不仅降低了硬件的专用分配需求,还减少了资源闲置时间,从而大幅提高资源利用效率并显著降低硬件投入成本。

从适用性角度分析:在线推理业务的高并发性及其对GPU资源的灵活需求,使得Time-Slicing在这类场景中极具优势。与专用GPU资源相比, Time-Slicing可以优化GPU的并发处理能力,满足高并发需求的同时有效降低计算资源成本。

当然,除了在线推理与服务型业务之外,GPU Time-Slicing也可以用于虚拟桌面基础架构(VDI)和多租户环境、边缘计算和物联网(IoT)数据分以及一些轻量级AI应用的中小企业中。GPU Time-Slicing在上述场景中能够表现出明显的经济效益和性能优势。对于高并发、低延迟敏感的应用,Time-Slicing不仅提升了GPU资源利用率,还显著降低了硬件成本支出。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号