NVIDIA의 GPU 가상화 기술


NVIDIA는 GPU 자원을 원격으로 이용하는 인프라인 NVIDIA GRID를 진화시키고 있습니다. VDI(Virtual Desktop Infrastructure : 가상 데스크탑)은 서버에서 가상으로 실행한 데스크탑 환경에 원격 액세스해 마치 로컬에 있는 자원처럼 서버 자원을 사용할 수 있도록 합니다. 서버 쪽에 자원을 통합해 효율적으로 활용하고, TCO (Total Cost of Ownership) 절감, 데이터 보안 등을 실현하기 쉽다는 장점이 있습니다.

 

VDI 자체는 이전부터 쓰였던 것이나 NVIDIA GRID는 CPU 뿐만 아니라 GPU를 가상화해 GPU 리소스를 공유할 수 있도록 합니다. GPU에서 여러 가상 머신을 실행시켜 GPU 가상화를 가능하게 하고, 서버의 GPU 1개를 여러 원격 사용자가 공유할 수 있게 합니다. CPU 에뮬레이션에서는 얻을 수 없는 그래픽 성능을 필요로 하는 애플리케이션도 그대로 VDI에서 사용할 수 있게 됩니다. 그래서 GRID는 가상 GPU인 vGPU를 실현할 수 있는 소프트웨어 인프라를 제공하고 있습니다. GRID는 현재 2세대 버전인 GRID 2.0이며, 맥스웰 아키텍쳐 기반으로 최대 8GB까지 메모리를 사용할 수 있습니다.

 

1.jpg

 


NVIDIA는 vGPU와 GPU의 패스 스루를 제공합니다.

 

2.jpg

 

3.jpg

 


싱글 GPU는 8GB 메모리에 16명의 사용자, 듀얼 GPU는 16GB 메모리에 32명의 사용자를 지원.


NVIDIA는 GRID 2.0 데모에서 유체(Fluid) 시뮬레이션을 사용한 데모를 공개했습니다. 이 데모에선 서버 쪽에서 실행하는 CUDA 시뮬레이션과 그 결과인 그래픽을 모두 클라이언트 측에서 로컬로 실행하는 것처럼 처리할 수​​ 있었습니다. 그러나 이 데모는 사실 약간의 꼼수가 있었습니다. 유체 시뮬레이션 데모는 1개의 서버 측 GPU를 한명의 사용자가 점유했으며, GRID의 특징인 GPU 자원의 공유화는 사실 이루어지지 않았습니다.

 

 

한정된 지금의 GRID 2.0에서 GPU 컴퓨팅


사실 현재 GRID 2.0 CUDA를 사용할 수 있는 프로파일은 제한돼 있습니다. 8GB 프로필, 즉 GPU 1개를 하나의 가상 머신이 전부 점유하는 프로파일에서만 CUDA를 이용할 수 있습니다. 즉, 다른 가상 머신의 자원 충돌이 발생하지 않는 프로파일에서만 GPU 컴퓨팅이 허용됩니다.

 

현재 GRID에는 여러 vGPU 프로파일이 있으며, 사용자에게 할당되는 비디오 메모리 용량과 1 GPU당 지원되는 사용자 수에 따라 계층화됩니다. 512MB 메모리 프로파일이라면 최대 16명의 사용자 지원이 가능합니다. 8GB의 메모리를 16명의 사용자 분할하기 때문입니다. 그러나 8GB 메모리 프로파일은 당연히 한명의 사용자만 쓸 수 있습니다. 현재는 CUDA와 OpenCL을 사용한 GPU 컴퓨팅은 8GB 메모리에 단일 사용자 프로파일에 한정됩니다.

 

4.jpg

 


GRID 프로필 및 지원 기능의 관계


왜 GPU 컴퓨팅에서 GRID 가상화에 제약이 있는 것일까요. 그 이유는 간단합니다. 지금의 NVIDIA GPU가 태스크 선점을 지원하지 않기 때문입니다. 태스크 선점이란 실행중인 작업을 중단하고 다른 작업을 먼저 끝낸 후 다시 원래 작업을 불러오는 것인데 NVIDIA GPU에선 할 수 없습니다. 선형 컨텍스트 스위칭 하드웨어 지원 기능을 쓰기 때문입니다.

 

지금의 CPU라면 실행중인 작업의 컨텍스트를 프로세서 외부에 저장하고 다른 작업의 컨텍스트를 로드해 실행한 후 원래 작업의 컨텍스트를 프로세서에 복원해 실행을 재개하는 컨텍스트 스위칭이 가능합니다. 여기서 말하는 컨텍스트는 레지스터 내용이나 프로그램 카운터 값 등 프로세서의 내부 상태를 유지해야하는 값입니다. 컨텍스트 스위치는 OS가 작업을 자유롭게 예약할 수 있도록 인터럽트 처리까지 수행합니다.

 

가상화에서도 마찬가지로 가상 머신을 전환할 때 게스트 OS의 컨텍스트를 일단 저장하여 다른 게스트 OS의 컨텍스트를 로드할 필요가 있습니다. 원래의 게스트 OS로 다시 돌아갈 때는 스토어된 컨텍스트를 복원합니다. 유연한 가상 머신 전환은 선제 컨텍스트 스위칭이 필요합니다.

 

그러나 프리 엠프티브 컨텍스트 스위칭을 지원하지 않는 현재의 NVIDIA GPU는 원칙적으론 실행중인 작업이 끝날 때까지 다른 작업으로 전환할 수 없습니다. 따라서 가상 머신에서 실행하는 데 시간이 많이 걸리는 작업을 GPU가 실행하는 동안 다른 가상 머신으로 전환되지 않습니다. 장시간의 작업이 끝날 때까지 다른 가상 머신의 작업은 기다려야 합니다.

 

왜 GPU는 선제 컨텍스트 스위치의 지원이 늦어지고있는 것일까요. 그것은 GPU의 컨텍스트가 방대하기 때문입니다. GPU는 엄청난 양의 연산 프로세서 레지스터를 범용 레지스터로 옮기는 것만으로도 벅찹니다. 또한 GPU는 작업을 논리 벡터의 길이 단위인 warp로 분할하여 수행하며, 각 warp마다 프로그램 카운터와 분기의 프레디케이션을 위한 마스크 레지스터가 있습니다. GPU의 컨텍스트의 크기는 방대하기에 CPU처럼 쉽게 저장/복원할 수 없습니다. 따라서 NVIDIA는 컨텍스트 스위치를 지원하지 않았습니다. 또한 AMD (ATI) GPU에서도 최근까지 지원하지 않았습니다.

 

 

그래픽스 태스크에는 선점 처리가 필요


이러한 기술상의 이유로 현재 NVIDIA GRID는 여러 사용자의 가상 머신을 하나의 GPU에서 실행할 경우 제약이 발생합니다. 시간이 걸리는 작업을 실행하는 가상 머신을 우선 처리하면, 다른 사용자의 그래픽스 태스크 렌더링이 늦어질 가능성이  있습니다. CPU라면 컨텍스트 스위치로 전환할 수 있어 문제가 되지 않겠지만 GPU에서는 문제가 됩니다. 이것이 현재 NVIDIA GPU에서 CUDA 컴퓨팅을 사용하는 경우 여러 가상 머신에서 공유할 수 없는 이유입니다.

 

그런데 이 문제는 그래픽 애플리케이션만 사용할 경우엔 상관이 없습니다. 그래픽스 태스크에선 GPU가 선점 처리를 지원하지 않아도 여러 사용자가 가상​​ 머신에서 GPU를 원활하게 공유할 수 있습니다. 왜냐하면 그래픽으로 작업을 전환할 때 컨텍스트를 저장할 필요가 없기 때문입니다.

 

그래픽은 한 화면을 그린 후 해당 그래픽스 태스크 컨텍스트를 유지할 필요가 없습니다. 즉, 작업 화면 렌더링을 매우 작은 단위로 분리하고 있습니다. 그리고 그래픽스 태스크는 반드시 1 프레임의 렌더링 시간 안에 끝내야 하며, 일정한 프레임 속도를 유지하기 위해 작업 소요 시간도 짧습니다.

 

따라서 그래픽 스타스쿠의 경우 여러 작업을 전환하는 경우에도 컨텍스트를 저장할 필요가 없다. 하나의 그래픽 스타스쿠 화면 그리기가 끝나고 나서 다른 그래픽 스타스쿠을로드하면 좋다 때문이다. 저장 / 복원 컨텍스트 스위칭이 필요 없다. 컨텍스트를 저장하는 필요가 없다는 의미에서 "GPU는 컨텍스트 스위칭이 빠른"이라는 표현도하는 GPU 관계자까지있다.

 

5.jpg

 


그래픽 스타스쿠에서는 컨텍스트 저장 및 복원이 필요없는


그래픽 스타스쿠의 경우 제약 그리기 프레임 속도와 1 화면 그리기에 필요한 GPU의 처리 시간의 관계 만하다. 예를 들어, 60fps로 렌더링하는 경우 각 사용자의 작업 GPU의 처리 시간이 프레임 속도의 4 분의 1의 시간으로 끝난다면 4 명의 사용자가 GPU를 공유 할 수 60fps로 렌더링 할 수있게 됩니다. 따라서 그래픽스 태스크의 부하에 따라 프로파일을 사용하여 GPU를 공유하는 사용자 수를 조정하면 1 프레임의 주기에 맞습니다.

 

 

GPU 컴퓨팅 가상화에서는 선점이 필수적으로


그래픽스 태스크는 이처럼 짧은 처리이며 컨텍스트 저장 / 복원이 필요하지 않기 때문에, GPU는 컨텍스트 스위치를 하드웨어에서 지원할 필요가 없었습니다. 그러나 GPU 컴퓨팅 작업이라면 이야기가 다릅니다. GPU 컴퓨팅 작업에 따라 처리 시간이 크게 다릅니다. 하나의 커널이 끝없이 실행될 수도 있습니다.

 

따라서 GPU 컴퓨팅을 염두에 둔다면 GPU 가상화에서도 선제 컨텍스트 스위칭이 필요합니다. 그래픽처럼 처리 시간이 일정한 작업만 존재하는 것이 아니기에 처리 시간이 긴 가상 머신을 중단하고 다른 가상 머신을 로드 / 스토어하지 못하면 원활하게 가상 머신을 가동시킬 수가 없습니다.

 

6.jpg

 


위는 그래픽스 태스크 스위칭 아래가 GPU 컴퓨팅 작업의 스위칭 

이러한 제약 때문에 현재 NVIDIA GRID 2.0 CUDA 지원은 컨텍스트 스위치가 필요없는 프로필에 한정돼 있습니다. 가상화 공유하고 사용할 수있는 그래픽 스타스쿠는 정해져 있습니다. 이 것이 NVIDIA가 현재 GRID를 VDI (Virtual Desktop Infrastructure)의 진화형으로 보는 이유가 됩니다.

 

그러나 분산 컴퓨팅의 종착역은 컴퓨팅 파워를 원격으로 쉽게 쓸 수 있도록 하는 것입니다. GPU 컴퓨팅도 로컬 응용 프로그램을 사용하는 것처럼 쉽게 원격 리소스를 사용할 수 있도록 하는 것이 목표입니다. NVIDIA는 이 과제를 어떻게 해결할 수 있을까요?

 

 

2016년의 파스칼 세대에서 한층 더 진화하는 NVIDIA GRID


NVIDIA는 아주 가까운 장래에 이 문제를 해결합니다. 2016 년의 GPU에서는 선점 처리를 지원하기 때문입니다. "지금은 선점 처리를 지원하지 않지만, 파스칼에서 지원하는 커널을 실행하는 도중에 스위치가 가능하게 됩니다"고 NVIDIA의 Marc Hamilton(Solution Architecture & Engineering, VP, NVIDIA)는 2015년 9월의 GPU Technology Conference (GTC) Japan에서 설명한 바 있습니다.

 

7.jpg

 


NVIDIA의 Marc Hamilton(Solution Architecture & Engineering, VP, NVIDIA)

 

8.jpg

 

NVIDIA의 파스칼


2016년의 NVIDIA GPU 아키텍처인 파스칼에서 커널을 실행 도중에 중단하고, 컨텍스트를 저장하고 다른 커널을 로드한 후 다시 원래 커널 컨텍스트를 복원 할 수 있게 됩니다. 따라서 GRID도 파스칼 세대에서 다음 단계로 진화, CUDA를 자유롭게 사용할 수 있게 될 것으로 예측된​됩니다. 여러 사용자의 가상 머신이 1개의 파스칼 GPU에서 실행되도 각각의 가상 머신에서 CUDA를 실행시킬 수 있게 될 것입니다. 시간이 걸리는 CUDA 커널은 중간에 선점하여 전환이 가능하며, 다른 가상 머신에 영향을 미치지 않게 됩니다.

 

이 단계에선 시뮬레이션도 GPU 자원 활용을 자유롭게 할 수 있게 되면서 GRID의 이용 수준이 더욱 높아집니다. 상위 사용자들도 GRID를 쉽게 쓰게 됩니다.

 

9.jpg

 

10.jpg

 

NVIDIA 보는 GPU 가상화 시장


따라서 NVIDIA의 GRID는 지속적으로 진화하고 있으며 GRID 2.0 마이그레이션 전망도 가시권에 들어왔습니다. GPU 하드웨어의 진화와 함께 GPU의 가상화도 진화해 나갑니다. GPU 가상화의 궁극적인 목표는 CPU와 같은 사용성을 실현하는 것이라고 볼 수 있습니다.

 

GRID의 다음 단계는 GPU의 큰 난관인 멀티 GPU의 가상화입니다. 현재의 GPU는 CPU처럼 가상화에서 여러 칩을 하나의 자원으로 취급할 수 없습니다. 물론 분산 프레임 워크를 사용하면 멀티 GPU를 사용할 수 있지만, 응용 프로그램을 그대로 가상화 된 멀티 GPU에 가지고 갈 수 없습니다. 이것도 NVIDIA는 NVLink 같은 게획을 통해 앞으로 지원할 가능성이 있습니다.

 

어쨌든 분명한 것은 NVIDIA가 GPU의 가상화를 중시하고 있으며, 로드맵을 혁신해 나갈 생각이란 것입니다. GRID 3.0 이상이면 GPU를 컴퓨팅 리소스를 공유할 수있게 한 걸음 더 나아갈 것입니다.

기글하드웨어(http://gigglehd.com/zbxe)에 올라온 모든 뉴스와 정보 글은 다른 곳으로 퍼가실 때 작성자의 허락을 받아야 합니다. 번역한 뉴스와 정보 글을 작성자 동의 없이 무단 전재와 무단 수정하는 행위를 금지합니다.