nvidia에서 새롭게 출시한 MIG(Multi Instance GPU)는 현재 NVIDIA A100 GPU에서만 활성화가 가능하며 GPU당 7개의 개별 인스턴스로 분할하여 사용이 가능하다.
또한 MIG는 Linux에서 작동하며 Docker Engine을 사용하는 컨테이너를 지원한다. 또한 Red Hat Virtualization 및 VMware vSpeher와 같은 하이퍼 바이저를 사용하는 Kubernetes 및 가상 머신을 지원한다.
위 그림과 같이 하나의 GPU가 0-6번까지 7개의 인스턴스로 나누어지는데 어떻게 해야 저 인스턴스를 만들 수 있는지 하나씩 알아보도록 하겠다.
위에 이미지를 확인해 보게 되면우측 상단에 표기되어있는 MIG M.(MIG MODE)이 보일 것이다. 기본 Disabled 되어있는 MIG 모드를 명령어를 통해 Enabled를 시켜 주면 된다.
#nvidia-smi -mig 1
모든 GPU를 MIG 모드로 사용하지 않고 각각의 GPU만 사용하고 싶다면 아래와 같이 사용하면 된다.
#nvidia-smi -i 0,1 -mig 1
위 명령어 -i 옵션을 통해 해당 GPU만 Enabled 시키면 간단하게 원하는 GPU를 선택할 수 있다. MIG를 사용하기 위해 검색 후 이 블로그에 도달했으면 기본적인 옵션은 알 것으로 생각하고 이제부터는 넘어가도록 하겠다.
혹시 nvidia-smi에 대해 기본 사항이 궁금하신 분들은 아래 링크를 통해 확인하면 될 것 같다.
2020/06/12 - [GPU] - NVIDIA-SMI 소개 및 이해하기
위와 같이 NVIDIA MIG가 Enable되어 있는 상태에서 MIG를 조합하여야 한다. 그전에 MIG에서 사용하는 용어에 대해 간단하게는 알고 넘어가도록 하자. 그렇지 않으면 계속해서 헷갈릴 수 있는 부분이다.
GPU Slice
GPU 슬라이스는 단일 GPU 메모리 슬라이스와 단일 GPU SM 슬라이스를 결합한 A100 GPU의 가장 작은 부분이다.
GPU SM Slice
GPU SM 슬라이스는 A100 GPU에서 SM중 가장 작은 단위? 부분이다. GPU SM 슬라이스는 MIG 모드에서 구성할 때 A100에서 사용할 수 있는 총 SM수의 약 1/7이다.
GPU Memory Slice
GPU 메모리 슬라이스는 해당 메모리 컨트롤러 및 캐시를 포함한 A100 GPU 메모리의 가장 작은 부분이며, GPU 메모르 슬라이스는 용량과 대역폭을 모두 포함한 GPU 메모리 리소스의 1/8이다.
GPU Instance(GI)
GPU 인스턴스는 GPU 슬라이스와 GPU 엔진 (DMA, NVDEC 등)의 조합이다.
GPU 인스턴스 내의 모든 것은 항상 모든 GPU 메모리 슬라이스 및 기타 GPU 엔진을 공유한다. 하지만 SM 슬라이스 컴퓨팅 인스턴스(CI)로 더 세분화될 수 있다. GPU 인스턴스는 메모리 QoS를 제공합니다.
각 GPU 슬라이스에는 사용 가능한 용량과 대역폭을 모두 제한하고 메모리 QoS를 제공하는 전용 GPU메모리 리소스가 포함된다. 각 GPU 메모리 슬라이스는 총 GPU 메모리 리소스의 1/8을 가져오고 각 GPU SM 슬라이스는 총 SM 수의 1/7을 얻는다.
Compute Instance(CI)
GPU 인스턴스는 여러 컴퓨팅 인스턴스로 세분화 될 수 있다. 컴퓨팅 인스턴스(CI)에는 상위 GPU 인스턴스의 SM 슬라이스 및 기타 GPU 엔진(DMA, NVDEC 등)의 하위 집합이 포함되며, CI는 메모리와 엔진을 공유한다.
위에 내용을 다 이해하지 못하지만 어느정도 무슨 말인지 알 것 같아서 넘어갔다. 영어를 잘하고 어느 정도의 지식이 있다면 nvidia mig 공식 document를 살펴보면 더 많은 도움이 될 것이다.
위 그림을 잘 숙지하면 이해가 빠를것이다.
위 조합에서 불가능한 것은 두 개의 프로필이 수직으로 겹치지 않도록 왼쪽의 인스턴스 프로필로 시작하여 오른쪽으로 이동할 때 다른 인스턴스 프로필과 결합하여 유효한 조합을 만들 수 있다.
---------------- 중요 ---------------
예외 프로필 : [4 memory, 4 compute] + [4 memory, 3 compute]
위 프로필은 예외로 불가능하니 참고하도록 해야 한다.
예외 프로필 외에도 NVIDIA MIG 관련 API의 알려진 문제가 하나 있다.
Instance를 생성할 때 프로필 ID 19 또는 3g.20GB를 먼저 지정해야 한다.
ex) nvidia-smi mig -cgi 19,19,14,9를 사용하게 된다면.
Unable to create a GPU instance on GPU 0 using profile 9: Insufficient Resources Failed to create GPU instances: Insufficient Resource
위와 같은 failed 메시지를 확인할 수 있다. 가능한 조합이지만 되지 않는다.
-----------------------------------
프로필 배치와 인스턴스 조합이 눈에 조금 들어온다면 GPU Instance조합을 생성해보면 된다.
#nvidia-smi mig -cgi 19,19,19,19,19,19,19,19 -C
위 명령어 역시 -i옵션으로 GPU를 설정하지 않으면 모든 GPU에 동일한 GPU Instance를 만들 수 있다.
-cgi : --create-gpu-instance
-C : --default-compute-instance
-cci : --create-compute-instance
여러 가지 인스턴스를 만들 수 있지만 나는 귀찮기도 하고 많이 해봐서 간략하게 GPU Instance ID 19 인 MIG 1g.5gb를 모두 만들었다.
만약 마지막에 -C옵션을 넣어주지 않는다면 -cgi 대신에 -cci를 통해 한 번 더 compute instance생성을 하여야 한다.
A100 GPU 8개로 생성하게 되면 최대한 많은 Instance를 만들게 되면 1ea당 7개로 슬라이스 되어 보이는 것과 같이 56개의 MIG가 생성된 것을 볼 수 있을 것이다.
생성된 MIG는 각각의 UUID를 갖는다.
#nvidia-smi mig -dci
#nvidia-smi mig -dgi
compute instance를 삭제 후 gpu instance를 삭제하면 된다.
마지막으로 서버를 재부팅하게 되면 MIG는 Enable 되어있지만, 생성된 Instance들은 초기화가 된다.
MIG는 nvidia-docker 환경에서 사용이 가능하므로 확인 후 사용하면 될 것 같다. 최적화 version은 docker tensor flow-1.15.x 버전이며, 2.x 버전도 가능하다. docker 외에 local에서 설치하는 tensor flow는 아직 설치 불가능해 보인다.
2020/06/12 - [GPU] - NVIDIA-SMI 소개 및 이해하기
2020/06/12 - [GPU] - nvidia-driver설치
Nvidia GeForce RTX 30 시리즈 그래픽 카드 : THE ULTIMATE PLAY (6) | 2020.09.13 |
---|---|
Nvidia RTX 30 시리즈 상세 스펙 (3090, 3080, 3070) (9) | 2020.09.03 |
Nvidia RTX 30 시리즈 정보 (3090, 3080, 3070) (1) | 2020.09.02 |
ubuntu18.04 desktop nvidia driver troubleshooting (6) | 2020.08.21 |
nvidia-smi topo matrix 살펴보기 (2) | 2020.08.20 |