컨테이너 환경에서 선점형 GPU 메모리 스케줄러의 설계 및 구현
Design and Implementation of a Preemptive GPU Memory Scheduler in Container Environments
- 주제(키워드) GPU , 선점 , 스케줄러 , GPU 메모리 , 컨테이너 , 오버헤드 , GPU 가상화 , GPU , preemption , scheduler , GPU memory , container , overhead , GPU virtualization
- 발행기관 서강대학교 일반대학원
- 지도교수 박성용
- 발행년도 2019
- 학위수여년월 2019. 8
- 학위명 석사
- 학과 및 전공 일반대학원 컴퓨터공학과
- 실제URI http://www.dcollection.net/handler/sogang/000000064565
- UCI I804:11029-000000064565
- 본문언어 한국어
- 저작권 서강대학교 논문은 저작권보호를 받습니다.
초록/요약
최근 GPU 기술의 발전으로 다양한 분야의 연산에 GPU가 사용되고 있다. 그러나 GPU는 비싼 자원이므로, 그 사용률을 높이기 위해 워크로드 간에 GPU를 공유하기 시작하였다. GPU를 공유하는 환경에서는 선점이 필요한 경우가 발생하는데, 기존에는 GPU 메모리를 선점하는 것이 불가능했다. 이에 기존 연구나 상용 프로그램들은 GPU를 아예 선점할 수 없거나, GPU 메모리를 선점하지 못하고 연산만을 선점하거나, 기존 작업을 강제로 종료하여 선점하는 방식을 사용하였다. GPU 메모리를 선점하지 못하면 가용 메모리가 부족한 경우 GPU를 선점할 수 없으며, 기존 작업의 강제종료는 기존의 작업 내용의 손실을 유발하므로 오버헤드가 매우 크다. 상위 라이브러리를 수정하여 선점을 구현한 연구가 있지만, 이는 해당 라이브러리에 의존성을 갖기 때문에, 그 외의 작업은 실행할 수 없다는 단점을 갖는다. 이러한 문제를 개선하기 위해 본 논문에서는 플랫폼에 종속되지 않고, GPU 컨텍스트 전환 기능을 제공하며, 컨텍스트 전환 시 기존 작업 내용이 손실되지 않는 GPU 선점형 스케줄러인 GPUpres를 제안한다. GPUpres는 사용자 프로그램의 GPU 관련 API 호출을 가로채고 메모리 주소 변환 등을 수행하여 사용자 프로그램의 수정 없이 GPU 메모리 선점을 포함한 GPU 선점을 가능하도록 하였다. NVIDIA GPU 컨테이너 환경에서 NVIDIA CUDA Runtime API를 대상으로 프로토타입을 구현하여, GPU 선점이 가능함을 보였고, 실험을 통해 메모리 복사 오버헤드를 분석하고, 오버헤드가 호출 당 약 1us 내외, 스케줄러와의 통신을 포함하는 경우 약 19us 이며, 실제 워크로드에서는 약 8.38%의 오버헤드가 발생함을 확인하였다.
more초록/요약
With the advances of GPU technology, GPU is being used in variety of computing areas. Since GPU is an expensive resource, it is shared among multiple workloads to increase its utilization. In shared GPU environment, preemption may be necessary, but GPU memory preemption is not possible. Therefore, existing researches and programs do not support GPU preemption, or just support kill-based GPU preemption. Overhead of kill-based GPU preemption is high, because it loses data and status of previous works. Although there is a study that have implemented GPU preemption by modifying deep learning library, it has platform dependency, and cannot execute other tasks. To solve these problems, this paper proposes preemptive GPU memory scheduler, GPUpres, which does not have platform dependency, provides GPU context switching, and does not lose data of existing workloads when preempt the GPU memory. GPUpres intercepts GPU API calls from the user program and translates GPU memory addresses to support GPU preemption including GPU memory preemption without any modification of user program. The prototype of GPUpres is implemented for NVIDIA CUDA Runtime API in NVIDIA GPU container environment. The experiment shows that the overhead of GPUpres is about 1us per API call, and is about 19us when it includes communication with scheduler. Also, the overhead of GPUpres in real workload environments is about 8.38%.
more

