0 Abstract
Machine learning inference는 intractive 웹 어플리케이션의 핵심 building block이 되고 있다. 그 결과 기저에 모델이 서비스되는 시스템은 낮은 latency를 유지하는 것을 목표로 해야한다. 기존의 모델을 제공하는 아키텍처는 잘 알려진 reactive 기술을 사용하여 일반적인 경우의 latency 원인을 완화하지만 예측할 수 없는 execution time으로 인한 tail latency를 효과적으로 줄일 수는 없다. 그러나 기본 execution time은 근본적으로 예측할 수 없는 것이 아니며, 논문에서는 DNN(Deep Neural Network) 모델을 사용한 inference(추론)이 deterministic performance를 갖는다는 것을 관찰했다.
Individual DNN inference의 예측 가능한 execution time에서부터 예측 가능한 end-to-end performance를 얻을 수 있는 fully distributed model serving system을 연속적으로(successively: 글 전개상 '성공적으로'를 표현하고 싶었던 것이 아니였을까 추측..) 구축하기 위한 원칙적인 설계 방법을 도입하였다. Production trace workloads를 사용하여 구현한 Clockwork를 평가하고 Clockwork가 수천 개의 모델을 지원하는 동시에 99.9999%의 request에 대해 100ms latency를 충족할 수 있음을 보여준다. 또한 Clockwork가 예측 가능한 execution time을 활용하여 tight request-level SLOs(service-level objectives)와 high degree of request-level performance isolation를 달성한다는 것을 보여준다.
1 Introduction
머신러닝의 확산으로 model inference는 이제 일반화되었으며 웹 request의 critical path에 점점 더 많이 자리잡고 있다[29,71]. Inference request는 다양한 pre-trained ML 모델(including personalized models and experimental A/B test)의 score를 지원하는 역할을 하는 underlying model serving services[16, 26, 51, 58]에서 처리되며, low latency, high throughput, low cost를 지향한다. 이는 대규모 시스템에서는 달성하기 어려운 목표이다. Facebook에서만 매일 200조 이상의 inference request를 처리한다[48]. 또한, 최소 100개 회사가 accelerated ML inference[48]를 위한 하드웨어 칩을 만들고 있으며, 이는 inference request의 처리가 산업에서 매우 중요하다는 것을 시사한다.
그러나 심각한 소프트웨어 병목 현상은 고성능 모델 제공을 위한 GPU와 같은 하드웨어 가속기의 효율적인 활용을 방해한다. Model serving system를 통과하며 처리되는 inference request를 고려해보자. Request에는 answer가 end-user에게 유효한 값을 가지는 고유의 기한(inherent deadline)이 있으므로, 시스템은 request의 latency를 제한하거나 low tail latency를 지속적으로 달성하기 위한 SLO를 제공할 방법을 찾아야한다. Latency가 짧은 시스템을 구축하기 위한 일반적인 접근 방식은 over-provisioning을 통해 리소스를 기다리는 potential wait time을 줄이는 것이다. 사용 가능한 resource pool이 클수록 pending reuqest를 즉시 스케줄링 할 수 있는 리소스를 찾을 가능성이 높기 때문에 over-provisioning을 적용한다. 그러나 resource provisioning이 증가하면 efficiency와 utilization이 저하된다.
기존 시스템은 기본적으로 시스템 구성요소가 unpredictable latency performance를 가지고 있다고 가정한다[16,58]. 게다가, fair queuing과 같은 이러한 variability를 허용하기 위해 사용된 best-effort 기술은 추후 다른 시스템 구성요소에 unpredictability를 추가로 cascade(중첩)하고 tail latency를 상위 계층으로 전파하게 된다. Model serving system의 몇가지 performance volatility(변동성)은 bursty 또는 skwed workload와 같은 외부 요인으로 인한 것이지만, execution time의 variability 중 상당수는 conditional branching 동작에 대한 캐싱 결정에서부터 다른 프로세스, OS 그리고 하이퍼바이저의 concurrency에 이르기까지 서비스 내부의 설계로 인해 발생한다. 그러므로 논문에서는 internal unpredictability를 다루는 것을 목표로 한다.
이 논문에서는 predictable performance로 모델을 제공하기 위한 분산 시스템인 Clockwork의 설계 및 구현을 제시한다. ubiquitous DNN 아키텍처에 중점을 두고 먼저 DNN inference가 GPU에서 predictable execution time을 갖는 수학 연산의 deterministic sequence라는 것을 먼저 보여준다. Responsive model serving system 설계 시 이러한 관찰을 활용하기 위해, 논문의 접근법은 선택 사항을 통합하여(consolidating choice) 가능한 predictability를 유지하는 것이다. 즉, reactive(반응형, 사후 대응) 및 best-effort 메커니즘을 피하고 모든 resource consumption과 scheduling decision을 중앙 집중화한다. Clockwork는 request가 latency SLO를 충족할 수 있다고 확신하는 경우에만 inference request를 실행한다. 이러한 proactive scheduling을 지원하기 위해 Clockwork는 각각 하나 이상의 GPU를 처리하는 worker와 request를 scheduling하는 centralized controller로 구성된다. 각 Clockwork worker는 GPU에서 exclusive model의 loading and inference execution을 담당하며 predictable performance를 얻는다. Worker가 외부 요인으로 인해 특정 스케쥴링을 실행할 수 없으면, request는 즉시 중단되고 worker는 지정된 시간(specific time)에 다음 request의 execution을 재개한다. Clockwork controller는 각 worker의 리소스를 관리하고 model placement 및 replication과 같은 worker의 operation에 대한 minimal advance schedule을 유지한다.
C++로 Clockwork를 구현했으며 production workload trace에서 DNN model을 사용하여 이를 평가했다. Clipper [16] 와 INFaaS [58] 같은 두 가지 기존 model serving system과 비교하면 Clockwork는 latency 목표를 더 효과적으로 충족하면서 더 나은 goodput을 제공하였다. Clockwork는 서로 다른 모델 간에 리소스를 보다 효과적으로 공유하고 worker 당 수천 개의 모델을 확장한다. Unpredictable, bursty, cold-start client로 구성된 현실적인 워크로드에서도 Clockwork는 100ms 미만의 low-latnecy response time을 일관되게 충족하였다.
Main contributions:
• Predictability가 predictable model serving system을 구축하기 위해 활용될 수 있는 DNN inference의 기본 특성임을 보여준다.
• Consolidating choice라는 시스템 설계 방식을 제안하고, 이는 더 큰 시스템에서 predictable performance를 가진 구성요소로 구성된 더 큰 시스템에서 predictable responsiveness를 유지하기 위함이다.
• DNN inference의 tail latency를 bottom up으로 완화하는 분산 모델 서비스 시스템인 Clockwork의 설계 및 구현을 제안한다.
• 시스템이 GPU당 수천 개의 모델을 동시에 지원하고 latency가 짧은 SLO를 충족하는 동안에도 tail latency를 상당히 완화한다는 것을 보여주기 위해 Clockwork에 대한 실험적 평가를 보여준다. Clockwork는 overload(과부하), unpredictable, bursty workload, 많은 contending(경합) user가 있는 경우에도 이상적인 goodput에 가까운 결과를 얻을 수 있다.
2 Background and Motivation
The state of machine learning.
Computer vision[28, 78], ad-targeting[3, 17], virtual assistants[13, 64]에 등의 ML에 의해 구동되는 어플리케이션의 급격한 증가는 ML training과 inference를 더 빠르게 하는 것에 지대한 관심을 갖게 했다. 이러한 노력은 underlying ML model, hardware accelerators, software infrastructure를 대상으로 이루어진다. ML modeling의 여러 접근 방식 가운데 가장 중요한 것은 non-linear convolution and pooling operation을 통해 조정된(tuned) artificial neuron의 multiple layer로 구성된 deep neural network(DNN)이다 [25].
ASIC, FPGA chip, Google TPU[41], Facebook Big Basin[29] chip과 같은 ML training and inference[48]를 위해 수많은 특수 하드웨어가 개발 및 배포되고 있다. 그러나 데이터 센터에서 지배적인 ML 하드웨어는 2020년 [5] 세계 시장의 1/3을 차지하는 GPU이며 이 연구의 초점이 되는 하드웨어이다.
새로운 DNN 애플리케이션과 하드웨어 가속기 사이에 끼어 있는 ML 소프트웨어 프레임워크 에코시스템이 번성하고 있습니다. 그림 1은 오늘날 ML 소프트웨어 스택에서 몇 가지 두드러진 프로젝트를 보여줍니다. 복잡한 시스템과 경쟁 환경의 계층화된 프로토콜 스택은 모래시계 모양의 아키텍처로 진화하는 경향이 있습니다[4]. 우리는 상위 수준 ML 모델 개발과 하위 수준 소프트웨어 및 하드웨어 문제 사이의 인터페이스 역할을 하는 ML 스택의 "협폭"으로 부상하는 DNN[49, 52]에 대한 ONNX 및 NNEF 그래프 교환 형식을 목격하고 있습니다.
3 Predictable Performance
원칙적 설계를 통해 반응형 시스템을 구축하기 위해 성능 변동성을 유발하거나 증폭할 수 있는 요인을 추가로 연구합니다. 중요한 것은 최신 시스템 스택의 모든 수준에 있는 구성 요소가 애플리케이션 계층, 운영 체제 또는 하드웨어에 관계없이 다양한 요청 대기 시간에 기여할 수 있다는 것입니다[46]. 네트워크 효과와 워크로드 변동은 분산 시스템에 예측할 수 없는 두 가지 원인을 더 추가합니다.
The whole is more than the sum of its parts.
전체 시스템 성능 변동성은 주로 시스템이 구성 구성 요소에서 조립되는 방식에 따라 결정됩니다. 여러 가지 방법으로 소프트웨어 구성 요소의 가변 대기 시간을 처리할 수 있습니다. 첫째, 문제를 무시하고 변동성이 이후 요청으로 전파되거나 시스템의 다른 구성 요소로 침투하도록 허용할 수 있습니다. 처리량이나 평균 지연 시간을 개선하도록 최적화된 성능을 중시하는 코드라도 꼬리 지연 시간을 수정하지 못합니다[19]. 데이터 분석 프레임워크[7, 56]에서 "낙오자" 문제로 알려진 이러한 예측 불가능성의 전염성의 예는 작업자가 비정상적으로 오래 걸리는 요청을 실행하고 그 동안 작업자가 대기열에 넣은 다른 요청을 실행할 때입니다. 예상치 못한 대기 시간으로 인해 추가 지연이 발생합니다. 가변성을 무시하면 요청 처리기 자체에 가변 대기 시간이 있는 경우와 같이 시스템 전체에서 문제가 더욱 복잡해질 수 있습니다[69].
둘째, 모든 요청이 최악의 대기 시간과 일치하도록 하여 변동성을 완화할 수 있습니다. 따라서 예측 가능성을 위해 더 낮은 리소스 사용률을 교환합니다. 최악의 대기 시간이 중앙값보다 훨씬 높을 때 종종 엄청난 대가를 치르게 됩니다.
셋째, 활용도를 낮추기 위해 더 많은 자원을 소비함으로써 변동성을 최소화할 수 있습니다. 예를 들어 일부 네트워크 시스템은 동일한 작업을 여러 작업자에게 병렬로 제출한 다음 가장 빠른 작업자로부터 결과를 성공적으로 수신하면 불필요한 작업을 취소하도록 설계되었습니다 [18].
넷째, 비정상적인 지연을 감지하면 피드백 메커니즘에 통지하여 향후 요청에 대한 영향을 낮추도록 환경을 조정할 수 있습니다. 이러한 "최선의 노력" 방법은 일반적으로 반응적이며 일시적으로 더 많은 리소스를 추가(자동 크기 조정[23]), 요청 제한 또는 로드 균형 조정과 같은 장기적인 효과를 목표로 합니다.