GPU 분할 정리
GPU 한 장을 나눠 쓰는 Time-slicing, MPS, MIG, vGPU 네 방식을 비교했다. 분할 단위와 메모리, 장애 격리, 지원 하드웨어 기준으로 정리한 글이다.
GPU 분할이란
GPU 분할(GPU Partitioning)이란 물리 GPU 한 장의 연산 자원과 메모리를 여러 워크로드가 나눠 쓰도록 쪼개는 기법
추론 워크로드는 GPU 하나를 다 채우지 못해 유휴율이 높고, 그대로 두면 비싼 가속기가 놀게 됨.
- 추론은 배치 크기·시퀀스 길이가 작아 SM(Streaming Multiprocessor)과 메모리를 일부만 점유 → 단독 할당 시 대부분 유휴
- 학습과 달리 상시 대기하는 서빙은 트래픽이 몰릴 때만 부하↑ → 평시 자원 낭비
- 가속기 단가가 높아 유휴 시간이 곧 비용 → 한 장을 여럿이 나눠 점유율을 끌어올림
- 방식마다 격리 강도와 오버헤드가 달라 워크로드 요구에 맞춰 골라야 함
분할 4방식 개요
나눠 쓰는 계층이 스케줄러·프로세스·하드웨어·하이퍼바이저로 갈림
| 방식 | 분할 계층 | 한 줄 요약 |
|---|---|---|
| Time-slicing(시간 분할) | 스케줄러 | 하나의 컨텍스트를 시간으로 번갈아 점유 |
| MPS(Multi-Process Service) | 프로세스 | 여러 프로세스가 SM을 공간으로 동시 점유 |
| MIG(Multi-Instance GPU) | 하드웨어 | GPU를 물리 슬라이스로 잘라 인스턴스화 |
| vGPU(NVIDIA vGPU software) | 하이퍼바이저 | VM에 가상 GPU를 붙이는 가상화 계층 |
- 위로 갈수록 격리가 약하고 설정이 가벼움, 아래로 갈수록 격리가 강하고 요건이 무거움
- Time-slicing과 MPS는 소프트웨어 공유, MIG는 하드웨어 분할, vGPU는 가상화 스택
- 넷은 대체재가 아니라 격리 강도가 다른 선택지 → 요구 격리 수준이 선택을 가름
Time-slicing
Time-slicing(시간 분할)이란 GPU를 여러 워크로드가 시간 단위로 번갈아 점유하도록 컨텍스트를 교대시키는 방식
- 한 시점엔 하나의 컨텍스트만 실행 → 스케줄러가 짧은 주기로 컨텍스트 스위칭
- 쿠버네티스에선 GPU 하나를 여러 replica로 광고해 여러 파드에 배정 → 내부적으로 시분할 다중화
- 메모리 격리 없음 → 한 워크로드가 메모리를 초과 점유하면 이웃까지 OOM
- 장애 격리 없음 → NVIDIA GPU Operator 문서도 replica 간 메모리·장애 격리가 없다고 명시
- 설정이 가장 가벼움 → 별도 하드웨어 요건 없이 대부분의 NVIDIA GPU에서 동작
- 컨텍스트 스위칭 자체가 오버헤드 → 동시 부하가 높으면 처리량이 깎임
MPS
MPS(Multi-Process Service)란 여러 프로세스의 CUDA 커널을 하나의 GPU 컨텍스트에서 동시에 실행시켜 SM을 공간으로 나눠 쓰게 하는 런타임 서비스
- 시간이 아니라 공간으로 나눔 → 서로 다른 프로세스의 커널이 SM 위에서 겹쳐 실행
- 컨텍스트 스위칭 대신 스케줄링 자원을 공유 → 협력적 다중 프로세스에서 점유율↑
- Volta(compute capability 7.0) 이상에서 클라이언트마다 독립된 GPU 주소 공간 보유 → 기본적인 메모리 침범 방지
- Volta 이상은 클라이언트 최대 60개(CUDA 13.0 이하는 48개), 이전 세대(pre-Volta)는 단일 주소 공간 공유에 최대 16개
CUDA_MPS_ACTIVE_THREAD_PERCENTAGE로 클라이언트가 쓸 SM 스레드 비율 상한 지정CUDA_MPS_PINNED_DEVICE_MEM_LIMIT로 클라이언트별 디바이스 메모리 할당 상한 지정
격리 한계
- 주소 공간은 분리되나 장애 격리는 없음 → 한 클라이언트의 치명적 GPU 오류가 공유 컨텍스트를 타고 전파
- 오류 전파 시 함께 돌던 클라이언트까지 종료될 수 있음 → 강한 격리가 필요하면 MPS로는 부족
- 메모리 상한은 소프트웨어 지정이지 물리 분리가 아님 → 하드웨어 격리는 MIG의 몫
MIG
MIG(Multi-Instance GPU)란 GPU를 SM과 메모리 단위로 잘라 각각을 독립된 GPU처럼 쓰게 하는 하드웨어 수준 분할
- 각 인스턴스가 전용 SM·메모리·L2 캐시 뱅크·메모리 컨트롤러·DRAM 버스를 가짐 → 경로가 물리적으로 분리됨
- 자원 경로가 분리되어 이웃 워크로드의 간섭 없이 예측 가능한 처리량·지연 확보
- 인스턴스 간 장애 격리 → 한 인스턴스의 오류가 다른 인스턴스로 번지지 않음
- Ampere 이상 일부 GPU만 지원(A100·A30·H100·H200·B200 등) → 모든 GPU에서 되는 기능이 아님
- A100·H100은 최대 7개 인스턴스, A30은 최대 4개로 분할 가능
- A100 40GB는 5GB짜리 메모리 슬라이스 8개와 SM 슬라이스 7개로 구성 → 컴퓨트 슬라이스가 7개라 인스턴스도 최대 7개
프로파일
프로파일은 컴퓨트 슬라이스 개수와 메모리 크기를 정해둔 분할 틀로, {컴퓨트}g.{메모리}gb 형식
| 프로파일 | 컴퓨트 슬라이스 | 메모리 | GPU당 최대 개수 |
|---|---|---|---|
| 1g.5gb | 1/7 | 5GB | 7 |
| 2g.10gb | 2/7 | 10GB | 3 |
| 3g.20gb | 3/7 | 20GB | 2 |
| 4g.20gb | 4/7 | 20GB | 1 |
| 7g.40gb | 7/7 | 40GB | 1 |
- 위 표는 A100 40GB 기준 → 80GB·H100·H200은 메모리 크기가 달라 프로파일 이름의 gb 값이 바뀜
- 프로파일 뒤
+me는 미디어 엔진 추가,+gfx는 그래픽 지원 추가 → 필요 엔진에 맞춰 선택 - 슬라이스는 고정 배치라 조합에 제약 → 아무 프로파일이나 자유롭게 섞이지는 않음
vGPU
vGPU(NVIDIA vGPU software)란 하이퍼바이저에 가상화 계층을 두어 VM마다 가상 GPU를 할당하는 방식
- 호스트(하이퍼바이저)에 vGPU 드라이버, 게스트 VM에 게스트 드라이버를 각각 설치
- vGPU의 framebuffer는 생성 시점에 물리 GPU에서 떼어 할당 → 파기 전까지 그 VM이 독점
- 별도 소프트웨어 라이선스 필요 → 단독 구독 또는 NVIDIA AI Enterprise 묶음으로 제공
- 기본은 time-sliced vGPU(대부분의 GPU 지원), MIG 지원 GPU에선 MIG-backed vGPU로 병렬 실행 가능
- VM 단위 GPU 공유가 목적 → VDI·가상 인프라에 맞고, 컨테이너 단위 분할과는 층위가 다름
4방식 비교
| 방식 | 분할 단위 | 메모리 격리 | 장애 격리 | 오버헤드 | 지원 하드웨어 | 적합 워크로드 |
|---|---|---|---|---|---|---|
| Time-slicing | 시간(순차 교대) | 없음 | 없음 | 컨텍스트 스위칭 비용 | 대부분의 NVIDIA GPU | 개발·테스트, 낮은 QoS |
| MPS | SM 공간 공유 | 부분(주소 공간 분리, 상한 지정) | 없음 | 낮음(동시 실행) | Volta 이상 권장 | 협력적 다중 프로세스, HPC |
| MIG | 물리 슬라이스(SM·메모리) | 있음(하드웨어 분리) | 있음 | 낮음(정적 분할) | Ampere 이상 일부 | 멀티테넌트, SLA 서빙 |
| vGPU | 가상 GPU(framebuffer) | 있음(framebuffer 고정) | VM 단위 | 하이퍼바이저 계층 | vGPU 지원 GPU + 라이선스 | VDI·가상 인프라 |
- 격리 강도는 MIG·vGPU가 높고, Time-slicing·MPS가 낮음
- 오버헤드 관점에서 MPS·MIG가 유리 → 동시 실행·정적 분할이라 교대 비용이 없음
- MPS와 MIG는 모두 병렬 실행이지만, MPS는 소프트웨어 공유이고 MIG는 하드웨어 분리
상황별 추천
| 상황 | 추천 | 추천 사유 |
|---|---|---|
| 개발·실험용 다중 컨테이너, 격리 불필요 | Time-slicing | 설정 간단, 추가 하드웨어 요건 없음 |
| 협력적 다중 프로세스·HPC MPI 랭크 | MPS | 프로세스 동시 실행으로 SM 점유율↑ |
| 멀티테넌트·SLA 보장 추론 서빙 | MIG | 하드웨어 격리로 성능 간섭 차단 |
| VM 단위로 GPU를 나누는 가상 인프라 | vGPU | 하이퍼바이저 통합, VM별 할당 |
| MIG 미지원 GPU에서 동시 추론 | MPS | 격리는 약하나 병렬 실행 확보 |
| 지연 민감 프로덕션인데 GPU가 Ampere 미만 | 단독 할당 | 강한 격리 수단이 없어 분할 지양 |
함정
분할이라는 단어가 같아도 격리 수준이 제각각이라 오해하기 쉬움.
- Time-slicing은 성능 보장이 아니라 나눠 쓰기일 뿐 → 시간으로 교대할 뿐 자원을 떼어주지 않음
- replica 수를 늘려도 총 연산량은 그대로 → 동시 부하가 높으면 각자 처리량이 깎임
- Time-slicing엔 메모리·장애 격리가 없음 → 한 워크로드의 OOM·오류가 이웃으로 번짐
- MIG는 모든 GPU에서 되는 기능이 아님 → Ampere 이상 일부만 지원, V100·T4·소비자 GPU는 불가
- Ampere에선 MIG를 켤 때 GPU 리셋이 필요하고(Hopper부터는 불필요) 프로파일 배치가 고정 → 실행 중 자유로운 재분할이 아님
- MPS의 주소 공간 분리를 완전 격리로 착각하기 쉬움 → 장애는 공유 컨텍스트로 전파되므로 격리가 목적이면 MIG
결론
- 격리가 필요 없으면 Time-slicing, 점유율만 올리려면 MPS, 진짜 격리가 필요하면 MIG
- MIG는 Ampere 이상 일부 GPU 전용 → 하드웨어부터 확인하고 설계할 것
- Time-slicing은 "시간을 번갈아 쓰기", MPS는 "SM을 함께 쓰기", MIG는 "GPU를 잘라 나누기"