NVIDIA Document에 나와있는 Multi-Instance GPU 기능에 대한 개념은 어느정도 봤으니,
실제로 가이드에서 사용법을 어떻게 정리해 두었는지 보려고 한다.
가이드에도 언급이 된 부분이긴 한데, 아래 nvidia-smi 결과내용과 관련하여 실제와는 조금 다른 부분이 있다고 한다.
예시에서 GPU Instance를 2개 만들어 놓은 상태에서 Compute Intance 를 활용하는 예시를 보여주는데, 실제로 확인 해야할 부분에 집중하기 위해 일부러 나타내지 않은 정보가 있으니 이 점은 염두하고 예시를 참고해야 한다.
필요조건
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을 명시 가능하다.
- 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 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을 수행하는데 있어서 두가지 제약조건이 있다.
- CUDA can only enumerate a single compute instance
- 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 |
+-----------------------------------------------------------------------------+
'Working on' 카테고리의 다른 글
[Effective C++] operator= 에서는 자기대입에 대한 처리가 빠지지 않게하자 (0) | 2021.05.19 |
---|---|
[Effective c++] 항목 10: 대입 연산자는 *this 참조 반환하게 하자. (0) | 2021.05.12 |
NVIDIA NVTAGS ( Topology-Aware GPU Selection ) 메뉴얼 읽기 - 1 (0) | 2021.04.21 |
[Effective C++] 항목 9: 객체 생성 및 소멸 과정 중에는 절대로 가상함수를 호출하지 말자 (0) | 2021.04.09 |
Understanding the concepts of Multi-instance GPU (MIG) (0) | 2021.03.20 |