본문 바로가기
infra

[TIL] mig 해제하기

by marble25 2023. 12. 14.

nvidia a100 80GB gpu를 사용하다 mig를 해제하는 과정에서 생긴 이슈를 정리해 두고자 한다.

MIG

MIG(Multi-Instance GPU)는 NVIDIA H100, A100, A30 GPU에 적용된 기술이다.

MIG는 GPU를 각각 자체 고대역폭 메모리, 캐시, 컴퓨팅 코어를 갖추고 완전히 격리된 최대 7개의 인스턴스로 파티셔닝할 수 있다.

MIG를 이용하면 쿠버네티스에서 사용할 때 쓰루풋을 늘릴 수 있다. 기존에는 nvidia.com/gpu 하나당 하나의 모델을 할당할 수 있다. A100을 예로 들면, 80GB의 메모리에 하나의 모델로 이루어진 pod만 띄울 수 있다는 것이다. 이 80GB의 메모리를 모두 사용한다면 문제없지만, 5GB의 메모리만을 사용할 때에는 75GB의 메모리가 낭비가 된다. 만약 10gb * 7개로 나누게 되면 동일한 모델을 6개 더 띄워 쓰루풋을 늘려볼 수 있다. 다만 실제 10gb gpu 7개가 있는 것보다는 속도가 느리긴 하나, 비교적 만족스러운 처리량을 산출할 수 있다.

우리 역시 이 이점을 이용, MIG를 활용해서 처리량을 늘렸다. 하지만 모델 최적화로 사용하는 메모리가 줄었고, 한 모델당 10GB도 차지하지 않아서 MIG 설정보다 더 gpu를 효율적으로 사용할 수 있는 방법이 필요했다. 좀 더 경량화하면서 쿠버네티스에서 내려와 도커로 변경했고, 따라서 쿠버네티스의 ‘한 gpu에 하나의 모델’이라는 제약이 없어졌다. 그로 인해 MIG 설정을 해제해보기로 했다.

MIG 설정 / 해제

💡 Prerequisites: nvidia-smi가 이미 설치되어 있음을 가정한다.

  • mig 설정
  • $ sudo nvidia-smi -i 0 -mig 1 // -i 옵션 안주면 모든 GPU 에 적용 Enabled MIG Mode for GPU 00000000:36:00.0 All done.
  • mig 해제
  • $ sudo nvidia-smi -i 0 -mig 0 // -i 옵션 안주면 모든 GPU 에 적용 All done.

MIG 옵션 보기

$ 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.75       No     14     0     0   |
|                                                             1     0     0   |
+-----------------------------------------------------------------------------+
|   0  MIG 1g.5gb+me     20     1/1        4.75       No     14     1     0   |
|                                                             1     1     1   |
+-----------------------------------------------------------------------------+
|   0  MIG 1g.10gb       15     4/4        9.62       No     14     1     0   |
|                                                             1     0     0   |
+-----------------------------------------------------------------------------+
|   0  MIG 2g.10gb       14     3/3        9.62       No     28     1     0   |
|                                                             2     0     0   |
+-----------------------------------------------------------------------------+
|   0  MIG 3g.20gb        9     2/2        19.50      No     42     2     0   |
|                                                             3     0     0   |
+-----------------------------------------------------------------------------+
|   0  MIG 4g.20gb        5     1/1        19.50      No     56     2     0   |
|                                                             4     0     0   |
+-----------------------------------------------------------------------------+
|   0  MIG 7g.40gb        0     1/1        39.25      No     98     5     0   |
|                                                             7     1     1   |
+-----------------------------------------------------------------------------+

MIG instance 생성

$ sudo nvidia-smi mig -cgi 9,9 -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)

-cgi 옵션 뒤에 comma 로 구분하여 MIG 설정 ID 혹은 name을 써준다. 위 예시는 9번 id의 profile을 2개 생성하는 것이다.

MIG instance 삭제

현재 생성되어 있는 모든 mig instance를 삭제한다.

$ sudo nvidia-smi mig -dci && sudo nvidia-smi mig -dgi

Troubleshooting

mig instance 삭제 후 mig 설정 disabled를 위해 다음 명령을 입력했다.

$ sudo nvidia-smi -mig 0
Warning: MIG mode is in pending enable state for GPU 00000000:07:00.0:In use by another client
00000000:07:00.0 is currently being used by one or more other processes (e.g. CUDA application or a monitoring application such as another instance of nvidia-smi). Please first kill all processes using the device and retry the command or reboot the system to make MIG mode effective.
All done.

다음과 같이 warning이 뜨고, docker에 gpu를 할당해서 띄워보니 cuda에서 gpu를 제대로 찾지 못했다.

이상함을 느껴서 nvidia-smi를 입력해서 확인해보니,

정상적이면 상태가 다음과 같이 Disabled로 표시되어야 하지만, 이상하게 Disabled 옆에 * 이 있었다. 뭔가 설정은 저장되었지만 적용이 안된듯 하여서 재부팅도 진행해 주었다. 하지만 여전히 동일한 상태였고, docker도 gpu를 물고 뜨지 못했다.

Process 목록을 뒤져보다 gpu를 모니터링하는, 내가 모르고 있던 프로세스를 발견했고, 이를 과감히 죽이고 다시 재부팅을 진행해보았다.

그 후 mig 설정 disable를 위해 동일한 명령어를 입력하니 warning이 뜨지 않으면서 작업이 성공적으로 이루어졌다. Disabled 옆에 *을 발견하지 못했다면 계속된 삽질이 이어졌을 것 같다. 작은 불씨도 다시 보자!

'infra' 카테고리의 다른 글

aws code pipeline blue / green 배포  (0) 2024.01.12
[TIL] aws codebuild에서 docker image pull rate limit 해결하기  (0) 2023.12.15
[TIL] js pm2 패키지  (0) 2023.11.05
무중단 배포 프로세스  (0) 2023.09.17
컨테이너 보안  (0) 2023.07.14