GPU MIG 설정 (A100 40GB)
개요
NVIDIA A100 40GB GPU의 MIG(Multi-Instance GPU) 파티셔닝을 변경하는 절차와, 변경 과정에서 실제로 발생한 인시던트 및 해결 방법을 정리했습니다.
작업 1 — MIG 전체 비활성화
기존 1g.5gb × 7 슬라이싱을 제거하고, GPU 하나를 단일 디바이스로 온전히 사용하도록 변경하는 작업입니다.
# 기존 MIG 인스턴스 확인
sudo nvidia-smi mig -lgi
# 모든 GPU Instance 삭제
sudo nvidia-smi mig -dgi
# 모든 Compute Instance 삭제
sudo nvidia-smi mig -dci
# MIG 모드 자체를 비활성화
sudo nvidia-smi -mig 0
# 확인
sudo nvidia-smi -L
작업 2 — 파티션 재구성 (3g.20gb + 4g.20gb)
기존 1g.5gb × 7 구성을 3g.20gb + 4g.20gb로 재구성하는 작업입니다.
# 기존 인스턴스 정리
sudo nvidia-smi mig -dci
sudo nvidia-smi mig -dgi
# 새 프로파일로 GPU Instance 생성
sudo nvidia-smi mig -cgi 3g.20gb,4g.20gb -C
# 생성 확인
sudo nvidia-smi -L
⚠️ 인시던트: UnexpectedAdmissionError
증상
MIG 설정을 변경(특히 비활성화)한 직후, 기존에 떠 있던 Pod들이 UnexpectedAdmissionError 상태로 전환되었습니다.
kubectl get pods -A | grep UnexpectedAdmissionError
원인
문제가 된 Deployment들이 리소스 요청에 특정 MIG 프로파일을 명시하고 있었습니다.
resources:
limits:
nvidia.com/mig-1g.5gb: 1
MIG를 비활성화(또는 재구성)하면서 nvidia.com/mig-1g.5gb라는 리소스 자체가 노드에서 더 이상 advertise되지 않는데, 기존 Deployment는 여전히 이 리소스를 요청하고 있어 스케줄러가 이를 "유효하지 않은 요청"으로 판단하면서 발생했습니다.
해결
- 문제가 된 Deployment의 리소스 요청을 변경된 MIG 프로파일(또는 일반
nvidia.com/gpu)에 맞게 수정합니다.
resources:
limits:
nvidia.com/gpu: 1 # MIG 비활성화 후에는 일반 GPU 리소스로 요청
- Deployment를 재적용하여 롤아웃합니다.
kubectl apply -f <deployment.yaml>
kubectl rollout status deployment/<name> -n <namespace>
:::warning 사전 점검 권장
MIG 프로파일을 변경하기 전에, 해당 노드에서 실행 중인 모든 Deployment/Pod가 어떤 nvidia.com/mig-* 리소스를 요청하고 있는지 먼저 확인하세요.
kubectl get deployments -A -o json | grep -o 'nvidia.com/mig-[a-z0-9.]*'
:::
A100 40GB MIG 슬라이스 조합 참조
A100 40GB는 GPU를 최대 7개의 컴퓨트 슬라이스로 나눌 수 있으며, 아래 5가지 프로파일을 조합해 파티셔닝합니다.
| 프로파일 | 메모리 | 컴퓨트 비중 | 최대 동시 개수 |
|---|---|---|---|
| 1g.5gb | 5GB | 1/7 | 7 |
| 2g.10gb | 10GB | 2/7 | 3 |
| 3g.20gb | 20GB | 3/7 | 2 |
| 4g.20gb | 20GB | 4/7 | 1 |
| 7g.40gb | 40GB | 7/7 (전체) | 1 |
유효한 조합 예시
| # | 조합 | 총 사용 슬라이스 |
|---|---|---|
| 1 | 1g.5gb × 7 | 7/7 |
| 2 | 2g.10gb × 1 + 1g.5gb × 5 | 7/7 |
| 3 | 2g.10gb × 2 + 1g.5gb × 3 | 7/7 |
| 4 | 2g.10gb × 3 + 1g.5gb × 1 | 7/7 |
| 5 | 3g.20gb × 1 + 1g.5gb × 4 | 7/7 |
| 6 | 3g.20gb × 1 + 2g.10gb × 1 + 1g.5gb × 2 | 7/7 |
| 7 | 3g.20gb × 1 + 2g.10gb × 2 | 7/7 |
| 8 | 3g.20gb × 2 + 1g.5gb × 1 | 7/7 |
| 9 | 4g.20gb × 1 + 1g.5gb × 3 | 7/7 |
| 10 | 4g.20gb × 1 + 2g.10gb × 1 + 1g.5gb × 1 | 7/7 |
| 11 | 4g.20gb × 1 + 3g.20gb × 1 | 7/7 |
| 12 | 7g.40gb × 1 (MIG 미사용, 풀 GPU) | 7/7 |
:::info 실제 배치 가능 여부 확인 GPU Instance는 물리적인 placement slot 제약이 있어, 위 조합이 이론상 슬라이스 합은 맞아도 실제 생성 시 배치가 거부될 수 있습니다. 파티셔닝 전에 아래 명령으로 현재 GPU에서 지원하는 정확한 프로파일과 placement를 확인하세요.
nvidia-smi mig -lgip # 지원 프로파일 목록
nvidia-smi mig -lgipp # 프로파일별 possible placement 목록
:::
관련 문서
- GPU Time-slicing 설정 — MIG 대신 시간 분할 방식으로 GPU를 공유하는 방법