NVIDIA 多实例 GPU(MIG) 概述¶
MIG 场景¶
-
多租户云环境 MIG 允许云服务提供商将一块物理 GPU 划分为多个独立的 GPU 实例,每个实例可以独立分配给不同的租户。这样可以实现资源的隔离和独立性,满足多个租户对 GPU 计算能力的需求。
-
容器化应用程序 MIG 可以在容器化环境中实现更细粒度的 GPU 资源管理。通过将物理 GPU 划分为多个 MIG 实例,可以为每个容器分配独立的 GPU 计算资源,提供更好的性能隔离和资源利用。
-
批处理作业 对于需要大规模并行计算的批处理作业,MIG 可以提供更高的计算性能和更大的显存容量。每个 MIG 实例可以利用物理 GPU 的一部分计算资源,从而加速大规模计算任务的处理。
-
AI/机器学习训练 MIG 可以在训练大规模深度学习模型时提供更大的计算能力和显存容量。将物理 GPU 划分为多个 MIG 实例,每个实例可以独立进行模型训练,提高训练效率和吞吐量。
总体而言,NVIDIA MIG 适用于需要更细粒度的GPU资源分配和管理的场景,可以实现资源的隔离、提高性能利用率,并且满足多个用户或应用程序对 GPU 计算能力的需求。
MIG 概述¶
NVIDIA 多实例 GPU(Multi-Instance GPU,简称 MIG)是 NVIDIA 在 H100,A100,A30 系列 GPU 卡上推出的一项新特性, 旨在将一块物理 GPU 分割为多个 GPU 实例,以提供更细粒度的资源共享和隔离。MIG 最多可将一块 GPU 划分成七个 GPU 实例, 使得一个 物理 GPU 卡可为多个用户提供单独的 GPU 资源,以实现最佳 GPU 利用率。
这个功能使得多个应用程序或用户可以同时共享GPU资源,提高了计算资源的利用率,并增加了系统的可扩展性。
通过 MIG,每个 GPU 实例的处理器在整个内存系统中具有独立且隔离的路径——芯片上的交叉开关端口、L2 高速缓存组、内存控制器和 DRAM 地址总线都唯一分配给单个实例。
这确保了单个用户的工作负载能够以可预测的吞吐量和延迟运行,并具有相同的二级缓存分配和 DRAM 带宽。 MIG 可以划分可用的 GPU 计算资源(包括流多处理器或 SM 和 GPU 引擎,如复制引擎或解码器)进行分区, 以便为不同的客户端(如虚拟机、容器或进程)提供定义的服务质量(QoS)和故障隔离)。 MIG 使多个 GPU 实例能够在单个物理 GPU 上并行运行。
MIG 允许多个 vGPU(以及虚拟机)在单个 GPU 实例上并行运行,同时保留 vGPU 提供的隔离保证。 有关使用 vGPU 和 MIG 进行 GPU 分区的详细信息,请参阅 NVIDIA Multi-Instance GPU and NVIDIA Virtual Compute Server。
MIG 架构¶
如下是一个 MIG 的概述图,可以看出 MIG 将一张物理 GPU 卡虚拟化成了 7 个 GPU 实例,这些 GPU 实例能够可以被多个 User 使用。
重要概念¶
SM
:流式多处理器(Streaming Multiprocessor),GPU 的核心计算单元,负责执行图形渲染和通用计算任务。 每个 SM 包含一组 CUDA 核心,以及共享内存、寄存器文件和其他资源,可以同时执行多个线程。 每个 MIG 实例都拥有一定数量的 SM 和其他相关资源,以及被划分出来的显存。GPU Memory Slice
:GPU 内存切片,GPU 内存切片是 GPU 内存的最小部分,包括相应的内存控制器和缓存。 GPU 内存切片大约是 GPU 内存资源总量的八分之一,包括容量和带宽。GPU SM Slice
:GPU SM 切片是 GPU 上 SM 的最小计算单位。在 MIG 模式下配置时, GPU SM 切片大约是 GPU 中可用 SMS 总数的七分之一。GPU Slice
:GPU 切片是 GPU 中由单个 GPU 内存切片和单个 GPU SM 切片组合在一起的最小部分。GPU Instance
:GPU 实例 (GI) 是 GPU 切片和 GPU 引擎(DMA、NVDEC 等)的组合。 GPU 实例中的任何内容始终共享所有 GPU 内存切片和其他 GPU 引擎,但它的 SM 切片可以进一步细分为计算实例(CI)。 GPU 实例提供内存 QoS。每个 GPU 切片都包含专用的 GPU 内存资源,这些资源会限制可用容量和带宽,并提供内存 QoS。 每个 GPU 内存切片获得总 GPU 内存资源的 ⅛,每个 GPU SM 切片获得 SM 总数的 1/7。Compute Instance
:GPU 实例的计算切片可以进一步细分为多个计算实例 (CI),其中 CI 共享父 GI 的引擎和内存,但每个 CI 都有专用的 SM 资源。
GPU 实例(GI)¶
本节介绍如何在 GPU 上创建各种分区。将使用 A100-40GB 作为示例演示如何对单个 GPU 物理卡上进行分区。
GPU 的分区是使用内存切片进行的,因此可以认为 A100-40GB GPU 具有 8x5GB 内存切片和 7 个 GPU SM 切片,如下图所示,展示了 A100 上可用的内存切片。
如上所述,创建 GPU 实例 (GI) 需要将一定数量的内存切片与一定数量的计算切片相结合。在下图中,一个 5GB 内存切片与 1 个计算切片相结合,以创建 1g.5gb
GI 配置文件:
同样,4x5GB 内存切片可以与 4x1 计算切片结合使用以创建 4g.20gb
的 GI 配置文件:
计算实例(CI)¶
GPU 实例的计算切片(GI)可以进一步细分为多个计算实例(CI),其中 CI 共享父 GI 的引擎和内存,但每个 CI 都有专用的 SM 资源。使用上面的相同 4g.20gb
示例,可以创建一个 CI 以仅使用第一个计算切片的 1c.4g.20gb
计算配置,如下图蓝色部分所示:
在这种情况下,可以通过选择任何计算切片来创建 4 个不同的 CI。还可以将两个计算切片组合在一起以创建 2c.4g.20gb
的计算配置):
除此之外,还可以组合 3 个计算切片以创建计算配置文件,或者可以组合所有 4 个计算切片以创建 3c.4g.20gb
、4c.4g.20gb
计算配置文件。合并所有 4 个计算切片时,配置文件简称为 4g.20gb
。