본문 바로가기
Working on

Getting started with MIG

by Warehaus 2021. 3. 21.

NVIDIA Document에 나와있는 Multi-Instance GPU 기능에 대한 개념은 어느정도 봤으니,

실제로 가이드에서 사용법을 어떻게 정리해 두었는지 보려고 한다.

 

가이드에도 언급이 된 부분이긴 한데, 아래 nvidia-smi 결과내용과 관련하여 실제와는 조금 다른 부분이 있다고 한다.

예시에서 GPU Instance를 2개 만들어 놓은 상태에서 Compute Intance 를 활용하는 예시를 보여주는데, 실제로 확인 해야할 부분에 집중하기 위해 일부러 나타내지 않은 정보가 있으니 이 점은 염두하고 예시를 참고해야 한다.

 

GPU 인스턴스 내에서 여러개의 Compute instance를 지원하는 MIG

필요조건

MIG User guide에 나와있는 예시는 아래 조건 기반으로 작성 되었다.

 

  • MIG is supported only on NVIDIA A100 products and associated systems using A100 (e.g. DGX A100 and HGX A100)
  • CUDA 11 and NVIDIA driver 450.80.02 or later
  • CUDA 11 supported Linux operating system distributions
  • If running containers or using Kubernetes, then:
    • NVIDIA Container Toolkit (nvidia-docker2): v2.5.0 or later
    • NVIDIA K8s Device Plugin: v0.7.0 or later
    • NVIDIA gpu-feature-discovery: v0.2.0 or later

MIG는 NVML API를 이용하여 프로그램을 통한 관리가 가능하고, nvidia-smi 를 이용한 CLI 기반의 설정도 지원한다.

MIG Mode 설정

MIG mode의 사용인 A100 모델에서 Default 설정이 아니다. 이는 nvidia-smi를 통해 확인 가능하다.

 

$ nvidia-smi -i 0
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.80.02    Driver Version: 450.80.02    CUDA Version: 11.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  A100-SXM4-40GB      Off  | 00000000:36:00.0 Off |                    0 |
| N/A   29C    P0    62W / 400W |      0MiB / 40537MiB |      6%      Default |
|                               |                      |             Disabled |
+-------------------------------+----------------------+----------------------+

 

MIG mode는 per-GPU 기반으로 설정이 가능한데 명령어는 다음과 같다:

 

nvidia-smi -i <GPU IDs> -mig 1

 

GPU는 comma 로 GPU Index와 PCI Bus Ids 또는 UUID를 구분하여 선택 가능하며, GPU ID가 명시되지 않는 경우, MIG mode는 모든 GPU에 Enable로 설정된다. 그리고 MIG mode의 Enabled 또는 Disabled 설정이 적용 된 후에는 System reboot 시에도 변경되지 않는다.

 

$ sudo nvidia-smi -i 0 -mig 1
Enabled MIG Mode for GPU 00000000:36:00.0
All done.


$ nvidia-smi -i 0 --query-gpu=pci.bus_id,mig.mode.current --format=csv
pci.bus_id, mig.mode.current
00000000:36:00.0, Enabled

 

추가로 알아둬야 할 부분으로 GPU passthrough를 이용한 VM에서 MIG를 사용하는 경우, MIG mode 사용을 위한 VM 재부팅이 필요할 수 있다. ==> GPU reset은 보안 문제로 hypervisor에 허용되지 않는다.

 

아래는 Document에서 보여주는 예시이다. Warning message가 나오며 reset도 불가능하다.

 

$ sudo nvidia-smi -i 0 -mig 1
Warning: MIG mode is in pending enable state for GPU 00000000:00:03.0:Not Supported
Reboot the system or try nvidia-smi --gpu-reset to make MIG mode effective on GPU 00000000:00:03.0
All done.


$ sudo nvidia-smi --gpu-reset
Resetting GPU 00000000:00:03.0 is not supported.

 

추가로 DGX 같은 시스템에서 사용하는 nvsm이나 dcgm 서비스를 사용하는 경우에도 MIG 설정이 불가할 수 있으니 이런 서비스들은 종료 후 사용하도록 한다.  MIG Mode는 초기 서버셋업 시 의사결정 완료 후에 도입이 될 테니, 빈번하게 Enabled / Disabled 설정을 하지는 않을 것 같다. DCGM같이 NVIDIA driver handle을 잡는 데몬은 여기저기서 많이 사용할테니.. 자주 설정할 일이 없기를 바란다. 

 

MIG 의 초기 설정은 super-user 권한으로 이루어지며, non-root 사용자에게 인스턴스 권한을 넘겨주기 위해서는 MIG mode가 켜진 상태에서 mig/config에 read access를 부여하면 가능하다. 기본 Permission은 아래와 같다.

 

$ ls -l /proc/driver/nvidia/capabilities/*
/proc/driver/nvidia/capabilities/mig:
total 0
-r-------- 1 root root 0 May 24 16:10 config
-r--r--r-- 1 root root 0 May 24 16:10 monitor

GPU Instance Profile의 조회 ( List GPU Instance Profile )

NVIDIA driver는 사용자가 지정 가능한 여러 Profile들을 제공한다. Profile은 사용자에 의해 생성될 수 있는 GPU Instance의 크기에 따라 결정되며, driver는 생성 가능한 인스턴스의 개수와 타입에 대한 정보를 제공한다.

 

$ 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     7/7        4.95       No     14     0     0   |
|                                                          1     0     0   |
+--------------------------------------------------------------------------+
|   0  MIG 2g.10gb    14     3/3        9.90       No     28     1     0   |
|                                                          2     0     0   |
+--------------------------------------------------------------------------+
|   0  MIG 3g.20gb     9     2/2        19.79      No     42     2     0   |
|                                                          3     0     0   |
+--------------------------------------------------------------------------+
|   0  MIG 4g.20gb     5     1/1        19.79      No     56     2     0   |
|                                                          4     0     0   |
+--------------------------------------------------------------------------+
|   0  MIG 7g.40gb     0     1/1        39.59      No     98     5     0   |
|                                                          7     1     1   |
+--------------------------------------------------------------------------+

 

가능한 배치를 아래의 명령어를 통해 볼 수 있으며, 내용은 {<index>}:<GPU Slice Count> 를 의미한다.

 

$ sudo nvidia-smi mig -lgipp
GPU  0 Profile ID 19 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를 2개 생성하거나 1g.5gb 를 7개 생성할 수 있다고 보여주고 있다.

 

GPU Instance의 생성 ( Creating GPU Instances )

 

MIG를 사용하기 전에, 사용자는 GPU Instance를 생성해 줘야 한다. GPU Instance는 -cgi 옵션을 이용해서 생성하며, 3가지 옵션들 중 하나로 생성 할 Instance profile을 명시 가능하다.

 

  1. Profile ID (e.g. 9, 14, 5)
  2. Short name of the profile (e.g. 3g.20gb
  3. Full profile name of the instance (e.g. MIG 3g.20gb)

GPU instance가 생성되면, nvisia-smi를 이용해 이에 상응하는 Compute Instance(CI)를 만들어 줘야 한다. 이때 -C 옵션을 사용한다.

 

MIG Mode를 사용한다고 했을때, GPU Istance와 이에 상응하는 Compute Instance를 만들이 않으면, MIG Mode를 사용하기 전처럼 GPU에 CUDA Workload를 수행할 수 없다.

 

그리고 MIG Mode가 켜진 이후에 만들어진 설정들은 System reboot 후에 유지가 되지 않으므로 필요한 MIG 설정을 다시 줘야 한다. ( GPU reset도 포함 )

 

아래 예시는 사용자가 어떻게 GPU instance를 만드는지에 대한 예시이다. Profile ID (9) 와 Instance name(2g.20gb) 를 쉼표 구분자를 이용하여 2개의 GPU instance로 만들었다.

 

$ 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 instance 조회

 

$ 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와 이에 따른 CI가 생성되었다.

 

$ 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                                                 |
+-----------------------------------------------------------------------------+

 

Instance의 기하학 ( Instance Geometry )

 

한국어로 딱히 뭐라 해야할지 모르겠다.

 

Partitioning section을 보면 NVIDIA driver API가 다양한 가용 GPU instance를 사용자가 선택할 수 있도록 제공하는데, 이런 profile들을 여러개 섞어서 사용자가 선택했을 때,  그런 다양한 profile들 간의 배치를 NVIDIA driver 결정해 준다는 내용이다.

 

$ sudo nvidia-smi mig -cgi 19,14,5
Successfully created GPU instance ID 13 on GPU  0 using profile MIG 1g.5gb (ID 19)
Successfully created GPU instance ID  5 on GPU  0 using profile MIG 2g.10gb (ID 14)
Successfully created GPU instance ID  1 on GPU  0 using profile MIG 4g.20gb (ID  5)


$ sudo nvidia-smi mig -lgi
+----------------------------------------------------+
| GPU instances:                                     |
| GPU   Name          Profile  Instance   Placement  |
|                       ID       ID       Start:Size |
|====================================================|
|   0  MIG 1g.5gb       19       13          6:1     |
+----------------------------------------------------+
|   0  MIG 2g.10gb      14        5          4:2     |
+----------------------------------------------------+
|   0  MIG 4g.20gb       5        1          0:4     |
+----------------------------------------------------+

 

아래는 known issue에 대한 내용인데, 9 번 profile id를 정렬해서 써야함을 의미한다. 

 

$ sudo nvidia-smi mig -cgi 19,19,14,9
Successfully created GPU instance ID 13 on GPU  0 using profile MIG 1g.5gb (ID 19)
Successfully created GPU instance ID 11 on GPU  0 using profile MIG 1g.5gb (ID 19)
Successfully created GPU instance ID  3 on GPU  0 using profile MIG 2g.10gb (ID 14)
Unable to create a GPU instance on GPU  0 using profile 9: Insufficient Resources
Failed to create GPU instances: Insufficient Resources

 

정렬 후 GPU instance를 생성하면 아래처럼 잘 생성된다.

 

$ sudo nvidia-smi mig -cgi 9,19,14,19
Successfully created GPU instance ID  2 on GPU  0 using profile MIG 3g.20gb (ID  9)
Successfully created GPU instance ID  7 on GPU  0 using profile MIG 1g.5gb (ID 19)
Successfully created GPU instance ID  4 on GPU  0 using profile MIG 2g.10gb (ID 14)
Successfully created GPU instance ID  8 on GPU  0 using profile MIG 1g.5gb (ID 19)


$ sudo nvidia-smi mig -lgi
+----------------------------------------------------+
| GPU instances:                                     |
| GPU   Name          Profile  Instance   Placement  |
|                       ID       ID       Start:Size |
|====================================================|
|   0  MIG 1g.5gb       19        7          0:1     |
+----------------------------------------------------+
|   0  MIG 1g.5gb       19        8          1:1     |
+----------------------------------------------------+
|   0  MIG 2g.10gb      14        4          2:2     |
+----------------------------------------------------+
|   0  MIG 3g.20gb       9        2          4:4     |
+----------------------------------------------------+

 

다음은 2-1-1-1-1-1 예시

 

$ sudo nvidia-smi mig -cgi 14,19,19,19,19,19
Successfully created GPU instance ID  5 on GPU  0 using profile MIG 2g.10gb (ID 14)
Successfully created GPU instance ID 13 on GPU  0 using profile MIG 1g.5gb (ID 19)
Successfully created GPU instance ID  7 on GPU  0 using profile MIG 1g.5gb (ID 19)
Successfully created GPU instance ID  8 on GPU  0 using profile MIG 1g.5gb (ID 19)
Successfully created GPU instance ID  9 on GPU  0 using profile MIG 1g.5gb (ID 19)
Successfully created GPU instance ID 10 on GPU  0 using profile MIG 1g.5gb (ID 19)


$ sudo nvidia-smi mig -lgi
+----------------------------------------------------+
| GPU instances:                                     |
| GPU   Name          Profile  Instance   Placement  |
|                       ID       ID       Start:Size |
|====================================================|
|   0  MIG 1g.5gb       19        7          0:1     |
+----------------------------------------------------+
|   0  MIG 1g.5gb       19        8          1:1     |
+----------------------------------------------------+
|   0  MIG 1g.5gb       19        9          2:1     |
+----------------------------------------------------+
|   0  MIG 1g.5gb       19       10          3:1     |
+----------------------------------------------------+
|   0  MIG 1g.5gb       19       13          6:1     |
+----------------------------------------------------+
|   0  MIG 2g.10gb      14        5          4:2     |
+----------------------------------------------------+

Device enumeration

위에서 정의한 GI는 아래처럼 /proc 밑에 열거된다.

 

$ ls -l /proc/driver/nvidia/capabilities/gpu0/mig/gi*
/proc/driver/nvidia/capabilities/gpu0/mig/gi1:
total 0
-r--r--r-- 1 root root 0 Nov  6 20:34 access
dr-xr-xr-x 2 root root 0 Nov  6 20:34 ci0

/proc/driver/nvidia/capabilities/gpu0/mig/gi2:
total 0
-r--r--r-- 1 root root 0 Nov  6 20:34 access
dr-xr-xr-x 2 root root 0 Nov  6 20:34 ci0

Bare-metal에서 CUDA application 수행 ( Running CUDA Applications on Bare-Metal )

 

CUDA application을 수행하는데 있어서 두가지 제약조건이 있다.

 

  1. CUDA can only enumerate a single compute instance 
  2. CUDA will not enumerate non-MIG GPU if any compute instance is enumerated on any other GPU

앞으로 두고 봐야겠지만, 이런 제약사항은 점점 유연해 질 것이라고 말하고 있다.

그리고 GPU instance사용을 위해서 CUDA_VISIBLE_DEVICES를 이용할 수 있다. 

 

CUDA_VISIBLE_DEVICES has been extended to add support for MIG by specifying the CI and the corresponding parent GI. The new format follows this convention: MIG-<GPU-UUID>/<GPU instance ID>/<compute instance ID>.

 

GPU Instance

아래는 2개의 CUDA application 을 2 개의 GPU instance에서 동시에 수행하는 예시이다. UUID를 CUDA_VISIBLE_DEVICES에 set 하고 CUDA application을 수행한다.

 

$ nvidia-smi -L
GPU 0: A100-SXM4-40GB (UUID: GPU-e86cb44c-6756-fd30-cd4a-1e6da3caf9b0)
  MIG 3g.20gb Device 0: (UUID: MIG-GPU-e86cb44c-6756-fd30-cd4a-1e6da3caf9b0/1/0)
  MIG 3g.20gb Device 1: (UUID: MIG-GPU-e86cb44c-6756-fd30-cd4a-1e6da3caf9b0/2/0)


$ CUDA_VISIBLE_DEVICES=MIG-GPU-e86cb44c-6756-fd30-cd4a-1e6da3caf9b0/1/0 ./BlackScholes &
$ CUDA_VISIBLE_DEVICES=MIG-GPU-e86cb44c-6756-fd30-cd4a-1e6da3caf9b0/2/0 ./BlackScholes &

 

아래를 결과를 보면 2개의 GI에서 2개의 CUDA application이 개별적으로 수행됨을 볼 수 있다.

 

$ 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  |    268MiB / 20224MiB | 42      0 |  3   0    2    0    0 |
+------------------+----------------------+-----------+-----------------------+
|  0    2   0   1  |    268MiB / 20096MiB | 42      0 |  3   0    2    0    0 |
+------------------+----------------------+-----------+-----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0    1    0      58866      C   ./BlackScholes                    253MiB |
|    0    2    0      58856      C   ./BlackScholes                    253MiB |
+-----------------------------------------------------------------------------+

GPU Utilization Metrics

NVML은 MIG 장비의 Utilization 정보를 제공하지 않는다.  nvidia-smi를 이용한 사용량 수집이 불가하니 DCGM을 이용하도록 한다.  ( NVIDIA가 추천한다 )

 

기존에는 nvidia-smi를 이용해 GPU 사용량을 계산하는게 보통이었는데.. DCGM 사용이 빼박이 되었다.

 

아래처럼 GPU-Util이 N/A가 떠버린다.

 

$ nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.80.02    Driver Version: 450.80.02    CUDA Version: 11.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  A100-SXM4-40GB      On   | 00000000:00:04.0 Off |                   On |
| N/A   47C    P0   300W / 400W |    537MiB / 40537MiB |     N/A      Default |
|                               |                      |              Enabled |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| MIG devices:                                                                |
+------------------+----------------------+-----------+-----------------------+
| GPU  GI  CI  MIG |         Memory-Usage |        Vol|         Shared        |
|      ID  ID  Dev |           BAR1-Usage | SM     Unc| CE  ENC  DEC  OFA  JPG|
|                  |                      |        ECC|                       |
|==================+======================+===========+=======================|
|  0    1   0   0  |    268MiB / 20096MiB | 42      0 |  3   0    2    0    0 |
|                  |      4MiB / 32767MiB |           |                       |
+------------------+----------------------+-----------+-----------------------+
|  0    2   0   1  |    268MiB / 20096MiB | 42      0 |  3   0    2    0    0 |
|                  |      4MiB / 32767MiB |           |                       |
+------------------+----------------------+-----------+-----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0    1    0       6217      C   ...inux/release/BlackScholes      253MiB |
|    0    2    0       6223      C   ...inux/release/BlackScholes      253MiB |
+-----------------------------------------------------------------------------+

Compute Instances

MIG의 CI를 이용하면 동일한 GI에서 다중 CUDA process를 수행할 수도 있다.

 

아래 예시는 3개의 CUDA process를 하나의 GI에서 수행하는 예시이다.

 

우선, 앞에서 만들었던 2개의 GI 를 기준으로 생성 가능한 CI 프로필을 확인한다. Instances Free / Total 항목을 보면 해당 인스턴스를 몇 개 만들 수 있는지 볼 수 있으며, 현재 사용하려는 GPU Instance ID (1) 이  3g.20gb 로 만들어 졌기 때문에 최대 크기의 CI 도 3g.20gb임을 확인할 수 있다.

 

$ sudo nvidia-smi mig -lcip -gi 1
+--------------------------------------------------------------------------------------+
| Compute instance profiles:                                                           |
| GPU     GPU       Name             Profile  Instances   Exclusive       Shared       |
|       Instance                       ID     Free/Total     SM       DEC   ENC   OFA  |
|         ID                                                          CE    JPEG       |
|======================================================================================|
|   0      1       MIG 1c.3g.20gb       0      0/3           14        2     0     0   |
|                                                                      3     0         |
+--------------------------------------------------------------------------------------+
|   0      1       MIG 2c.3g.20gb       1      0/1           28        2     0     0   |
|                                                                      3     0         |
+--------------------------------------------------------------------------------------+
|   0      1       MIG 3g.20gb          2*     0/1           42        2     0     0   |
|                                                                      3     0         |
+--------------------------------------------------------------------------------------+

 

첫번째 GI 에 profile ID 0 에 해당하는 1c compute capacity 타입의 CI를 3개 만든다.

 

$ sudo nvidia-smi mig -cci 0,0,0 -gi 1
Successfully created compute instance on GPU  0 GPU instance ID  1 using profile ID  0
Successfully created compute instance on GPU  0 GPU instance ID  1 using profile ID  0
Successfully created compute instance on GPU  0 GPU instance ID  1 using profile ID  0

 

GI 1 에 만들어진 3개의 CI를 볼 수 있다.

 

$ sudo nvidia-smi mig -lci -gi 1
+-------------------------------------------------------+
| Compute instances:                                    |
| GPU     GPU       Name             Profile   Instance |
|       Instance                       ID        ID     |
|         ID                                            |
|=======================================================|
|   0      1       MIG 1c.3g.20gb       0         0     |
+-------------------------------------------------------+
|   0      1       MIG 1c.3g.20gb       0         1     |
+-------------------------------------------------------+
|   0      1       MIG 1c.3g.20gb       0         2     |
+-------------------------------------------------------+

 

그리고 아래처럼 GI와 CI가 생성되어 나열됨을 볼 수 있다.

 

$ 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 | 14      0 |  3   0    2    0    0 |
+------------------+                      +-----------+-----------------------+
|  0    1   1   1  |                      | 14      0 |  3   0    2    0    0 |
+------------------+                      +-----------+-----------------------+
|  0    1   2   2  |                      | 14      0 |  3   0    2    0    0 |
+------------------+----------------------+-----------+-----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

 

이제, 3개의 CUDA application을 수행해 본다.

 

$ CUDA_VISIBLE_DEVICES=MIG-GPU-e86cb44c-6756-fd30-cd4a-1e6da3caf9b0/1/0 ./BlackScholes &
$ CUDA_VISIBLE_DEVICES=MIG-GPU-e86cb44c-6756-fd30-cd4a-1e6da3caf9b0/1/1 ./BlackScholes &
$ CUDA_VISIBLE_DEVICES=MIG-GPU-e86cb44c-6756-fd30-cd4a-1e6da3caf9b0/1/2 ./BlackScholes &

 

3개의 CI에서 개별적으로 동작하는 CUDA application을 볼 수 있다.

 

        
$ 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  |    476MiB / 20224MiB | 14      0 |  3   0    2    0    0 |
+------------------+                      +-----------+-----------------------+
|  0    1   1   1  |                      | 14      0 |  3   0    2    0    0 |
+------------------+                      +-----------+-----------------------+
|  0    1   2   2  |                      | 14      0 |  3   0    2    0    0 |
+------------------+----------------------+-----------+-----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0    1    0      59785      C   ./BlackScholes                    153MiB |
|    0    1    1      59796      C   ./BlackScholes                    153MiB |
|    0    1    2      59885      C   ./BlackScholes                    153MiB |
+-----------------------------------------------------------------------------+

GPU 인스턴스의 삭제 ( Destroying GPU Instance )

A100을 MIG 모드로 사용할 때, GI와 CI 설정은 동적으로 가능하다. 아래 예시는 앞에서 생성 한 CI와 GI가 어떻게 삭제되는지 보여준다.

 

$ sudo nvidia-smi mig -dci -ci 0,1,2 -gi 1
Successfully destroyed compute instance ID  0 from GPU  0 GPU instance ID  1
Successfully destroyed compute instance ID  1 from GPU  0 GPU instance ID  1
Successfully destroyed compute instance ID  2 from GPU  0 GPU instance ID  1

 

지우고 나면 MIG device가 사라진 것을 볼 수 있다.

 

$ nvidia-smi
+-----------------------------------------------------------------------------+
| MIG devices:                                                                |
+------------------+----------------------+-----------+-----------------------+
| GPU  GI  CI  MIG |         Memory-Usage |        Vol|         Shared        |
|      ID  ID  Dev |                      | SM     Unc| CE  ENC  DEC  OFA  JPG|
|                  |                      |        ECC|                       |
|==================+======================+===========+=======================|
|  No MIG devices found                                                       |
+-----------------------------------------------------------------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+