/ GPGPU

GPU Virtualization

Comments

CPU처럼 GPU도 virtualization (가상화) 가 가능하다!!

간단하게 virtualization 이 뭔지 설명하자면 사용자에게 하드웨어가 있다고 뻥치는 것이라고 할 수 있겠다.
예를 들면, 컴퓨터가 지금 CPU가 1개 있는데 사용자 A에게도 CPU 1개 있다고 하고, 사용자 B에게도 CPU 1개 있다고 해서, 총 2가지의 일을 받은 후 시간을 쪼개서 실행해 주는 것이다.
1개의 CPU를 가지고도 10개가지고 있다고 뻥칠 수도 있다.

GPU도 이런 것이 가능하다.
내가 GPU가 없지만 있는 척해서 그래픽스 연산 또는 CUDA 코드를 돌리는 것이다.

그 여러가지 방법들을 정리하자면 다음과 같다.

  • Direct pass-through: VM에 직접 GPU를 연결. 하나의 GPU가 하나의 VM에 dedicated 되기 때문에 여러 명의 사용자가 동시 사용이 불가능. VMware 에서는 virtual Direct Graphics Accelerator (vDGA) 이라고 지칭
  • Mediated pass-through: passes through performance-critical operation, while mediating privileged operations on the device
  • Partitioning: 하나의 GPU를 여러 개의 virtual GPU로 분할해서 각 VM에 할당
  • Timesharing: 여러 개의 VM이 하나의 GPU를 시간을 나눠서 공유함. oversubscription 또는 multiplexing 이라고도 함. CPU에서 이미 많이 쓰이는 개념
  • Live Migration: 실행중인 VM을 다른 host로 이동

현재 GPU 제조사들의 가상화 지원 상황

주요 GPU 하드웨어 회사들인 Intel, NVIDIA, AMD 의 현재 지원 상황을 정리해보면 아래와 같다.
Intel 이나 NVIDIA가 역시 AMD 보다는... 훨씬 앞서가고 있는 실정이다.

Intel GVT

  • 4세대 Intel Core processor부터 지원 시작
  • Mediated pass-through 방식으로 full virtualization 구현 (native 성능과 비교하여 최대 95% 수준). 하이퍼바이저의 gVirt Stub 에서 guest access들을 trap 또는 pass-through 함. Trap된 access들은 mediator로 전달되어 mediator가 hypercall 수행.
  • Graphics 연산과 OpenCL 지원
  • Xen 과 KVM 에서 사용 가능 (a.k.a XenGT, KVMGT)
  • Open Source

NVIDIA GRID vGPU

  • GRID 전용 보드(GRID K1, GRID K2, TESLA M6, 또는 TESLA M60) 필요
  • GRID 전용 보드에 MMU와 per-VM input buffer 하드웨어를 추가하고, 소프트웨어로 구현 (CUDA core 는 share 하고 Frame buffer 는 dedicated.)
  • 관리자가 직접 각 VM에 자원을 할당 (4가지 spec중 선택하여 할당)
  • 최대 16명의 사용자가 공유 사용 가능
  • Graphics 연산, OpenCL 과 CUDA 지원
  • Citrix Xen, Microsoft RemoteFX, 와 VMware Horizon View 에서 사용 가능

AMD Multiuser GPU (일해라 암드...)

  • 현재 개발 중
  • 하드웨어 기반의 GPU 가상화
VM software 들의 CUDA 지원 상황

대부분의 VM software 들은 pass-through 기법을 통해 CUDA를 지원하고 있다. 현재 VMware와 Cirtrix 에서 NVIDIA GRID vGPU 이용하여 partitioning 과 timesharing 가능하나, sharing 상태에서는 CUDA 사용이 불가능하고, Native와 비교한 성능 검증 필요하다.
2014년 기준 현재 VM 프로그램들의 상황은 아래와 같다.

2014년 기준 VM회사들의 지원 상황

이 외에도, rCUDA 라고 해서, 슈퍼컴퓨터와 같은 여러 노드의 컴퓨터에서 사용할 수 있는 GPU 가상 솔루션이 있다.