博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持!
博主链接

本人就职于国际知名终端厂商,负责modem芯片研发。
在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。

博客内容主要围绕:
       5G/6G协议讲解
       算力网络讲解(云计算,边缘计算,端计算)
       高级C语言讲解
       Rust语言讲解

nvidia 高级特性MIG详细介绍(一)

MIG:Multi-Instance GPU

新的多实例GPU(MIG)功能允许GPU(从NVIDIA Ampere architecture开始)安全地划分为最多7个独立的GPU实例,用于CUDA应用程序,为多个用户提供独立的GPU资源,以实现最佳的GPU利用率。此功能对于工作负载未完全饱和的GPU来说特别有益,因此用户可能希望并行运行不同的工作负载以最大化利用率。

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

使用MIG,用户将能够像物理GPU一样查看和调度新的虚拟GPU实例上的作业。MIG支持Linux操作系统,支持使用Docker引擎的容器,支持Kubernetes和使用Red Hat虚拟化和VMware vSphere等管理程序的虚拟机。

一、MIG基础概念介绍

  • 流多处理器(SM,Streaming Multiprocessor):流多处理器(SM)在GPU上执行计算指令;

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

    • 错误隔离;
    • 独立的调度;
    • 不同的地址空间;
  • GPU引擎:GPU引擎在GPU上执行工作。最常用的引擎是执行计算指令的计算/图形引擎。其它引擎包括负责执行DMA复制的引擎(CE,copy engine)、负责视频解码的NVDEC、负责编码的NVENC等。每个引擎可以被独立调度,并为不同的GPU上下文执行工作;

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

  • GPU SM切片:GPU SM切片是GPU上SM的最小部分。在MIG模式下配置时,一个GPU SM片大约是GPU可用SM总数的七分之一

  • GPU切片:GPU切片是由单个GPU内存切片单个GPU SM切片组成的GPU的最小部分;

  • GPU实例:GPU实例(GI)是一个或多个GPU切片其它GPU引擎(DMAs、NVDECs等)的组合。一个GPU实例中的任何东西总是共享所有GPU内存切片和GPU引擎但它的SM切片可以进一步细分为计算实例(CI,Compute Instance)。GPU实例提供内存QoS。每个GPU切片包含专用的GPU内存资源,限制可用容量和带宽,并提供内存QoS。每个GPU内存切片获得GPU总内存资源的1/8,每个GPU SM切片获得SMs总数的1/7;

  • 计算实例一个GPU实例可以细分为多个计算实例。计算实例(CI)是父GPU实例的SM切片和其它GPU引擎(DMAs、NVDECs等)的一个子集CIs共享内存和引擎

GPU资源逻辑图:

CI示意图:

二、举个例子

下面是一个A100(40GB)的GPU,可以认为有8x5GB的内存片和7个SM片,如下图所示:

2.1 GPU实例举例

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


       类似地,4x5GB内存切片可以与4x1计算切片组合以创建4g.20gb GI配置文件:

2.2 计算实例(CI)举例

GPU实例的计算切片可以进一步细分为多个计算实例(compute Instance, CI), CI共享父GI的引擎和内存,但每个CI都有专用的SM资源。使用上面提到的4g.20gb的例子,创建一个CI只使用第一个计算切片,如下所示:

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


       在这个例子中,3个计算切片也可以组合起来创建一个3c.4g.20gb配置文件或全部4个CI可以组合起来创建一个4c.4g.20gb的配置文件。当所有4个计算片组合在一起时,该配置文件被简称4g.20gb

三、MIG设备命名规则

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

注意:下表展示了一个A100-SXM4-40GB设备的配置文件名称。对于A100-SXM4-80GB,配置文件名称将根据内存比例而变化——例如,1g.10gb、2g.20gb、3g.40gb、4g.40gb、7g80gb。

Memory 20gb 10gb 5gb
GPU Instance 3g 2g
Compute Instance 3c 2c 1c
MIG Device 3g.20gb 2g.10gb 1g.5gb
GPCGPCGPC GPCGPC GPC

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

GPU实例(GIs)和计算实例(CIs)在MIG的/proc文件系统中被枚举,相应的设备节点(mig-minor)会在/dev/nvidia-caps下创建。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将不会枚举 non-MIG GPU;

请注意,这些限制可能会在未来的NVIDIA MIG驱动程序版本中改变

CUDA_VISIBLE_DEVICES已被扩展以增加对MIG的支持。根据所使用的驱动程序版本,支持两种格式:

  1. 驱动版本 >= R470(470.42.01+),每个MIG设备被分配一个以MIG-<UUID>开始的GPU UUID;
  2. 驱动版本 < R470,通过指定CI和相应的父GI枚举每个MIG设备。格式为MIG-<GPU- uuid >/<GPU实例ID>/<计算实例ID>

使用R470 NVIDIA数据中心驱动程序(470.42.01+),下面的示例显示了MIG设备如何在8-GPU系统中分配GPU uuid,每个GPU配置不同。

$ nvidia-smi -L        GPU 0: A100-SXM4-40GB (UUID: GPU-5d5ba0d6-d33d-2b2c-524d-9e3d8d2b8a77)MIG 1g.5gb      Device  0: (UUID: MIG-c6d4f1ef-42e4-5de3-91c7-45d71c87eb3f)MIG 1g.5gb      Device  1: (UUID: MIG-cba663e8-9bed-5b25-b243-5985ef7c9beb)MIG 1g.5gb      Device  2: (UUID: MIG-1e099852-3624-56c0-8064-c5db1211e44f)MIG 1g.5gb      Device  3: (UUID: MIG-8243111b-d4c4-587a-a96d-da04583b36e2)MIG 1g.5gb      Device  4: (UUID: MIG-169f1837-b996-59aa-9ed5-b0a3f99e88a6)MIG 1g.5gb      Device  5: (UUID: MIG-d5d0152c-e3f0-552c-abee-ebc0195e9f1d)MIG 1g.5gb      Device  6: (UUID: MIG-7df6b45c-a92d-5e09-8540-a6b389968c31)
GPU 1: A100-SXM4-40GB (UUID: GPU-0aa11ebd-627f-af3f-1a0d-4e1fd92fd7b0)MIG 2g.10gb     Device  0: (UUID: MIG-0c757cd7-e942-5726-a0b8-0e8fb7067135)MIG 2g.10gb     Device  1: (UUID: MIG-703fb6ed-3fa0-5e48-8e65-1c5bdcfe2202)MIG 2g.10gb     Device  2: (UUID: MIG-532453fc-0faa-5c3c-9709-a3fc2e76083d)
GPU 2: A100-SXM4-40GB (UUID: GPU-08279800-1cbe-a71d-f3e6-8f67e15ae54a)MIG 3g.20gb     Device  0: (UUID: MIG-aa232436-d5a6-5e39-b527-16f9b223cc46)MIG 3g.20gb     Device  1: (UUID: MIG-3b12da37-7fa2-596c-8655-62dab88f0b64)
GPU 3: A100-SXM4-40GB (UUID: GPU-71086aca-c858-d1e0-aae1-275bed1008b9)MIG 7g.40gb     Device  0: (UUID: MIG-3e209540-03e2-5edb-8798-51d4967218c9)
GPU 4: A100-SXM4-40GB (UUID: GPU-74fa9fb7-ccf6-8234-e597-7af8ace9a8f5)MIG 1c.3g.20gb  Device  0: (UUID: MIG-79c62632-04cc-574b-af7b-cb2e307120d8)MIG 1c.3g.20gb  Device  1: (UUID: MIG-4b3cc0fd-6876-50d7-a8ba-184a86e2b958)MIG 1c.3g.20gb  Device  2: (UUID: MIG-194837c7-0476-5b56-9c45-16bddc82e1cf)MIG 1c.3g.20gb  Device  3: (UUID: MIG-291820db-96a4-5463-8e7b-444c2d2e3dfa)MIG 1c.3g.20gb  Device  4: (UUID: MIG-5a97e28a-7809-5e93-abae-c3818c5ea801)MIG 1c.3g.20gb  Device  5: (UUID: MIG-3dfd5705-b18a-5a7c-bcee-d03a0ccb7a96)
GPU 5: A100-SXM4-40GB (UUID: GPU-3301e6dd-d38f-0eb5-4665-6c9659f320ff)MIG 4g.20gb     Device  0: (UUID: MIG-6d96b9f9-960e-5057-b5da-b8a35dc63aa8)
GPU 6: A100-SXM4-40GB (UUID: GPU-bb40ed7d-cbbb-d92c-50ac-24803cda52c5)MIG 1c.7g.40gb  Device  0: (UUID: MIG-66dd01d7-8cdb-5a13-a45d-c6eb0ee11810)MIG 2c.7g.40gb  Device  1: (UUID: MIG-03c649cb-e6ae-5284-8e94-4b1cf767e06c)MIG 3c.7g.40gb  Device  2: (UUID: MIG-8abf68e0-2808-525e-9133-ba81701ed6d3)
GPU 7: A100-SXM4-40GB (UUID: GPU-95fac899-e21a-0e44-b0fc-e4e3bf106feb)MIG 4g.20gb     Device  0: (UUID: MIG-219c765c-e07f-5b85-9c04-4afe174d83dd)MIG 2g.10gb     Device  1: (UUID: MIG-25884364-137e-52cc-a7e4-ecf3061c3ae1)MIG 1g.5gb      Device  2: (UUID: MIG-83e71a6c-f0c3-5dfc-8577-6e8b17885e1f)

四、预配置的配置文件

一个GI可以创建的切片数量不是任意的。NVIDIA驱动程序APIs提供了许多“GPU实例配置文件”,用户可以通过指定其中一个配置文件来创建GIs。在给定的GPU上,只要有足够的切片来满足请求,就可以通过这些配置文件来创建多个GIs。

例如,下表展示了一个A100-SXM4-40GB设备的配置文件名称。对于A100-SXM4-80GB,配置文件名称将根据内存比例而变化——例如,1g.10gb、2g.20gb、3g.40gb、4g.40gb、7g80gb。

Profile Name Fraction of Memory Fraction of SMs Hardware Units L2 Cache Size Copy Engines Number of Instances Available
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 (A single 1g profile can include media extensions)
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实例的所有有效组合的图示。


       在这个图中,通过从左边的实例概要文件开始,并在您移动到右边时将它与其它实例概要文件相结合,可以构建一个有效的组合,这样就不会有两个概要文件在垂直方向上重叠。该规则的唯一例外是(4内存,4计算)和(4内存,3计算)配置文件的组合,目前不支持。但是,支持(4内存,3计算)和(4内存,3计算)的组合。有关A100和A30上所有支持的配置文件组合和放置的列表,请参阅支持配置文件部分。


       请注意,该图表示GPU实例在GPU上实例化后存在的物理布局。由于GPU实例是在不同的位置创建和销毁的,因此可能会发生碎片,并且一个GPU实例的物理位置将扮演一个角色,在这个角色中,其它GPU实例可以在它旁边实例化。


感谢大家的阅读,这里是从善若水的博客!


【Nvidia】nvidia 高级特性MIG详细介绍(一)相关推荐

  1. linux18.04安装显卡驱动,详细介绍ubuntu18.04安装NVIDIA显卡驱动(亲测有效!)

    详细介绍ubuntu18.04安装NVIDIA显卡驱动(亲测有效!) 详细介绍ubuntu18.04安装NVIDIA显卡驱动(亲测有效!) 详细介绍ubuntu18.04安装NVIDIA显卡驱动(亲测 ...

  2. Redis高级特性介绍及实例分析

    本文将为大家介绍Redis的一些高级特性以及结合一个具体的实际案例来对Redis进行设计分析. Redis基础类型回顾 String Redis中最基本,也是最简单的数据类型.注意,VALUE既可以是 ...

  3. OpenMLDB 进阶使用攻略和高级特性介绍

    本文整理自 OpenMLDB PMC 张浩在 OpenMLDB Meetup No.6 中的分享 --<OpenMLDB 进阶使用和高级特性介绍>. 大家好,我是 OpenMLDB PMC ...

  4. nvidia:成功解决Windows10右键没有NVIDIA控制面板图文教程之详细攻略

    nvidia:成功解决Windows10右键没有NVIDIA控制面板图文教程之详细攻略 目录 解决Windows10右键没有NVIDIA控制面板图文教程 1.首先检查是否已安装NVIDIA 2.如果已 ...

  5. 对vue3新特性Tree-Shaking进行详细介绍

    当谈论 Vue 3 中的 Tree-Shaking 特性时,需要提到它是通过构建工具和模块导入方式实现的.下面将详细介绍如何在 Vue 3 中使用 Tree-Shaking. 1. 配置构建工具: 在 ...

  6. MySQL高级特性之分布式(XA)事务的介绍

    文章目录 分布式(XA) 事务 1.内部XA事务 2.外部XA事务 这一部分是 高性能MySQL(第3版)中第七章第11节内容:关于MySQL高级特性之分布式(XA)事务的介绍,(不感兴趣的可以忽略) ...

  7. CSS3新特性详细介绍

    文章内容持续更新中~ 文章目录 一.CSS3实现圆角 - border-radius 二.盒子阴影 - box-shadow 三.文本阴影 - text-shadow 四.渐变 - gradient ...

  8. 卷积神经网络超详细介绍

    文章目录 1.卷积神经网络的概念 2. 发展过程 3.如何利用CNN实现图像识别的任务 4.CNN的特征 5.CNN的求解 6.卷积神经网络注意事项 7.CNN发展综合介绍 8.LeNet-5结构分析 ...

  9. 卷积神经网络(CNN)超详细介绍

    文章转自:https://blog.csdn.net/jiaoyangwm/article/details/80011656 文章目录 1.卷积神经网络的概念 2. 发展过程 3.如何利用CNN实现图 ...

最新文章

  1. 34.3. output
  2. Altium designer原理图库中元件变动后在原理图中同步更新方法
  3. DLL导出类和导出函数
  4. python pytest raises()
  5. 02-虚拟机克隆配置
  6. .Net 开源项目资源大全
  7. dnn神经网络_卷积神经网络(五):总结
  8. 知识表示与计算机,两分钟了解人工智能中的“知识与知识表示”
  9. clover删除多余引导_[转载]EFI引导如何去掉多余的这个clover启动项
  10. 使用gsds绘制基因结构图_[转载]基因结构图的绘制
  11. linux如何装输入法,如何在linux下安装智能拼音输入法
  12. 通过jad/mc/redefine命令,在docker容器中实现动态更新代码的功能:
  13. 裸金属服务器与云服务器的差别是什么?
  14. java8—streamAPI(四)
  15. matlab 向量变标量,MATLAB变量——标量,向量,矩阵
  16. 集中隔离第17天2022.3.13
  17. Python试题和规范文档
  18. 一文搞懂C语言如何用指针来代替变量和数组进行数据的存储
  19. Windows 命令帮助文档查询方式
  20. 虹科方案|SCADA软件 -VTScada在饮用水工厂的使用成本

热门文章

  1. 初步研究gatling脚本(5)
  2. 多线程的几种实现方法详解
  3. 我的互联网价值观、方法论和个人实践(2)-个人征信
  4. (4)(4.2.4) 连接电调和电机
  5. Spark原理篇之工作原理
  6. Licode入门学习:DtlsSocket源码分析
  7. 详解贝叶斯学派与频率学派的区别和联系
  8. 百家号自媒体如何写一篇爆文,百家号什么时间发布爆文几率大
  9. 轻而易举的攻过tomcat
  10. 易百教程Oracle,SQLite快速入门教程