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

GPU虚拟化技术详解:NVIDIA方案与实践

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

GPU虚拟化技术详解:NVIDIA方案与实践

引用
CSDN
1.
https://m.blog.csdn.net/taxiidriver/article/details/144118627

GPU虚拟化技术是云计算和数据中心领域的重要技术之一,它允许一个物理GPU被划分为多个虚拟GPU(vGPU),从而实现资源的共享和优化。本文以NVIDIA GPU为例,详细介绍了GPU虚拟化的各种方案,包括Pass-Through、vGPU、MIG(多实例GPU)以及相关的调度方案,为读者提供了全面的技术洞察和实用的解决方案。

前言

本文主要以NVIDIA GPU为例介绍虚拟化方案。

方案概述

GPU虚拟化是指将一个物理GPU划分为多个虚拟GPU(vGPU),从而使多个虚拟机或容器可以共享同一个物理GPU资源。GPU虚拟化技术中多个虚拟GPU之间相互隔离互不干扰;通过GPU虚拟化技术还可以给虚拟机或容器动态分配GPU算力,从而提高GPU资源利用率和灵活性。

NV方案

Pass-Through

在GPU直通模式下,整个物理GPU直接分配给一个VM,绕过NVIDIA虚拟GPU管理器。在这种操作模式下,GPU仅由在分配给它的VM中运行的NVIDIA驱动程序访问。GPU不在VM之间共享。

vGPU

NVIDIA虚拟GPU(vGPU)使用部署在非虚拟化操作系统上的相同NVIDIA图形驱动程序,使多个虚拟机(VM)能够同时直接访问单个物理GPU。通过这样做,NVIDIA vGPU为虚拟机提供了无与伦比的图形性能、计算性能和应用程序兼容性,以及在多个工作负载之间共享GPU带来的成本效益和可扩展性。

vGPU系统架构

NVIDIA vGPU系统架构

NVIDIA vGPU的高级架构如图所示。在管理程序下运行的NVIDIA虚拟GPU管理器的控制下,NVIDIA物理GPU能够支持多个虚拟GPU设备(vGPU),这些设备可以直接分配给访客VM。

访客虚拟机使用NVIDIA vGPU的方式与管理程序通过的物理GPU相同:访客虚拟机中加载的NVIDIA驱动程序提供对GPU的直接访问,以实现性能关键的快速路径,而NVIDIA虚拟GPU管理器的半虚拟化接口用于非性能管理操作。

Time-sliced vGPU内部架构

Time-sliced NVIDIA vGPU内部架构

时间切片vGPU是一种驻留在物理GPU上的vGPU,该物理GPU未被划分为多个GPU实例。驻留在GPU上的所有时间切片vGPU共享对GPU引擎的访问,包括图形(3D)、视频解码和视频编码引擎。

在时间切片的vGPU中,在vGPU上运行的进程被安排为串行运行。当其他进程在其他vGPU上运行时,每个vGPU都会等待。当进程在vGPU上运行时,vGPU可以独家使用GPU的引擎。

vGPU驱动框架

使用特定于供应商的VFIO框架的管理程序仅将其用于支持SR-IOV的NVIDIA vGPU。管理程序仍然使用传统NVIDIA vGPU的中介VFIO mdev驱动程序框架。

MIG

新的多实例GPU(MIG)功能允许GPU(从NVIDIA Ampere架构开始)安全地划分为最多七个单独的GPU实例,用于CUDA应用程序,为多个用户提供单独的GPU资源,以实现最佳的GPU利用率。此功能对于没有完全饱和GPU计算能力的工作负载特别有益,因此用户可能希望并行运行不同的工作负载以最大限度地提高利用率。

对于具有多租户用例的云服务提供商(CSP),MIG除了为客户提供增强的隔离外,还确保一个客户端不会影响其他客户端的工作或调度。

使用MIG,每个实例的处理器在整个内存系统中都有单独和隔离的路径——片上交叉端口、L2缓存库、内存控制器和DRAM地址总线都被唯一地分配给单个实例。这确保了单个用户的工作负载可以以可预测的吞吐量和延迟运行,具有相同的L2缓存分配和DRAM带宽,即使其他任务正在处理自己的缓存或使DRAM接口饱和。MIG可以对可用的GPU计算资源(包括流式多处理器或SM,以及复制引擎或解码器等GPU引擎)进行分区,为VM、容器或进程等不同客户端提供具有故障隔离的定义服务质量(QoS)。MIG使多个GPU实例能够在单个物理NVIDIA Ampere架构GPU上并行运行。

使用MIG,用户将能够在新的虚拟GPU实例上查看和安排作业,就像它们是物理GPU一样。MIG适用于Linux操作系统,支持使用Docker引擎的容器,支持使用红帽虚拟化和VMware vSphere等管理程序的Kubernetes和虚拟机。MIG支持以下部署配置:

1.裸金属,包括容器
2.GPU在受支持的管理程序之上通过虚拟化传递给Linux客户机
3.vGPU位于受支持的管理程序之上

MIG允许多个vGPU(以及虚拟机)在单个GPU上并行运行,同时保留vGPU提供的隔离保证。

调度方案

Time-sliced

此图显示了运行由多个没有MPS的操作系统进程组成的MPI应用程序时CUDA内核的可能时间表。虽然每个MPI进程中的CUDA内核可以并发调度,但每个MPI进程在整个GPU上都被分配了一个串行调度的时间片。

MPS

多进程服务(MPS)是CUDA应用程序编程接口(API)的一种可替代的、二进制兼容的实现方式。MPS运行时架构旨在透明地启用协作多进程CUDA应用程序,通常是MPI作业,以利用最新NVIDIA(Kepler及更高版本)GPU上的Hyper-Q功能。Hyper-Q允许CUDA内核在同一GPU上并发处理;当GPU计算能力未被单个应用程序进程充分利用时,这可以提高性能。

MPS是CUDA API的二元兼容客户端-服务器运行时实现,它由几个组件组成:

控制守护进程——控制守护进程负责启动和停止服务器,以及协调客户端和服务器之间的连接。

客户端运行时——MPS客户端运行时内置于CUDA驱动程序库中,任何CUDA应用程序都可以透明地使用。

服务器进程——服务器是客户端与GPU的共享连接,提供客户端之间的并发性。

当使用MPS时,服务器管理与单个CUDA上下文相关的硬件资源。属于MPS客户端的CUDA上下文通过MPS服务器汇集他们的工作。这允许客户端CUDA上下文绕过与时间片调度相关的硬件限制,并允许其CUDA内核同时执行。

总结

本文介绍了NV的虚拟化实现方案,Pass-Through方式只能被单一用户/VM独占,vGPU可以实现多个VM共享GPU但实时性不足,MPS通过合并运行上下文的方式提升GPU的利用率但会导致故障扩散问题,MIG通过硬件资源隔离的方式更好的满足多运行实体的场景且能实现故障隔离。

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