콘텐츠로 이동

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를 잘라 나누기"