멀티 테넌시 환경에서 single GPU를 다양한 테넌트(task)가 나눠서 사용하는 경우는 아래와 같이 GPU 공간 자체를 여러 태스크가 나눠서 사용하는 Spatial Sharing 경우와, 한번에 하나의 태스크만 실행되지만 시간 분할하여 여러 태스크를 실행하는 Temporal Sharing 방식으로 나눌 수 있다.
1. Spatial Sharing
말 그대로 하나의 GPU의 '공간'을 분할하여 다양한 task가 실행될 수 있게끔 하는 방법이다.
spatial isolation을 구현하기 위해 NVIDIA에서는 MPS와 MIG라는 방법을 도입하였다.
- Multi-Process Service(MPS)는 소프트웨어적으로 GPU안에서 여러 태스크가 동시에 실행될 수 있게끔 하는데, 메모리 격리는 지원하지 않아 멀티테넌트환경에서는 부적절하고, 같은 UID를 가진 태스크들이나 cooperative한 태스크들이 동시에 실행되기를 원할 때 사용하면 좋다.
- Multi-Instance GPU(MIG)는 하드웨어적으로 공간을 나누고 메모리 격리도 지원한다(아마??) 아무튼 그래서 멀티테넌트에 적합하다
spatial sharing 중 task의 요청을 즉각적으로 반영하여 동적으로 자원을 할당해주는 경우는 Dynamic fine-grained allocation이라고 한다. 이를 만족하기 위해서는 태스크의 자원 요청을 지속적으로 모니터링해야한다.
이 방법은 자원을 태스크에게 실제로 필요한 물리적 자원보다 '가상 자원'을 더 할당해주는 방법이다. 이건 항상 모든 태스크가 peak를 찍지않을 거란 가정을 바탕으로 한다. OS에서의 메모리 virtual address space의 크기가 physical address space의 크기보다 더 크다는 것과 같은 개념이다.
2. Temporal sharing
temporal sharing 중 preemption과 migration 개념을 도입한 방법이다.
GPU를 가상하여 각 태넌시, VM이 자기가 자신만의 GPU를 쓴다고 인식하게끔 하는 방법이다.