博主原文链接:https://www.yourmetaverse.cn/deep_learning/194/
英伟达服务器显卡多实例技术(MIG)
1. 多实例技术介绍
多实例技术有点类似于vGPU,只不过vGPU是在虚拟机层次的显卡虚拟化,如果物理服务器安装的是vmware或者KVM这种虚拟机系统,那么如果想给每个虚拟机分配一张显卡显然显卡不够分,一般6U的服务器也就8张显卡,所以需要用到vGPU技术,将显卡虚拟化成多张显卡,而这玩意跟虚拟机系统一样是需要收费的,按照显卡数量进行授权收费。而如果物理服务器安装的不是虚拟机操作系统,例如安装的是Ubuntu系统,然后采用docker等容器技术,也是需要对显卡进行多实例划分的,提高显卡的利用率。这个时候NVIDIA Multi-Instance GPU(MIG)技术就非常有用了。
英伟达的多实例技术是一种可以将单个物理GPU资源分割成多个虚拟GPU资源的技术。这种技术可以帮助多个用户或应用程序共享一块物理GPU而不会相互干扰,从而提高了GPU资源的利用率。
具体来说,英伟达的多实例技术通过将单个物理GPU分割成多个虚拟GPU,每个虚拟GPU都可以被不同的用户或应用程序访问。每个虚拟GPU都有自己的显存和计算资源,并且可以独立地运行不同的计算任务。这意味着多个用户或应用程序可以同时使用同一块物理GPU,而不会相互干扰或影响对方的计算任务。
多实例技术还可以为不同的虚拟GPU配置不同的计算能力,以满足不同用户或应用程序的需求。例如,一些虚拟GPU可以被配置为支持图形渲染,而其他虚拟GPU可以被配置为支持深度学习计算等高性能计算任务。
总的来说,英伟达的多实例技术可以帮助用户更好地管理和利用GPU资源,并且可以提高GPU资源的利用率和灵活性。
2. 多实例技术支持的显卡列表
多实例技术支持的基本上都是一些服务器显卡,而是还是最新的旗舰机服务器显卡,如A100,H100等,如下所示。
3. MIG使用指南
3.1 开启MIG技术
一般情况下,MIG技术默认是关闭的,需要手动开启,可以使用nvidia-smi命令查看是否开启MIG,nvidia-smi命令的一些详细内容可以查看之前的博客:nvidia-smi命令详解和一些高阶技巧介绍
上图是没有开启MIG的显示结果,下图是开启了MIG的显示结果。
如果没有开启MIG,可以使用如下命令开启MIG:
sudo nvidia-smi -i [显卡ID] -mig 1
这个是针对某个显卡开启MIG的命令,例如我想开启第一张显卡的MIG,则可以使用以下命令
sudo nvidia-smi -i 0 -mig 1
在这个特定的DGX例子中,必须停止nvsm和dcgm服务,在所需的GPU上启用MIG模式,然后恢复监控服务,如下所示:
sudo systemctl stop nvsm
sudo systemctl stop dcgm
使用nvidia-smi mig -lgipp可以查看开启MIG的显卡可以划分成那几个实力
用户名@主机名:~$ sudo nvidia-smi mig -lgipp
GPU 6 Profile ID 19 Placements: {0,1,2,3,4,5,6}:1
GPU 6 Profile ID 14 Placements: {0,2,4}:2
GPU 6 Profile ID 9 Placements: {0,4}:4
GPU 6 Profile ID 5 Placement : {0}:4
GPU 6 Profile ID 0 Placement : {0}:8
GPU 7 Profile ID 19 Placements: {0,1,2,3,4,5,6}:1
GPU 7 Profile ID 14 Placements: {0,2,4}:2
GPU 7 Profile ID 9 Placements: {0,4}:4
GPU 7 Profile ID 5 Placement : {0}:4
GPU 7 Profile ID 0 Placement : {0}:8
使用nvidia-smi mig -lgip可以查看每个开启MIG的设备支持的实例类型,一共有1g.5gb(7个4.75GB显卡)、2g.10gb(3个9.75GB显卡)、3g.20gb(2个19.62GB显卡)、4g.20gb(1个19.62B显卡)、7g.40gb(1个39.50GB显卡)五种类型。
用户名@主机名:~$ sudo nvidia-smi mig -lgip
+--------------------------------------------------------------------------+
| GPU instance profiles: |
| GPU Name ID Instances Memory P2P SM DEC ENC |
| Free/Total GiB CE JPEG OFA |
|==========================================================================|
| 6 MIG 1g.5gb 19 0/7 4.75 No 14 0 0 |
| 1 0 0 |
+--------------------------------------------------------------------------+
| 6 MIG 2g.10gb 14 0/3 9.75 No 28 1 0 |
| 2 0 0 |
+--------------------------------------------------------------------------+
| 6 MIG 3g.20gb 9 0/2 19.62 No 42 2 0 |
| 3 0 0 |
+--------------------------------------------------------------------------+
| 6 MIG 4g.20gb 5 0/1 19.62 No 56 2 0 |
| 4 0 0 |
+--------------------------------------------------------------------------+
| 6 MIG 7g.40gb 0 0/1 39.50 No 98 5 0 |
| 7 1 1 |
+--------------------------------------------------------------------------+
| 7 MIG 1g.5gb 19 0/7 4.75 No 14 0 0 |
| 1 0 0 |
+--------------------------------------------------------------------------+
| 7 MIG 2g.10gb 14 0/3 9.75 No 28 1 0 |
| 2 0 0 |
+--------------------------------------------------------------------------+
| 7 MIG 3g.20gb 9 0/2 19.62 No 42 2 0 |
| 3 0 0 |
+--------------------------------------------------------------------------+
| 7 MIG 4g.20gb 5 0/1 19.62 No 56 2 0 |
| 4 0 0 |
+--------------------------------------------------------------------------+
| 7 MIG 7g.40gb 0 0/1 39.50 No 98 5 0 |
| 7 1 1 |
+--------------------------------------------------------------------------+
3.2 创建MIG实例
使用如下命令创建MIG实例
sudo nvidia-smi mig -cgi [ID],[实例名称] -C
[ID]指的是sudo nvidia-smi mig -lgip中ID那一列的值
[实例名称]指的是Name那一列的内容,注意ID需要与[实例名称]对应
例如,使用以下命令,创建ID为9的那个实例,实例名称为3g.20gb,即创建了两个显存为19.62GB的显卡实例。
sudo nvidia-smi mig -cgi 9,3g.20gb -C
3.3 在docker中使用MIG实例
结合Docker使用英伟达NVIDIA服务器显卡多实例技术可以让GPU资源的管理更加灵活和高效。下面是结合Docker使用英伟达NVIDIA服务器显卡多实例技术的一般步骤:
安装NVIDIA Docker
要使用英伟达NVIDIA服务器显卡多实例技术,需要先安装NVIDIA Docker。NVIDIA Docker是一个基于Docker的扩展,可以支持GPU加速的容器化应用程序。在安装NVIDIA Docker之前,请确保已经安装了Docker引擎。
启用多实例功能
要启用多实例功能,需要在NVIDIA Docker中指定相应的选项。在Dockerfile中添加以下语句以启用多实例功能:
ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility,mig
这将告诉NVIDIA Docker在运行容器时启用所有可见的GPU设备,并支持计算、实用程序和多实例功能。
配置虚拟GPU
在Dockerfile中可以使用nvidia-smi mig命令配置虚拟GPU。例如,以下命令可以为虚拟GPU 1配置12GB显存和一个10Gbps的带宽限制:
RUN nvidia-smi mig -cgi 1 -C -m -g 0 -a 2 -b 10Gbps
这将在构建容器镜像时配置虚拟GPU实例。
分配虚拟GPU
要将虚拟GPU分配给Docker容器,可以在docker run命令中使用nvidia-smi mig命令为每个虚拟GPU分配一个唯一的ID,并指定哪些进程可以访问该虚拟GPU。例如,以下命令将虚拟GPU 1分配给运行在容器内的进程:
docker run --gpus 1 -it nvidia/cuda /bin/bash
nvidia-smi mig -cgi 1 -i 0 -a $$
这将在容器内分配虚拟GPU 1,并将其分配给容器中的当前进程。
总的来说,结合Docker使用英伟达NVIDIA服务器显卡多实例技术可以方便地管理GPU资源,并使GPU资源的使用更加高效和灵活。可以通过在Dockerfile中配置虚拟GPU实例来管理虚拟GPU,并使用docker run命令将虚拟GPU分配给不同的容器和进程。
参考文献
[1] NVIDIA Multi-Instance GPU User Guide https://docs.nvidia.com/datacenter/tesla/mig-user-guide/index.html
[2] NVIDIA 多实例 GPU 用户指南 https://blog.csdn.net/wangqi4720/article/details/126358886