A100 MIG 使用说明
官方手册
阅读约定
美元符号 “$” 号开头的黄色标注,表示一个命令行界面的命令。
前提条件
当需要在支持 MIG 模式的 GPU 中开启 MIG,则需要满足以下前提条件和最低的软件版本:
- MIG 仅在 A100 与 H100上支持(截至2022年6月7日)
- CUDA 11 和 NVIDIA 驱动程序450.80.02或更高版本
- CUDA 11 支持的 Linux 操作系统发行版
- 如果运行容器或使用Kubernetes,则:(1) NVIDIA容器工具包(NVIDIA-docker2):v2.5.0或更高版本 (2)NVIDIA K8s设备插件:v0.7.0或更高版本 (3)NVIDIA gpu功能发现:v0.2.0或更高版本
MIG 可以使用 NVIDIA 管理库(NVML,NVIDIA Management Library)的 API 或其命令行界面 $ nvidia-smi 进行编程管理。
有关 MIG 命令的更多信息,请参阅 $ man nvidia-smi 或 $ nvidia-smi mig --help。有关MIG 管理 API 的信息,请参阅 CUDA 11 中包含的 NVML 的头文件(NVML.11.0.h)。
开启MIG模式(Enable MIG Mode)
默认情况下,NVIDIA A100 上未启用 MIG 模式。
在 linux 上运行 $ nvidia-smi 命令会显示 MIG 模式已禁用。
可以使用以下命令在每个 GPU 上启用 MIG 模式:
$ nvidia-smi -i <GPU IDs> -mig 1
注意:
- 可以使用逗号分隔的 GPU 索引、PCI 总线 ID 或 UUID 来选择GPU。
- 如果未指定 GPU ID,则 MIG 模式将应用于系统上的所有 GPU。
- MIG 模式(禁用或启用状态)在系统重新启动前后保持不变。
例如:
$ sudo nvidia-smi -i 0 -mig 1
Enabled MIG Mode for GPU 00000000:36:00.0
All done.
关闭MIG模式(Disable MIG Mode)
可以使用以下命令在每个 GPU 上关闭 MIG 模式:
$ nvidia-smi -i <GPU IDs> -mig 0
Disabled MIG Mode for GPU 00000000:36:00.0
All done.
GPU实例配置文件
NVIDIA 驱动程序提供了许多配置文件,用户可以在 A100 中配置 MIG 功能时选择这些配置文件。配置文件是用户可以创建的 GPU 实例的大小和功能。驱动程序还提供有关放置的信息,这些信息指示可以创建的实例的类型和数量。
$ sudo nvidia-smi mig -lgip
+-----------------------------------------------------------------------------+
| GPU instance profiles: |
| GPU Name ID Instances Memory P2P SM DEC ENC |
| Free/Total GiB CE JPEG OFA |
|=============================================================================|
| 0 MIG 1g.5gb 19 0/7 4.75 No 14 0 0 |
| 1 0 0 |
+-----------------------------------------------------------------------------+
| 0 MIG 1g.5gb+me 20 0/1 4.75 No 14 1 0 |
| 1 1 1 |
+-----------------------------------------------------------------------------+
| 0 MIG 2g.10gb 14 0/3 9.75 No 28 1 0 |
| 2 0 0 |
+-----------------------------------------------------------------------------+
| 0 MIG 3g.20gb 9 0/2 19.62 No 42 2 0 |
| 3 0 0 |
+-----------------------------------------------------------------------------+
| 0 MIG 4g.20gb 5 0/1 19.62 No 56 2 0 |
| 4 0 0 |
+-----------------------------------------------------------------------------+
| 0 MIG 7g.40gb 0 0/1 39.50 No 98 5 0 |
| 7 1 1 |
+-----------------------------------------------------------------------------+
使用 $ nvidia-smi mig -lgipp 命令可列出可用的分配安排。
分配安排的语法是 {<index>}:<GPU Slice Count>,并显示实例在 GPU 上的分配安排。显示的放置索引指示配置文件如何映射到 GPU 上,如支持的配置文件表所示。
$ sudo nvidia-smi mig -lgipp
GPU 0 Profile ID 19 Placements: {0,1,2,3,4,5,6}:1
GPU 0 Profile ID 20 Placements: {0,1,2,3,4,5,6}:1
GPU 0 Profile ID 14 Placements: {0,2,4}:2
GPU 0 Profile ID 9 Placements: {0,4}:4
GPU 0 Profile ID 5 Placement : {0}:4
GPU 0 Profile ID 0 Placement : {0}:8
该命令显示用户可以创建两个 3g.20gb 类型的实例(配置文件ID 9)或七个 1g.5gb 实例(配置文件ID 19)。
创建GPU实例
在开始使用MIG之前,用户需要使用 $ nvidia-smi mig -cgi 选项来创建GPU实例,可以使用以下三个选项之一指定要创建的实例配置文件:
- Profile ID (e.g. 9, 14, 5)
- Short name of the profile (e.g. 3g.20gb
- Full profile name of the instance (e.g. MIG 3g.20gb)
一旦 GPU 实例被创键,就需要创建相应的计算实例(CI),通过使用 $ nvidia-smi mig -C 选项来创建这些实例。
注意:
如果不创建GPU实例(和相应的计算实例),CUDA 工作负载就无法在 GPU 上运行。换句话说,仅在GPU上启用MIG模式是不够的。还要注意的是,创建的MIG设备不会在系统重新启动后持续存在。因此,如果GPU或系统被重启,则用户或系统管理员需要重新创建所需的MIG配置。
例:
下面的示例显示了用户如何创建 GPU 实例(以及相应的计算实例)。在本例中,用户可以创建两个GPU 实例(3g.20gb类型),每个 GPU 实例具有一半的可用计算和内存容量。在本例中,我们特意使用配置文件 ID 和短配置文件名称来展示如何使用任一选项:
$ sudo nvidia-smi mig -cgi 9,3g.20gb -C
Successfully created GPU instance ID 2 on GPU 0 using profile MIG 3g.20gb (ID 9)
Successfully created compute instance ID 0 on GPU 0 GPU instance ID 2 using profile MIG 3g.20gb (ID 2)
Successfully created GPU instance ID 1 on GPU 0 using profile MIG 3g.20gb (ID 9)
Successfully created compute instance ID 0 on GPU 0 GPU instance ID 1 using profile MIG 3g.20gb (ID 2)
现在可以通过如下命令列出可用的GPU实例:
$ sudo nvidia-smi mig -lgi
+----------------------------------------------------+
| GPU instances: |
| GPU Name Profile Instance Placement |
| ID ID Start:Size |
|====================================================|
| 0 MIG 3g.20gb 9 1 4:4 |
+----------------------------------------------------+
| 0 MIG 3g.20gb 9 2 0:4 |
+----------------------------------------------------+
现在可以通过如下命令验证是否已创建 GI(GPU Instance) 和相应的 CI(Compute Instance) :
$ nvidia-smi
+-----------------------------------------------------------------------------+
| MIG devices: |
+------------------+----------------------+-----------+-----------------------+
| GPU GI CI MIG | Memory-Usage | Vol| Shared |
| ID ID Dev | | SM Unc| CE ENC DEC OFA JPG|
| | | ECC| |
|==================+======================+===========+=======================|
| 0 1 0 0 | 11MiB / 20224MiB | 42 0 | 3 0 2 0 0 |
+------------------+----------------------+-----------+-----------------------+
| 0 2 0 1 | 11MiB / 20096MiB | 42 0 | 3 0 2 0 0 |
+------------------+----------------------+-----------+-----------------------++-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+