首页 > 其他分享 >NVIDIA GPU MIG多实例&Multi-Instance GPU-中文用户指南

NVIDIA GPU MIG多实例&Multi-Instance GPU-中文用户指南

时间:2024-08-01 10:52:51浏览次数:12  
标签:Multi 配置文件 MIG 实例 CUDA GPU gb

目录

第一章、介绍

第二章、支持的GPU卡

第三章、支持的配置 

第四章、虚拟化 

第五章、概念 

5.1 术语

5.2 分区(Partitioning)

 5.3 CUDA并发机制

第六章、部署考虑事项

6.2 应用考虑事项

 第七章、MIG设备名称

7.1  设备枚举

7.2 CUDA设备枚举

第八章、支持的MIG配置文件 

8.1 A30 MIG配置文件

8.2 A100 MIG配置文件

8.3 H100 MIG配置文件

8.4 H200 MIG配置文件

第九章、开始使用MIG 

9.1 先决条件

9.2 启用MIG模式

9.2.1 在Hopper+ GPU卡上重置GPU

9.2.2 在Ampere GPU卡重启GPU

9.2.3 客户端驱动程序

9.3 列出GPU实例配置文件

9.4 创建GPU实例

9.5 在裸机上运行CUDA应用程序

9.5.1 GPU实例

9.5.2 计算实例

9.6 销毁GPU实例

9.7 监控MIG设备

9.8 MIG与CUDA MPS

9.9 以容器形式运行CUDA应用程序

9.9.1 安装Docker

9.9.2 安装NVIDIA容器工具包

9.9.3 运行容器

9.4 MIG与Kubernetes

9.5 MIG与Slurm

第十章、设备节点和功能

10.1 /dev基于nvidia-capabilities

10.2 / proc 基于 nvidia-capabilities(已弃用)

 第十一章、变更日志


第一章、介绍

新的多实例GPU(MIG)功能允许GPU(从NVIDIA Ampere架构开始)被安全地分区为最多七个独立的GPU实例,用于CUDA应用程序,为多个用户提供独立的GPU资源,以实现最佳GPU利用率。这一功能特别适用于未完全利用GPU计算能力的工作负载,因此用户可能希望并行运行不同的工作负载以最大化利用率。

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

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

通过MIG,用户将能够看到并调度他们的新虚拟GPU实例上的作业,就像它们是物理GPU一样。MIG与Linux操作系统配合使用,支持使用Docker Engine的容器,支持Kubernetes和使用Red Hat Virtualization和VMware vSphere等虚拟机监视程序的虚拟机。

MIG支持以下部署配置:

  • 裸金属,包括容器
  • 在支持的虚拟机监视程序上向Linux客户端进行GPU透传虚拟化
  • 在支持的虚拟机监视程序上进行vGPU虚拟化

MIG允许多个vGPU(从而是VM)在单个GPU上并行运行,同时保留vGPU提供的隔离保证。有关使用vGPU和MIG进行GPU分区的更多信息,请参阅技术简介。

MIG概述

本文的目的是介绍MIG背后的概念、部署考虑因素,并提供MIG管理示例,以展示用户如何在支持MIG的GPU上运行CUDA应用程序。

第二章、支持的GPU卡

MIG支持从NVIDIA Ampere一代开始的GPU(即具有计算能力>= 8.0的GPU)。

以下表格提供了支持的GPU列表:
产品 体系架构 微体系架构 计算能力 内存大小 支持的最大实例数
H100-SXM5 Hopper GH100 9.0 80GB 7
H100-PCIE Hopper GH100 9.0 80GB 7
H100-SXM5 Hopper GH100 9.0 94GB 7
H100-PCIE Hopper GH100 9.0 94GB 7
H100 on
GH200
Hopper GH100 9.0 96GB 7
A100-SXM4 NVIDIA
Ampere
GA100 8.0 40GB 7
A100-SXM4 NVIDIA
Ampere
GA100 8.0 80GB 7
A100-PCIE NVIDIA
Ampere
GA100 8.0 40GB 7
A100-PCIE NVIDIA
Ampere
GA100 8.0 80GB 7
A30 NVIDIA
Ampere
GA100 8.0 24GB 4

 

此外,MIG也支持包括上述支持产品在内的系统,如DGX、DGX Station和HGX。

第三章、支持的配置 

支持MIG的部署配置包括:

  • 裸金属,包括容器和Kubernetes
  • 在支持的虚拟机监视程序上向Linux客户端进行GPU透传虚拟化
  • 在支持的虚拟机监视程序上进行vGPU虚拟化

第四章、虚拟化 

MIG可以与两种类型的虚拟化一起使用:

  • 在支持的虚拟机监视程序上,当MIG支持的GPU处于GPU透传模式时,可以使用裸金属上可用的相同工作流、工具和配置文件。
  • MIG允许多个vGPU(从而是VM)在单个MIG支持的GPU上并行运行,同时保留vGPU提供的隔离保证。有关如何配置GPU以用于vGPU虚拟机的信息,请参阅vGPU软件用户指南中的相关章节。有关使用vGPU进行GPU分区的更多信息,请参阅技术简介。

第五章、概念 

5.1 术语


本节介绍一些用于描述MIG背后概念的术语。

流式多处理器(Streaming Multiprocessor)

流式多处理器(SM)在GPU上执行计算指令。

GPU上下文(GPU Context)

GPU上下文类似于CPU进程。它封装了在GPU上执行操作所需的所有资源,包括独特的地址空间、内存分配等。GPU上下文具有以下属性:

  • 故障隔离
  • 单独调度
  • 独特的地址空间

GPU引擎(Engine)
GPU引擎是执行GPU上工作的组件。最常用的引擎是计算/图形引擎,它执行计算指令。其他引擎包括负责执行DMA的复制引擎(CE)、用于视频解码的NVDEC、用于编码的NVENC等。每个引擎可以独立调度,并为不同的GPU上下文执行工作。

GPU内存切片(GPU Memory Slice)
GPU内存切片是GPU内存的最小部分,包括相应的内存控制器和缓存。一个GPU内存切片大约是总GPU内存资源的八分之一,包括容量和带宽。

GPU SM切片(GPU SM Slice)
GPU SM切片是GPU上SM的最小部分。配置为MIG模式时,GPU SM切片大约是GPU中可用SM总数的七分之一。

GPU切片(GPU Slice)
GPU切片是GPU的最小部分,结合了单个GPU内存切片和单个GPU SM切片。

GPU实例(GPU Instance)
GPU实例(GI)是GPU切片和GPU引擎(DMA、NVDEC等)的组合。GPU实例内的所有内容始终共享所有GPU内存切片和其他GPU引擎,但其SM切片可以进一步细分为计算实例(CI)。GPU实例提供内存服务质量(QoS)。每个GPU切片包含专用的GPU内存资源,限制可用的容量和带宽,并提供内存QoS。每个GPU内存切片获得总GPU内存资源的1/8,每个GPU SM切片获得SM总数的1/7。

计算实例(Compute Instance)
GPU实例可以细分为多个计算实例。计算实例(CI)包含父GPU实例的SM切片和其他GPU引擎(DMA、NVDEC等)的子集。计算实例共享内存和引擎。

5.2 分区(Partitioning)


利用上述介绍的概念,本节提供了用户如何在GPU上创建各种分区的概述。为了说明,本文档将以A100-40GB为例,但对于其他支持MIG的GPU,过程是类似的。

GPU实例(GPU Instance)
GPU的分区是通过内存切片进行的,因此可以将A100-40GB GPU视为具有8个5GB内存切片和7个SM切片,如下图所示。

A100上的可用切片

如上所述,创建GPU实例(GI)需要将一定数量的内存切片与一定数量的计算切片结合在一起。在下图中,一个5GB内存切片与1个计算切片结合以创建一个1g.5gb GI配置文件:

结合内存和计算片

同样,4个5GB内存切片可以与4个1个计算切片结合以创建4g.5gb GI配置文件:

结合内存和计算片

 计算实例(Compute Instance)

GPU实例的计算切片可以进一步细分为多个计算实例(CI),这些CI共享父级GI的引擎和内存,但每个CI具有专用的SM资源。
使用上述相同的4g.20gb示例,可以创建一个CI,仅使用第一个计算切片,如下所示:

在这种情况下,可以通过选择任何计算切片来创建4个不同的CI。两个计算切片也可以组合在一起,以创建一个2c.4g.20gb配置文件:

在这个例子中,3个计算切片也可以组合在一起,创建一个3c.4g.20gb配置文件,或者所有4个切片可以组合在一起,创建一个4c.4g.20gb配置文件。当所有4个计算切片组合在一起时,该配置文件简单地称为4g.20gb配置文件。
请参阅关于标准命名方案和CUDA设备术语的相关章节。

配置文件放置(Profile Placement)
GI可以创建的切片数量并不是任意的。NVIDIA驱动程序API提供了多个“GPU实例配置文件”,用户可以通过指定其中一个配置文件来创建GI。
在给定的GPU上,可以通过混合和匹配这些配置文件创建多个GI,只要有足够的切片可用以满足请求。

注意:
下表显示了A100-SXM4-40GB产品上的配置文件名称。对于A100-SXM4-80GB,配置文件名称将根据内存比例而变化——例如,分别为1g.10gb、2g.20gb、3g.40gb、4g.40gb、7g.80gb。
有关MIG支持的所有配置文件组合的列表,请参阅支持的配置文件部分。

A100上的GPU实例配置文件
配置文件名称 内存比例 SM比例 硬件单位 L2 Cache
Size
复制引擎 可用实例数
MIG
1g.5gb
1/8 1/7 0
NVDECs /0
JPEG /0
OFA
1/8 1 7
MIG
1g.5gb
+me
1/8 1/7 1
NVDEC /1
JPEG /1
OFA
1/8 1 1(一个1g
配置文件可以包括
媒体扩展)
MIG
1g.10gb
1/8 1/7 1
NVDECs /0
JPEG /0
OFA
1/8 1 4
MIG
2g.10gb
2/8 2/7 1
NVDECs /0
JPEG /0
OFA
2/8 2 3
MIG
3g.20gb
4/8 3/7

2
NVDECs /0

JPEG /0
OFA

4/8 3 2
MIG
4g.20gb
4/8 4/7 2
NVDECs /0
JPEG /0
OFA
4/8 4 1
MIG
7g.40gb
Full 7/7 5
NVDECs /1
JPEG /1
OFA
Full 7 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

下图展示了如何构建所有有效的GPU实例组合的示意图。

在A100上的MIG配置文件

在该图中,可以通过从左侧的实例配置文件开始,并将其与向右移动时的其他实例配置文件结合,来构建一个有效的组合,确保没有两个配置文件在垂直方向上重叠。有关A100和A30上所有支持的组合和配置文件放置的列表,请参阅支持的配置文件部分。
请注意,在NVIDIA驱动程序发布R510之前,(4内存,4计算)和(4内存,3计算)配置文件的组合是不支持的。这个限制在较新的驱动程序上不再适用。

A100上的配置文件放置

请注意,该图表示GPU实例在GPU上实例化后将存在的物理布局。由于GPU实例在不同位置创建和销毁,可能会发生碎片化,一个GPU实例的物理位置将在其旁边可以实例化哪些其他GPU实例中发挥作用。

 5.3 CUDA并发机制


MIG被设计为对CUDA应用程序基本透明,以使CUDA编程模型保持不变,以最小化编程工作量。CUDA已经暴露了多种技术,用于在GPU上并行运行工作,值得展示这些技术与MIG的比较。请注意,流和MPS是CUDA编程模型的一部分,因此在与GPU实例一起使用时可以正常工作。
CUDA流是CUDA编程模型的一个特性,在CUDA应用程序中,不同的工作可以提交到独立队列中,并由GPU独立处理。CUDA流只能在单个进程内使用,并且不提供太多的隔离性——地址空间是共享的,SM是共享的,GPU内存带宽、缓存和容量都是共享的。最后,任何错误都会影响所有流和整个进程。
MPS是CUDA多进程服务。它允许协作多进程应用程序共享GPU上的计算资源。它通常被MPI作业使用,这些作业进行合作,但它也被用于在无关的应用程序之间共享GPU资源,同时接受这种解决方案带来的挑战。MPS目前不提供客户端之间的错误隔离,而每个MPS客户端使用的流多处理器可以选择性地限制为所有SM的一部分,调度硬件仍然是共享的。内存带宽、缓存和容量在MPS客户端之间都是共享的。最后,MIG是NVIDIA GPU提供的新形式的并发性,同时解决了其他CUDA技术在运行并行工作时的一些限制。

CUDA并发机制
MPS MIG
分区类型 单个进程 逻辑Logical 物理
最大分区 不限制 48 7
SM性能隔离 No Yes(按百分比)
不分区)
Yes
内存保护 No Yes Yes
内存带宽
QoS
No No Yes
错误隔离 No No Yes
网格互操作 总是 IPC Limited IPC
重新配置 动态 进程启动(Process Launch) 当空闲

 

 

 

 

 

 

 

 

 

 

 

第六章、部署考虑事项

MIG功能作为NVIDIA GPU驱动程序的一部分提供。

  • 从CUDA 12/R525驱动程序开始支持H100 GPU。
  • 从CUDA 11/R450驱动程序开始支持A100和A30 GPU。

系统考虑事项
以下系统考虑事项与GPU处于MIG模式时相关。

  • MIG仅在CUDA支持的Linux操作系统发行版上受支持。建议使用最新的NVIDIA数据中心Linux。请参阅快速入门指南。
    注意:
    还要注意设备节点和nvidia-capabilities以公开MIG设备。自450.51.06起,/proc机制用于系统级接口已被弃用,建议使用基于/dev的系统级接口通过cgroups控制对MIG设备的访问机制。此功能从450.80.02+驱动程序开始提供。

  • 支持的配置包括

    • 裸金属,包括容器
    • 在支持的虚拟化程序上将GPU传递给Linux客户机
    • 在支持的虚拟化程序上的vGPU
      MIG允许多个vGPU(从而是VM)在单个A100上并行运行,同时保留vGPU提供的隔离保证。有关使用vGPU和MIG进行GPU分区的更多信息,请参阅技术简介。
  • 在A100/A30上设置MIG模式需要GPU重置(因此需要超级用户权限)。一旦GPU处于MIG模式,实例管理就变得动态。请注意,设置是基于每个GPU的。

  • 在NVIDIA Ampere GPU上,类似于ECC模式,MIG模式设置在重新启动期间是持久的,直到用户明确切换设置。

  • 在启用MIG之前,所有持有驱动程序模块句柄的守护程序都需要停止。

  • 对于可能运行系统健康监控服务(如nvsm或GPU健康监控)或遥测服务(如DCGM)的系统(如DGX),这一点很重要。

  • 切换MIG模式需要CAP_SYS_ADMIN功能。默认情况下,其他MIG管理(例如创建和销毁实例)需要超级用户权限,但可以通过调整/proc/中的MIG功能权限将其委托给非特权用户。

6.2 应用考虑事项

当A100处于MIG模式时,用户应注意以下事项:

  • 不支持图形API(例如OpenGL、Vulkan等)
  • 不支持GPU到GPU的P2P(无论是PCIe还是NVLink)
  • CUDA应用程序将计算实例和其父GPU实例视为单个CUDA设备。请参阅CUDA设备枚举部分。
  • 不支持跨GPU实例的CUDA IPC。支持跨计算实例的CUDA IPC
  • 支持CUDA调试(例如使用cuda-gdb)和内存/竞争检查(例如使用cudamemcheck或compute-sanitizer)
  • 在MIG之上支持CUDA MPS。唯一的限制是客户端的最大数量(48)与计算实例大小成比例降低
  • 当从GPU实例使用时,支持GPUDirect RDMA

 第七章、MIG设备名称

默认情况下,MIG设备由单个“GPU实例”和单个“计算实例”组成。下表突出了一种命名约定,通过其GPU实例的计算切片数量和总内存(而不仅仅是内存切片数量)来引用MIG设备。
当仅创建一个CI(消耗GI的整个计算容量)时,设备名称中隐含了CI的大小。

MIG设备名称

注意:
下面的描述显示了A100-SXM4-40GB产品上的配置文件名称。对于A100-SXM4-80GB,配置文件名称将根据内存比例更改 - 例如,分别为1g.10gb、2g.20gb、3g.40gb、4g.40gb、7g.80gb。

 

使用单个CI时的设备名称
内存 20gb 10gb 5gb
GPU Instance(GPU实例) 3g 2g 1g
Compute Instance(计算实例) 3c 2c 1c
MIG设备 3g.20gb 2g.10gb 1g.5gb
GPC GPC GPC GPC GPC GPC

 

 

 

每个GI可以根据用户的工作负载需求进一步细分为多个CI。下表突出显示了在这种情况下MIG设备的名称会是什么样子。所示示例是将一个3g.20gb设备细分为一组具有不同计算实例切片计数的子设备。

使用多个ci时的设备名称
内存 20gb 20gb
GPU Instance(GPU实例) 3g 3g
Compute Instance(计算实例) 1c 1c 1c 2c 1c
MIG设备 1c.3g.20gb 1c.3g.20gb 1c.3g.20gb 2c.3g.20gb 1c.3g.20gb
GPC GPC GPC GPC GPC GPC

 

 

 

 

 

 

 

 

 

 

7.1  设备枚举

  GPU实例(GIs)和计算实例(CIs)在新的/proc文件系统布局中为MIG进行了枚举。

相应的设备节点(在mig-minors中)被创建在/dev/nvidia-caps下。 有关设备节点和功能的更多信息,请参考有关章节。

7.2 CUDA设备枚举

 MIG通过指定应在其上运行应用程序的CUDA设备来支持运行CUDA应用程序。在CUDA 11/R450和CUDA 12/R525中,仅支持对单个MIG实例进行枚举。换句话说,无论创建了多少个MIG设备(或向容器提供了多少个),单个CUDA进程只能枚举一个MIG设备。 CUDA应用程序将一个CI及其父GI视为单个CUDA设备。CUDA仅限于使用单个CI,如果有多个CI可见,则会选择第一个可用的CI。总结一下,有两个约束条件:

  1. CUDA只能枚举单个计算实例

  2. 如果在任何其他GPU上枚举了任何计算实例,则CUDA不会枚举非MIG GPU 请注意,这些约束条件可能会在未来NVIDIA驱动程序发布的MIG版本中放宽。 CUDA_VISIBLE_DEVICES已扩展以支持MIG。根据使用的驱动程序版本,支持两种格式:

  3. 使用驱动程序>= R470(470.42.

标签:Multi,配置文件,MIG,实例,CUDA,GPU,gb
From: https://blog.csdn.net/qq_27815483/article/details/140813348

相关文章

  • 在AWS Lightsail建立WordPress Multisite & Route 53 subdomains & Hexo Blog & WordP
    1.0前言玩Startup比賽,因需高效快速地做POC原型產品,所以利用AWS云端服務來更快地開發。你會學到:LightSail建立WordpressmultisiteRoute53註冊WordpressSubdomains&GithubCuostomDomainLightSailCustomDomain&SSLHexo快速搭建GihubPages博客+ Route53 Custom......
  • Multipass相关问题
    最近又想把Multipass翻出来玩玩,结果一直会有一个报错:由于很久没有打开过了,所以我决定用geek进行完全卸载后重装。照例,先进行multipass数据目录的配置:Set-ItemProperty-Path"HKLM:System\CurrentControlSet\Control\SessionManager\Environment"-NameMULTIPASS_STORAGE-V......
  • 如何使用我的 CoreML 模型在 Vision 中获取 MLMultiArray 输出
    我正在尝试在swift中将我的CoreMl模型与Vision框架结合使用。我的模型输出一个MLMultiArray。当我通过Vision运行它时,我确实得到了一个输出,但是输出的类型是VNObservation,我无法使用它,也无法将其转换为MLMultiArray。有谁知道如何获取MLMultiArray作为输出,或将VNOb......
  • torch:有没有办法在GPU中维护和乘以单位向量矩阵
    我有一个巨大的稀疏矩阵S。每列有1个值为1的条目。其余值为零。我经常需要将S与另一个矩阵A(S@A)相乘。它实际上只是一个“选择器”,所以在numpy中实现很简单。torch有一些API可以帮助我解决这个问题吗?S@A的结果将在gpu中广泛使用(例如进一......
  • 【全过程】windows GPU训练大模型的前期准备教程
    CUDA下载及安装下载显卡驱动点这里进入之后点画圈的地方,然后打开下载的文件,会帮你自动下载和安装适配你显卡的驱动程序(这里不是特别重要,就简单带过)点击桌面左下角小箭头,出现花圈的标志,也就是英伟达的logo,说明驱动安装成功安装CUDA接下来到了重头戏,cuda的安装查看本机......
  • 大模型训练为何离不开GPU?深度解析与显卡推荐
    在人工智能的蓬勃发展中,大模型的训练成为了热门话题。然而,许多人还不清楚为什么训练这些庞大的模型需要GPU(图形处理单元)。本文将深入探讨GPU在大模型训练中的重要性,并推荐几款适合的显卡。一、GPU与CPU的区别在讨论大模型训练时,理解GPU(图形处理单元)与CPU(中央处理单元)之间的区......
  • 心电信号测量及multisim仿真笔记
    心电信号心电信号测量无源低通滤波仿真电路原理图(二阶低通滤波)电路作用知识点补充基础概念补充运放跟随器原理图作用原理:作用:双向模拟开关电路原理图基准电压电路原理图该电路的作用导联脱落检测电路原理图作用仪器仪表放大电路原理图作用右腿驱动电路原理图放大倍......
  • 查看 NVIDIA GPU 架构
    NVIDAGPU架构演进可见:https://blog.csdn.net/daijingxin/article/details/1150423532022Hopper2020Ampere2018Turing2017Volta2016Pascal2014Maxwell2012Kepler2010Fermi2008Tesla终端输入下述命令,可以查看所属架构vidia-smi-q|grepArchitecture单......
  • 如何使用 LangChain 查看 MultiQueryRetriever 管道中的最终提示?
    我目前正在使用LangChain库开展一个项目,我想从向量数据库中检索相关文档,然后使用OllamaLLM根据这些文档生成答案。以下是我当前的实现:importlogginglogging.basicConfig()logging.getLogger("langchain.retrievers.multi_query").setLevel(logging.INFO)#Defin......
  • GPU | 初识 Triton
    ❗️此坑还没填完,等到后面用到triton再补充既生CUDA,何生tritonCUDA编程昂贵上手门槛促使triton的诞生[1]。语法福利相比CUDAC++like的设计风格,triton使用python。语法回避C++模板编程和指针;环境集成比起Pytorch-C++-CUDA少了几层。简化编程将许多GPU并......