MIG通过虚拟地将单个物理GPU划分为更小的独立实例,这项技术涉及GPU虚拟化,GPU的资源,包括CUDA内核和内存,被分配到不同的实例。这些实例彼此隔离,确保在一个实例上运行的任务不会干扰其他实例。
使用MIG,每个实例的处理器都有独立和隔离的路径通过整个存储系统,芯片上的crossbar端口,L2 cache,内存控制器和DRAM地址总线都被唯一地分配给一个单独的实例。这确保了单个用户的工作负载可以在相同的L2缓存分配和DRAM带宽下,以可预测的吞吐量和延迟运行,即使其它任务正在抖动它们自己的缓存或饱和它们的DRAM接口。MIG能够对可用的GPU计算资源(包括流式多处理器,即SMs,以及复制引擎或解码器等GPU引擎)进行分区,从而为虚拟机、容器或进程等不同客户端提供定义好的故障隔离服务质量(QoS)。MIG允许多个GPU实例在单个物理NVIDIA Ampere GPU上并行运行。
接着我们来了解下MIG中的一些名称和概念介绍:
流多处理器(SM,Streaming Multiprocessor):流多处理器(SM)在GPU上执行计算指令GPU内存切片:GPU内存切片是GPU内存的最小部分,包括相应的内存控制器和缓存。一个GPU内存切片大约是GPU总内存资源的八分之一,包括容量和带宽;GPU SM切片:GPU SM切片是GPU上SM的最小部分。在MIG模式下配置时,一个GPU SM片大约是GPU可用SM总数的七分之一;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共享内存和引擎。
MIG 技术关键特点:
1.资源划分:MIG 允许将一块物理 GPU 分割成多个 GPU 实例,每个实例具有自己的 GPU 核心、GPU 内存、NVLink 带宽等资源。这样可以更好地控制和划分 GPU 资源。
2.多租户支持:MIG 技术可以用于虚拟化 GPU,以便不同用户或应用程序可以共享同一块物理 GPU 而不会相互干扰。
3.动态资源调整:管理员可以根据工作负载的需求动态地重新配置 MIG 实例的资源,从而实现更好的资源利用和性能。
4.容错性:MIG 技术支持 GPU 实例的隔离,这意味着一个 GPU 实例中的问题不会影响到其他实例,从而提高了系统的容错性。
5.部署灵活性:MIG 技术可以用于云计算、虚拟化环境、容器化应用程序等多种情境,为不同的部署需求提供了灵活性。
并不是所有的显卡都支持MIG,以下是官方给出的GPU型号:
上面介绍完了,接着我们来讲下MIG的配置和使用
使用下面命令可以进行MIG功能的开启
nvidia-smi -i <GPU_ID> --mig 1
如果关闭数字1改为0,如果不指定i则是开启或者关闭所有卡的MIG功能
注意我们开启mig的卡需要单独进行重启,如果是使用nvlink的GPU需要重启所有的GPU
nvidia-smi -i 0 --gpu-reset #重启指定index的GPUnvidia-smi --gpu-reset #重启所有GPU
接着使用lgip命令查询当前GPU的GPU ID和实例ID进行后续的操作
nvidia-smi mig -lgip -i 1+--------------------------------------------------------------------------+| GPU instance profiles: || GPU Name ID Instances Memory P2P SM DEC ENC || Free/Total GiB CE JPEG OFA ||==========================================================================|| 1 MIG 1g.5gb 19 0/7 4.75 No 14 0 0 || 1 0 0 |+--------------------------------------------------------------------------+| 1 MIG 2g.10gb 14 0/3 9.75 No 28 1 0 || 2 0 0 |+--------------------------------------------------------------------------+| 1 MIG 3g.20gb 9 0/2 19.62 No 42 2 0 || 3 0 0 |+--------------------------------------------------------------------------+| 1 MIG 4g.20gb 5 0/1 19.62 No 56 2 0 || 4 0 0 |+--------------------------------------------------------------------------+| 1 MIG 7g.40gb 0 0/1 39.50 No 98 5 0 || 7 1 1 |+--------------------------------------------------------------------------+
使用上述命令可以查看每个开启MIG的设备支持的GI实例类型,可以看到上述打印一共有五种实例类型
我们可以使用如下命令创建GI,多个ID需要使用英文逗号隔开,如果需要指定卡片还是需要添加-i参数和卡的index,例如此处就是-i 1
nvidia-smi mig -cgi [ID]nvidia-smi mig -cgi 5,14,19 -i 1
再使用lgi命令查看创建的GI列表
nvidia-smi mig -lgi
接着我们创建CI,首先使用lcip命令查看,所有可供配置选的CI实例配置
nvidia-smi mig -lcip
针对指定gi实例,配置profile index为0的CI实例
nvidia-smi mig -cci 0 -gi 1 -i 1
也可以一次性创建过个CI实例
nvidia-smi mig -cci 1,1 -gi 1 -i 1
上述命令是在GI ID为1的GI上创建两个CI profile为1的CI实例
接着我们可以执行lci命令进行查看创建情况
nvidia-smi mig -lci
然后还有一种方式可以自动根据GI使用默认CI配置,CI就不需要另外再创建
nvidia-smi mig -cgi 5,14,19 -i 1 -C
最后就是删除MIG相关配置,可以选着直接关闭MIG,然后重启GPU卡,已经配置了的mig配置会出现丢失,仅仅能保留在物理GPU卡上的mig开启和关闭状态
如果需要删除指定的CI/GI,那么可以看看以下操作
nvidia-smi mig -dci -ci 0 -gi 1 -i 1
删除GI 1实例上ID为0的CI实例,删除侯可以使用-lci的命令再次进行CI实例的查询
删除了CI接着我们就可以再删除GI了,注意,一般删除顺序是必须先CI后GI
nvidia-smi mig -dgi -gi 1 -i 1
删除GI ID为1的实例
转载注明出处:https://www.sulao.cn/post/987.html