AEGLOSLAB 엔비디아 기술 스택

제4부 데이터센터와 스케일

4.10 MIG와 GPU 공유

4.10.1 이 장에서 배우는 것 / 선수 지식

4.5~4.9은 여러 GPU를 하나처럼 키우는(스케일업) 방향이었다. 이 장은 반대 — 한 GPU를 여러 개로 나누는 방향이다. 큰 데이터센터 GPU 한 장은 작은 추론·실험 워크로드엔 과하다(활용률 낭비). MIG(Multi-Instance GPU) 는 GPU를 하드웨어 수준에서 격리된 여러 인스턴스로 분할해, 각 인스턴스가 독립된 작은 GPU처럼 동작하게 한다 — 멀티테넌시·QoS·장애 격리. MPS·타임슬라이싱과의 차이(공유 vs 격리)도 짚는다(본격 비교는 7.4~7.5).

배우는 것:

  • MIG가 GPU를 SM·HBM·L2·메모리 대역까지 하드웨어로 분할해 인스턴스 간 격리(QoS·장애) 를 보장하는 원리.
  • GPU Instance(GI)·Compute Instance(CI)·프로파일(예 1g, 2g, 7g) 구조와 분할 방법.
  • MIG(하드 분할) vs MPS(공간 공유, 격리 없음) vs 타임슬라이싱(시분할, 격리 없음)의 차이.
  • nvidia-smi mig로 인스턴스를 만들고 워크로드를 배치하며, 언제 MIG가 맞고 언제 아닌지 판단.

선수 지식: 1.3(GPC·SM — MIG가 분할하는 단위), 1.6(점유율 — 작은 워크로드의 낭비), 1.9(HBM — 메모리 슬라이스), 4.1(데이터센터 GPU·추론 갈래), 7.2(쿠버네티스 GPU Operator — MIG 운영 상세)·7.5(vGPU·MPS 비교). 환경은 0.3. MIG 지원 GPU·인스턴스 개수·프로파일은 세대·모델 의존(예 A100·H100급에서 최대 7 인스턴스, 시점 의존) → 확인 필요.

4.10.2 동기 — 큰 GPU를 작은 작업이 낭비한다

데이터센터 GPU는 거대하다(수십~백+ SM, 대용량 HBM, 1.3·1.9). 그런데 많은 워크로드는 그것을 다 못 쓴다:

작은 추론 모델 1개 SM 일부·HBM 일부만 사용 나머지 GPU가 유휴 상태다 (활용률↓) 여러 작은 모델을 한 GPU에 단순히 올림 서로 자원을 다툼 (노이즈 이웃) 한 모델이 OOM· 폭주하면 다른 것도 영향 (격리 없음)

원하는 것: 한 GPU를 여러 작은 GPU처럼 나누되, 서로 간섭·장애가 격리되게. 세 가지 방법이 있고(MIG·MPS·타임슬라이싱) 격리 수준이 다르다. MIG는 그 중 하드웨어 격리가 가장 강하다.

방식동작격리 · 특징
타임슬라이싱한 GPU를 시간으로 번갈아 (컨텍스트 스위치)격리 없음, 간단
MPS여러 프로세스가 GPU를 공간 공유 (동시 실행)격리 약함, 처리량↑
MIGGPU를 하드웨어로 분할 (SM·HBM·대역 고정 배분)강한 격리, QoS 보장

4.10.3 MIG 메커니즘 — 하드웨어 분할

MIG는 GPU의 물리 자원을 고정 배분해 격리된 인스턴스를 만든다. 핵심은 "공유"가 아니라 "분할"이다 — 각 인스턴스가 전용 SM·HBM·L2·메모리 대역을 가진다.

GPU 한 장 (예: 7개 슬라이스로 분할 가능, 세대 의존) 슬라이스0 슬라이스1 슬라이스2 슬라이스3 슬라이스4 슬라이스5 슬라이스6 각 슬라이스 = 전용 SM 그룹 + HBM·L2·메모리 대역 일부 (하드웨어 격리) 인스턴스 A = 슬라이스 {0,1} 인스턴스 B = {2} 인스턴스 C = 슬라이스 {3,4,5,6}

각 인스턴스는 독립된 작은 GPU처럼 보이며, A·B·C는 SM·메모리·대역이 분리돼 서로 간섭·장애가 격리된다.

격리의 의미:

  • 성능 격리(QoS): 인스턴스 A가 바빠도 B의 SM·대역을 못 뺏는다 — B의 성능이 예측 가능(노이즈 이웃 없음).
  • 메모리 격리: 각 인스턴스가 자기 HBM 슬라이스만. A의 OOM이 B에 영향 없음.
  • 장애 격리: 한 인스턴스의 오류가 다른 인스턴스로 번지지 않음(대체로).

이것이 MPS·타임슬라이싱과 결정적으로 다른 점 — 그들은 자원을 공유해 간섭·격리 약함, MIG는 분할해 하드 격리. 대가는 유연성(고정 배분이라 동적 재배분이 제한, 4.10.7).

4.10.4 GI·CI·프로파일

MIG 분할은 두 단계 객체로 구성된다:

GPU GPU Instance (GI) HBM 슬라이스 + GPC(SM 그룹) + L2·대역 (메모리·대역 격리) GPU Instance (GI) Compute Instance (CI) GI 안에서 컴퓨트 (SM) 세분 Compute Instance (CI) Compute Instance (CI)

프로파일. 분할 크기는 사전 정의된 프로파일로 표현한다(이름은 세대 의존, 예시):

프로파일컴퓨트메모리비고
1g.XgbGPC 1개X GB가장 작은 인스턴스, 최대 개수
2g.YgbGPC 2개Y GB
3g.ZgbGPC 3개…
7g.WgbGPU 거의 전체W GB1개 인스턴스 = 사실상 분할 안 함

숫자(1g·2g·…)가 컴퓨트·메모리 몫이며, 그 합이 GPU 총량을 넘을 수 없다.

예: 한 GPU를 $7 \times1g$(작은 7개), 또는 1g + 2g + 4g(혼합), 또는 7g(전체) 등으로. 프로파일 조합이 분할 레이아웃이고, 워크로드 크기에 맞춰 고른다. (가능한 조합·메모리 단위는 세대별로 정해져 있음, 확인 필요.)

4.10.5 워크스루 — MIG 설정·사용

nvidia-smi mig로 분할한다(명령·출력은 개략, 버전 의존):

# 1) MIG 모드 켜기 (GPU가 idle이어야, 드라이버 리셋 필요할 수 있음)
sudo nvidia-smi -i 0 -mig 1
# 2) 가능한 GI 프로파일 목록 보기
nvidia-smi mig -lgip
#  ID  Name        Memory   ... (예: 1g.10gb, 2g.20gb, 3g.40gb, 7g.80gb — 세대 의존)
# 3) GPU 인스턴스(GI) 생성 — 예: 3g + 2g + 2g
sudo nvidia-smi mig -cgi 3g.40gb,2g.20gb,2g.20gb -C    # -C: 기본 CI도 함께 생성
# 4) 분할 결과 확인
nvidia-smi -L
#  GPU 0: ... (UUID GPU-...)
#    MIG 3g.40gb Device 0: (UUID MIG-...)
#    MIG 2g.20gb Device 1: (UUID MIG-...)
#    MIG 2g.20gb Device 2: (UUID MIG-...)

# 5) 특정 MIG 인스턴스에 워크로드 배치 — MIG UUID로 지정
CUDA_VISIBLE_DEVICES=MIG-<uuid> python serve_model.py   # 이 프로세스는 그 인스턴스만 봄
# 또는 컨테이너에 인스턴스 할당(쿠버네티스는 device plugin, 7.2)

읽는 법:

  • MIG 모드는 GPU가 idle일 때만 켜고, 분할 변경도 워크로드를 비우고. 동적 재분할 비용이 작지 않다(함정).
  • 각 MIG 인스턴스가 독립 디바이스(MIG UUID) 로 보인다 — CUDA_VISIBLE_DEVICES로 프로세스·컨테이너에 격리 할당.
  • 쿠버네티스에선 MIG 인스턴스가 스케줄 가능한 자원이 된다(GPU Operator·device plugin, 7.2~7.3).

관찰. 3g 인스턴스에서 고부하 추론을 실행해도 2g 인스턴스의 지연은 영향받지 않는다(격리). 같은 일을 MPS·타임슬라이싱으로 하면 서로 간섭한다 — 그것이 MIG의 QoS 가치.

4.10.6 중간 점검 (체크포인트)

  • [ ] MIG가 SM·HBM·L2·대역을 분할(공유 아님) 해 성능·메모리·장애를 격리함을 설명한다.
  • [ ] GI·CI·프로파일(1g·2g·7g) 구조로 분할 레이아웃을 구성할 줄 안다.
  • [ ] MIG(하드 격리) vs MPS(공간 공유, 약한 격리) vs 타임슬라이싱(시분할, 격리 없음)을 구분한다.
  • [ ] nvidia-smi mig로 인스턴스를 만들고 CUDA_VISIBLE_DEVICES로 격리 배치할 줄 안다.

증상→의심: 한 워크로드가 다른 것의 지연을 흔듦 → MPS/타임슬라이싱(격리 없음), QoS 필요하면 MIG. MIG 인스턴스가 기대보다 느림 → 작은 프로파일(자원 적음, 정상) 또는 단일 큰 작업엔 분할이 손해. 분할 변경이 안 됨 → 워크로드가 인스턴스를 점유 중(idle 필요). 큰 모델이 한 인스턴스에 안 들어감 → 더 큰 프로파일·분할 안 함(7g)·다GPU 필요.

4.10.7 트레이드오프 — MIG vs MPS vs 타임슬라이싱, 언제 무엇

방식격리동시성적합
MIG강함(HW 분할·QoS·장애)실질적 병렬(분할)멀티테넌시·SLA·보안·예측가능 추론
MPS(7.5)약함(공간 공유)동시 실행(공유)신뢰 워크로드의 처리량 극대(같은 사용자)
타임슬라이싱(7.4)없음(시분할)번갈아간단·개발·간헐 워크로드
분할 안 함(전체)——단일 큰 학습·인스턴스 초과 작업

견해: 격리가 필요하면 MIG(여러 테넌트·SLA·예측 가능 지연·보안 경계). 같은 사용자의 신뢰 워크로드 처리량이면 MPS가 자원 공유로 더 나을 수 있다(격리 불필요). 단일 큰 학습은 분할하지 말고 GPU 전체(또는 다GPU). 핵심 질문: "격리(QoS·장애)가 가치 있나, 아니면 공유로 처리량을 극대화해야 하나?" — 추론 멀티테넌시는 보통 MIG, 단일 대형 학습은 분할 금지. (상세 비교·선택은 7.4~7.5.)

비NVIDIA 정직: GPU/가속기 분할·멀티테넌시는 NVIDIA만의 과제가 아니다 — 클라우드의 vGPU·시분할, 다른 가속기의 파티셔닝, 쿠버네티스 수준의 공유 스케줄링이 같은 문제를 푼다. MIG의 차별점은 하드웨어 수준 강한 격리(메모리·대역·장애)다. 단순 시분할·소프트웨어 공유로 충분하면 MIG가 필요 없을 수도 — 격리 요구 수준으로 판단.

4.10.8 흔한 함정

  • 단일 큰 작업에 MIG. 큰 학습은 GPU 전체 자원이 필요한데 분할하면 한 인스턴스가 일부만 써 느려진다. MIG는 여러 작은 워크로드 격리용 — 단일 대형엔 분할 금지(7g 또는 분할 off).
  • 동적 재분할을 경량으로 봄. MIG 모드 토글·프로파일 변경은 GPU/인스턴스가 idle이어야 하고 즉시·빈번히 바꾸기 어렵다. 정적 파티션에 가깝다 — 워크로드 믹스가 자주 변하면 운영 부담.
  • MIG를 공유로 오해. MIG는 자원을 나눠 각자 전용으로 준다(공유 아님). 한 인스턴스가 유휴여도 그 자원을 옆이 못 쓴다 — 활용률 vs 격리의 교환.
  • 인스턴스가 다 같다고 가정. 일부 기능(예 특정 인터커넥트·인코더·기능)이 인스턴스별로 제한되거나 분할 시 일부 자원이 분배에서 빠질 수 있다(세대 의존). 워크로드 요구 기능이 인스턴스에서 되는지 확인.
  • MIG 인스턴스 간 NVLink 통신을 기대. MIG는 한 GPU를 여러 격리 슬라이스로 나누는 것이지, 슬라이스끼리(또는 다른 GPU의 인스턴스와) NVLink로 묶어 하나의 큰 작업처럼 쓸 수 있게 해주지 않는다 — 인스턴스 간 통신·NVLink 접근도 제약된다(세대·구성 의존, 확인 필요). 인스턴스를 넘나드는 통신이 필요하면 애초에 MIG가 아니라 GPU 전체 + 스케일업(4.5~4.7)이 맞는 도구.
  • 메모리 프로파일 초과. 모델이 인스턴스 HBM 슬라이스를 넘으면 OOM — 프로파일 메모리에 맞게 모델·배치 조정하거나 더 큰 프로파일.
  • 격리를 무한 신뢰. MIG 격리는 강하지만 보안 경계로 쓸 땐 그 시점 보안 모델·문서를 확인(완전성은 구현·세대 의존).

4.10.9 연습문제

연습 1 (세 방식 구분). MIG·MPS·타임슬라이싱을 "격리·동시성" 두 축으로 한 줄씩 구분하고, "여러 고객의 추론을 한 GPU에서 SLA 보장하며" 실행할 때 무엇을 고를지와 이유.

정답
  • 타임슬라이싱: 격리 없음, 시간으로 번갈아(컨텍스트 스위치). 간단하나 간섭.
  • MPS: 격리 약함(공간 공유), 여러 프로세스 동시 실행으로 처리량↑. 신뢰 워크로드용.
  • MIG: 강한 하드웨어 격리(SM·HBM·대역 분할·QoS·장애), 실질적 병렬.

선택: MIG — 여러 고객(테넌트)은 서로 신뢰 못 하고 SLA(예측 가능 지연)·장애 격리가 필요. MPS·타임슬라이싱은 한 고객이 다른 고객의 자원·지연을 흔들고 장애가 번질 수 있다. MIG의 하드 격리가 멀티테넌트 SLA에 맞다.

연습 2 (프로파일 설계). 80GB·7-슬라이스 분할 가능 GPU(가정)에서 (a) 작은 모델 추론 7개, (b) 큰 추론 1개 + 작은 것 3개를 실행하려 한다. 각각 프로파일 조합을 제안하라.

정답

(a) $7 \times1g.10gb$ — 가장 작은 인스턴스 7개로 작은 모델 각 1개씩, 완전 격리. 각 ~10GB·GPC 1개. (b) 3g.40gb + $1g.10gb \times3$(또는 가능한 조합) — 큰 추론에 3g(컴퓨트·메모리 큰 몫), 작은 것 3개에 각 1g. 합이 GPU 총량(7 슬라이스·80GB)을 넘지 않게. 정확한 가능 조합·메모리 단위는 세대별 프로파일 표로 확인(예 3g+1g+1g+1g가 슬라이스 합 6 또는 7에 맞는지). 핵심: 워크로드 크기에 프로파일을 맞추되 슬라이스·메모리 총합 한도 준수.

연습 3 (MIG 부적합). 405B 모델 사전학습 팀이 "GPU 활용률을 높이자"며 MIG로 GPU를 분할하려 한다. 왜 부적합한지, 올바른 접근은?

정답

부적합: 405B 사전학습은 GPU 전체(그리고 다수 GPU)의 SM·HBM·NVLink를 모두 쓰는 단일 거대 작업이다. MIG로 분할하면 한 인스턴스가 GPU 일부만 받아 모델이 안 들어가거나 느려지고, 인스턴스 간 NVLink·통신도 제약된다. MIG는 여러 작은 독립 워크로드를 격리하는 도구지 단일 대형 작업을 빠르게 하는 것이 아니다. 올바른 접근: 분할하지 말고 GPU 전체 + 다GPU 스케일업/아웃(NVLink 도메인·NCCL·병렬화, 4.5~4.14). 활용률은 분할이 아니라 배치 크기·병렬화·데이터 파이프라인(3.8)으로 높인다.

연습 4 (정적 분할의 운영). MIG의 "동적 재분할 비용이 작지 않다"가 운영에 주는 제약을 설명하고, 워크로드 믹스가 시간대별로 크게 변하는 환경에서의 대응을 제안하라.

정답

제약: MIG 모드·프로파일 변경은 GPU/인스턴스가 idle이어야 하고 즉시·빈번한 변경이 어렵다 — 사실상 정적 파티션. 따라서 시간대별로 "낮엔 큰 인스턴스 1개, 밤엔 작은 7개"처럼 자주 바꾸려면 워크로드를 비우고 재구성하는 비용·다운타임이 든다. 대응: ① 워크로드를 분류해 MIG 풀과 비-MIG(전체 GPU) 풀을 분리 — 큰 작업은 전체 GPU 노드, 작은 멀티테넌트는 MIG 노드로 정적 배치. ② 쿠버네티스(7.2~7.3)로 MIG 인스턴스를 스케줄 자원화하되 재구성은 유지보수 창에. ③ 믹스가 매우 동적이면 MIG 대신 MPS·타임슬라이싱(동적·격리 약함)을 고려 — 격리 요구와 동적성의 교환.

4.10.10 요약 · 다음 장

  • MIG는 스케일업의 반대 — 한 GPU를 하드웨어로 분할해 격리된 여러 작은 GPU(인스턴스)로. 각 인스턴스가 전용 SM·HBM·L2·대역을 가져 성능(QoS)·메모리·장애가 격리된다.
  • 구조: GI·CI·프로파일(1g·2g·7g)로 분할 레이아웃 구성. nvidia-smi mig로 만들고 MIG UUID로 격리 배치.
  • MIG(하드 격리) vs MPS(공유·처리량) vs 타임슬라이싱(시분할·간단) — 멀티테넌시·SLA·보안엔 MIG, 단일 대형 작업엔 분할 금지. 동적 재분할은 부하가 커 정적 파티션에 가깝다.
  • 활용률을 높이되 격리가 필요한 추론 멀티테넌시가 본령. 단일 대형 학습은 분할이 아니라 전체·다GPU로.

다음 장: 4.11 스케일아웃 네트워킹 I — InfiniBand·Spectrum-X. NVLink 도메인(노드/랙)을 넘어서는 통신이다. 노드·랙을 잇는 클러스터 패브릭(InfiniBand·이더넷 기반 Spectrum-X)의 구조와, 그것이 왜 대규모 학습의 다음 병목인지 본다.