동일한 클러스터에서 33% 포인트 더 높은 활용률 달성: 달라진 것은 할당 결정의 순서
요약
본 글은 제약 조건 인식 GPU 할당기(constraint-aware GPU allocator)를 개발하고 FIFO 스케줄러와 비교한 연구 결과를 다룹니다. 동일 하드웨어에서 할당 결정의 순서만 변경해도 GPU 활용률을 최대 33%까지 높일 수 있음을 보여줍니다. 특히, 실시간 추론과 배치 작업이 자원을 두고 경쟁하는 상황에서의 효율적인 스케줄링 중요성을 강조합니다.
핵심 포인트
- 할당 결정 순서 최적화가 GPU 활용률에 큰 영향을 미친다.
- 제약 조건 인식 할당기는 FIFO 대비 높은 성능을 보인다.
- 실시간 추론과 배치 작업의 자원 경쟁 관리가 핵심 과제이다.
- 자원의 비효율적인 예약(reservation)이 주요 병목 지점이다.
우리는 제약 조건 인식 GPU 할당기(constraint-aware GPU allocator)를 구축하고, 이를 FIFO 스케줄러와 일곱 가지 벤치마크 시나리오에 걸쳐 비교했습니다. 동일한 하드웨어에서 동일한 워크로드를 실행했을 때, GPU 활용률은 최대 33% 포인트까지 상승했으며, 우선순위 가중 출력(priority-weighted output) 역시 모든 시나리오에서 최대 105%까지 증가했습니다. 하드웨어에는 아무것도 변하지 않았습니다. 달라진 것은 할당 결정이 이루어지는 순서였습니다.
숫자가 시작되기 전에 측정에 관해 한 가지 참고 사항을 말씀드립니다. 아래의 모든 이득은 동일한 시나리오에서 FIFO 결과 대비 개선된 수치로 표현됩니다. 활용률은 퍼센트 포인트(percentage points)로 보고되며, 값은 우선순위 가중 출력의 백분율 증가로 보고됩니다.
'GPU를 바쁘게 유지하는 것'은 시스템이 수행할 수 있는 결정이 아닙니다. 그 결정은 더 좁고 훨씬 어렵습니다: 어떤 GPU가 어느 작업을, 어느 시간 단계에, 어떤 우선순위로 실행할지입니다. 형식적으로 이는 GPU, 작업(job), 시간 단계의 모든 조합에 대한 하나의 이진 선택이며, 출력은 그리드(grid)입니다—전체 스케줄링 기간 동안 각 GPU 셀마다 작업 이름이 있거나 아무것도 없는 상태입니다.
네 가지 워크로드 유형이 이 그리드를 두고 경쟁합니다: 학습(training), 실시간 추론(real-time inference), 배치 추론(batch inference), 그리고 양자화(quantization)입니다. 이들은 두 가지 할당 형태(allocation shapes)로 나뉘며, 그 분할 지점에서 어려움이 발생합니다. 학습, 배치 추론 및 양자화는 배치형(batch-like)입니다: 일단 시작되면 각 작업은 중단 없이 완료될 때까지 연속적인 GPU 블록을 필요로 합니다. 실시간 추론은 정반대입니다: 탄력적이며, 매 시간 단계마다 변하는 수요 곡선에 의해 구동되며, 트래픽에 따라 증가하고 축소됩니다.
같은 시간 단계에서 동일한 하드웨어 자원을 두고 경쟁하는 두 가지 비호환적인 형태가 핵심 문제입니다. 단일 유형 내부에 또 다른 이질성(heterogeneity)이 존재합니다: 동일한 기본 모델이라도 학습 작업은 몇 시간에서 며칠까지 다양하며, GPU 하나부터 수십 개에 이르기까지 다양합니다.
전반적인 비교 기준점은 FIFO 기반 스케줄러입니다: 실시간 추론은 고정 예약(fixed reservation)을 통해 서비스되고, 다른 모든 작업들은 우선순위를 고려하지 않고 도착 순서대로 배치됩니다.
적절한 조건 하에서는 그것이 합리적인 정책입니다. 클러스터에 여유 공간(slack)이 있을 때는 할당 순서가 활용률 측면에서 아무 비용도 발생하지 않습니다. 모든 것이 순서와 관계없이 들어맞기 때문에, FIFO든 더 정교한 방식이든 풀(pool)의 같은 비율을 채웁니다. 경쟁(Contention) 상황이 바로 그 순서 결정 비용이 눈에 보이지 않다가 용량 자체를 소모하기 시작하는 지점입니다. 이때는 두 가지 방식으로 비용이 발생하며, 이들은 하나씩 취할 가치가 있습니다.
예약 (The reservation). 실시간 추론(Real-time inference)은 용량을 기다릴 수 없습니다. GPU는 트래픽이 필요할 때 즉시 준비되어야 합니다. 도착 순서대로 작업을 배치하는 스케줄러는 침체기(trough)에 GPU를 해제하고 다음 피크 전에 회수하는 메커니즘이 없으므로, 가용성을 보장하는 유일한 방법은 각 실시간 애플리케이션의 일일 최대 수요를 파악하여 그만큼의 GPU를 하루 종일 예약하는 것입니다. 이 비용은 피크 시간이 아닌 모든 시간에 발생합니다. 정오에 6개의 GPU가 필요하고 새벽 4시에 2개가 필요한 애플리케이션은 6개를 24시간 동안 모두 점유하며, 비어있는 4개의 GPU는 그날 하루 동안 어떤 배치 작업(batch job)에도 사용될 수 없습니다. 이들은 사용되고 있는 것도 아니고, 자유로운 상태도 아닙니다. 이것이 바로 예약 방식이 지배적인 두 시나리오에서 기준선(baseline)이 클러스터의 절반 근처에 위치하는 이유입니다: 혼합 제어군(mixed control)에서는 51.6%, 학습 중심(training-heavy) 케이스에서는 53.6%입니다. 즉, 풀의 거의 절반이 사용 가능한 상태라기보다는 예약된 상태인 것입니다. 이 비용은 클러스터에 경쟁이 발생하든 안 하든 지불되며—경쟁 상황일 때만 그 비용이 눈에 띄게 됩니다.
순서 결정 (The ordering). 실제 경쟁 상황에서는 어떤 작업이 들어맞을지는 단순히 얼마나 많은 용량이 존재하는지에 의해서가 아니라, 작업을 배치하는 순서에 따라 달라집니다. 순서는 용량 문제가 해결된 후에 적용되는 타이브레이커(tiebreaker)가 아닙니다. 순서 자체가 용량 결정입니다. FIFO는 도착할 때마다 각 작업을 배치하며, 그 작업이 얼마나 가치가 있는지 따져보지 않고, 지평선 내에 무엇을 더 배치해야 하는지 확인하지 않습니다. 따라서 높은 우선순위의 작업은 먼저 요청한 어떤 것 뒤에 대기하게 되고, 용량은 나중에 들어오는 작업들이 사용할 수 없는 배치를 통해 소모됩니다.
두 가지 복합적인 문제입니다. 하루 최대 실시간 수요를 위해 확보된 블록은 큐에 있는 모든 배치 작업에게는 매 시간마다 사용 불가능하며, 남은 용량은 요청이 도착한 순서대로 할당됩니다.
이는 항공사가 어떤 전세기를 먼저 호출했는지에 따라 비행기를 배정하고, 실제로는 수익성이 높은 노선을 운항할 것이 아무것도 남아있지 않은 것과 같습니다. 그리고 하루 종일 몇 시간 동안 지속되는 피크를 위해 예약된 GPU는 직전 내용에서 언급된 '좌초된 항공기'와 가장 문자 그대로의 의미가 같습니다: 대기 상태로, 아무것도 벌지 못하며, 다른 누구에게도 사용 불가능합니다.
[Figure: side-by-side allocation grids — allocator above, FIFO below, same scenario]
실제 경쟁을 위해 구축된 다섯 가지 벤치마크 시나리오를 거쳐, 이 할당기(allocator)는 두 축 모두에서 개선되었습니다. 활용률은 52–85% 범위에서 72–88% 범위로 상승했습니다. 우선순위 가중치 값은 24.6%에서 105.1% 사이로 증가했으며, 평균적으로 52%를 기록했습니다. 모든 시나리오에서 두 지표 모두 트레이드오프(tradeoff)가 설명될 필요 없이 개선되었습니다.
가장 강력한 단일 사례는 8개의 GPU에 대한 학습 중심 워크로드였습니다: 활용률은 53.6%에서 87.0%로 상승했고, 가치는 두 배 이상 증가하여 105%의 상승을 보였습니다. 이는 이미 감가상각되는 고정 자산 중 33 포인트만큼 회복된 것으로, 예약된 대기 용량을 재활용하고 나머지를 우선순위 순서대로 배치했기 때문입니다. (이 수치는 단일 기준선 순서를 반영합니다.)
할당기는 이 두 가지 행동을 모두 제거합니다. 실시간 수요는 상한선(ceiling)이라기보다는 곡선으로 취급되며, 매 타임스텝마다 수요에 맞춰 할당되고, 배치형 작업은 트로프(troughs)를 차지하며, 이는 실시간 작업이 연속적인 타임스텝 사이에 스왑할 수 있는 GPU 개수의 제한에 의해 경계 지어집니다. 그리고 배치형 작업들은 도착 순서가 아니라 전체 기간에 걸쳐 우선순위별로 배치됩니다. 이 글의 나머지 부분은 그 방법입니다.
활용률(Utilization)은 점유율을 측정합니다: 사용 가능한 GPU 시간 중 얼마만큼이 무언가에 할당되었는지를 나타냅니다. 이는 그 '무언가'가 무엇인지에 대한 정보는 담고 있지 않습니다. 한 시나리오는 이 두 가지를 완전히 분리하며, 그 간격은 놓치기 쉬운 방향으로 벌어집니다.
스케일 테스트에서 64개의 GPU에 걸친 30개 작업의 경우, FIFO와 할당기(allocator) 모두 각각 44.9%로 동일한 활용률과 30개 중 27개 작업 완료라는 동일한 처리량을 산출했습니다. 그러나 할당기는 15.9% 더 높은 우선순위 가중치 값을 제공했습니다. 모든 대시보드는 동일하게 보입니다. 하지만 클러스터가 생성하는 결과물은 실질적으로 다릅니다.
우선순위를 책정하지 않는 목표는 클러스터를 정확히 같은 수준으로 채울 수 있고, 정확히 같은 수의 작업을 완료할 수 있지만, 여전히 더 적은 가치를 제공합니다. 이전 글에서는 점유율(occupancy)이 클러스터가 수익을 창출하는지에 대한 좋은 지표가 아니라고 주장했습니다. 이것이 바로 그 주장을 측정으로 보여준 것입니다.
대안은 더 긴 휴리스틱 규칙 목록이 아닙니다. 일부 제약 조건은 전역적으로만 의미를 가지며, 어떤 지역적 규칙도 이를 표현할 수 없습니다: 연속적인 블록, 전체 기간에 걸쳐 허용 가능한 GPU 변경(churn) 예산, 실행 중인 작업이 절대 선점되지 않는다는 보장 등이 있습니다. 이러한 것들을 준수하려면 문제는 하나의 형태로 정의되어야 합니다.
법적 할당을 정의하는 다섯 가지 제약 조건이 있습니다:
- GPU는 시간 단계(timestep)당 최대 하나의 작업만 처리할 수 있습니다.
- 모든 작업은 요구 범위(demand range)를 존중하며, 이미 실행 중인 것은 상속되어 유지됩니다.
- 배치형 작업은 2의 거듭제곱 크기로 지정된 연속적인 GPU 블록을 차지합니다.
- 실시간 작업은 연속된 시간 단계 간에 스왑할 수 있는 GPU 개수에 하드캡이 있습니다.
- 시작된 작업은 중단될 수 없습니다.
목표 함수는 두 가지 항으로 구성됩니다. 배치형 작업에 GPU를 할당하는 것은 해당 우선순위에 시간 감쇠 가중치(time-decay weight)를 곱한 보상을 얻습니다. 실시간 요구 사항을 충족하지 못하면 부족분 크기에 비례하여 페널티가 부과됩니다.
이러한 가중치들의 상대적 크기가 전체 서비스 수준 정책을 하나의 숫자로 표현합니다. 실시간 페널티 가중치는 할당 가중치보다 5배에서 10배 더 큽니다. 따라서 충족되지 못한 실시간 수요 1단위는 동등 우선순위 배치 작업 5~10 GPU-타임스텝의 비용과 같습니다. 이러한 비대칭성은 의도적이며, 이는 지연 시간(latency) 관련 의무가 별도의 오토스케일러가 스케줄러와 동일한 GPU를 두고 경쟁하는 방식이 아니라, 배치 작업을 배치하는 것 안에서 강제된다는 것을 의미합니다.
또한 이것이 실시간 수요에 대한 탄력적인 처리를 안전하게 만드는 이유입니다. 할당자는 침체기(trough)에 GPU를 배치 작업에 할당할 수 있는데, 이는 나중에 실시간 수요를 충분히 처리하지 못했을 때의 비용이 그 배치 작업이 얻는 어떤 이익보다 훨씬 높게 책정되어 있기 때문입니다. 즉, 가용성을 보호하는 것은 정적인 예약이 아니라 페널티입니다.
시간 가중치는 온라인 시스템에서만 의미가 있는 이유로 지평선(horizon)을 따라 감소합니다. 다음 스케줄링 실행 시 새로운 작업들이 도착할 것이기 때문입니다. 지금 사용된 용량은 나중에 약속된 용량보다 더 가치가 높습니다.
공식 모델은 법적이고 잘 점수화된 할당이 어떤 모습인지를 정의합니다. 들어오는 요청에 응답하는 것은 별도의 작업이며, 별도의 구성 요소에 속합니다. 이것은 NP-hard 조합적 할당(combinatorial allocation)이며, 작업이 도착할 때마다 스케줄러가 재호출되므로, 결정은 두 API 요청 사이의 간격 내에서 돌아와야 합니다. 이 지연 시간 예산(latency budget)이 아키텍처가 설계된 고정 제약 조건이며, 이것이 바로 휴리스틱(heuristic)이 핫 패스(hot path)에 위치하고 공식 모델이 그 뒤에 배치되어 휴리스틱이 만족하도록 구축된 사양(specification) 역할을 하는 이유입니다.
그 휴리스틱은 일반적인 그리디 할당자가 아닙니다. 이 규칙 자체가 공식 모델의 구조적 제약 조건이며, 이는 그것이 생성하는 모든 격자(grid)가 설계상 법적 할당이라는 것을 의미합니다. 일반적으로는 유효하지 않습니다. 하지만 설계상으로는 유효합니다.
이러한 설계는 도착하는 작업을 하나씩 처리하는 것이 아니라 전체 시간 범위에 걸쳐 적용되므로 활용률 향상을 가져옵니다. 할당자는 어떤 작업을 배치하기 전에 모든 대기 중인 작업을 확인하며, 남아 있는 작업이 실제로 차지할 수 있는 형태의 여유 공간(free pool)을 유지할 수 있습니다. 특정 크기의 연속된 블록이 필요한 배치 작업이라도 차례가 되었을 때 자리가 있습니다. 우선순위는 누가 그 공간에 먼저 청구권을 가질지 결정합니다. FIFO 방식은 이러한 시야를 갖지 못합니다. 가장 먼저 요청한 작업에 용량을 할당하고, 나중에 도착하여 특정 형태의 공간이 필요한 작업은 맞는 것이 남아 있지 않아 스케줄링되지 못하며, 이로 인해 소비되었을 GPU-시간은 미사용 상태로 남게 됩니다.
이는 5가지 경쟁 시나리오에서 1~2밀리초(ms)가 소요되며, 64개의 GPU와 30개의 작업에서는 15밀리초가 소요되어 들어오는 모든 요청에 충분히 빠르게 실행할 수 있습니다.
이 시스템은 두 가지 모드를 노출합니다. Fast mode는 할당자만 실행하여 그 격자를 반환하며, 이것이 '핫 패스(hot path)'입니다. Full mode는 이 격자를 공식 모델의 시작점으로 사용하여 이를 개선하려고 시도하는데, 이는 요청별 결정보다는 주기적인 검토에 적합합니다.
| Scenario | Utilization | Value | Value gain | Latency |
|---|---|---|---|---|
| Mixed control (8 GPUs, 10 jobs) | 51.6% → 72.4% | 7,093 → 10,980 | +54.8% | 1 ms |
| ... | ||||
| Scale test (64 GPUs, 30 jobs) | 44.9% → 44.9% | 44,233 → 51,248 | +15.9% | 15 ms |
| Uniform priority (14 GPUs, 16 jobs) | 76.8% → 87.5% | 25,219 → 31,052 | +23.1% | 2 ms |
활용률은 모든 시나리오에서 개선되었으나, 하나는 정확히 동일했습니다. 가치(Value)는 일곱 가지 모두에서 개선되었습니다.
스케일 테스트가 중요한 이유는 크기가 유지되기 때문입니다: 64개의 GPU, 30개의 작업, 15밀리초, 15.9% 더 많은 가치를 보여줍니다.
균일 우선순위 테스트가 중요한 이유는 명백한 회의론적 해석을 다루기 때문입니다. 모든 작업을 동일한 우선순위로 재정의하여, 어떤 우선순위 신호도 이들 중 어느 하나를 구별하지 못함에도 불구하고 할당기가 활용률을 76.8%에서 87.5%로, 가치를 23.1%만큼 높입니다. 이러한 이득은 순전히 우선순위에 따른 정렬의 인공물(artifact)이 아닙니다. 시간 지평(horizon)에 걸친 계획 배치가 그 자체로 기여합니다.
위의 모든 내용은 스케줄러가 각 작업이 얼마나 많은 GPU-시간을 필요로 하는지, 그리고 얼마나 많은 실시간 트래픽이 올지 알고 있다고 가정합니다. 둘 다 입력값이 아니라 예측값이며, 스케줄러는 이 예측값만큼만 좋을 수 있습니다.
단일한 일반 추정기(generic estimator)로는 작동하지 않습니다. 왜냐하면 네 가지 워크로드 유형은 질적으로 다른 비용 동인(cost drivers)을 가지고 있기 때문입니다. 여기서 이전 글의 전문화 논증이 다시 연결됩니다. 즉, 작업별 모델이 범용 모델보다 우수하게 만드는 것과 동일한 논리가 스케줄러에 공급되는 추정기에도 적용됩니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Hugging Face Blog의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기