논문 링크

Q : 이 논문을 아주 자세하게 읽고 논문의 강점과 독창적인 지점을 설명해주고 핵심 알고리즘을 예시 입력을 들어서 전체적인 과정을 설명해줘 추가적으로 논문의 한계점에 대해서도 알려줘

Rubick 논문 상세 분석: 강점, 핵심 알고리즘, 그리고 한계점

제공된 논문 “RUBICK: EXPLOITING JOB RECONFIGURABILITY FOR DEEP LEARNING CLUSTER SCHEDULING"에 대한 심층 분석 결과는 다음과 같습니다.

1. 논문의 강점과 독창적인 지점

Rubick 논문의 가장 큰 강점이자 독창성은 딥러닝 작업(Job)의 ‘재구성 가능성(Reconfigurability)‘을 클러스터 스케줄링의 핵심 요소로 통합한 최초의 시스템이라는 점입니다. 기존 시스템들이 딥러닝 작업을 정적인 리소스를 요구하는 ‘블랙박스’로 취급한 반면, Rubick은 작업의 내부 실행 계획을 능동적으로 변경하며 클러스터 자원과 동적으로 상호작용하는 ‘화이트박스’ 접근법을 제시합니다.

주요 강점과 독창적인 지점은 다음과 같습니다.

2. 핵심 알고리즘 (Algorithm 1) 설명 및 예시

Rubick 스케줄링 정책의 핵심 목표는 보장(guaranteed) 작업의 성능 SLO를 만족시키면서 클러스터 전체의 처리량을 극대화하는 것입니다. [cite_start]이를 위해 자원 민감도가 낮은 작업의 자원을 회수(shrink)하여 민감도가 높은 작업에 재할당하는 영리한 전략을 사용합니다. [cite: 208, 209, 211]

예시 시나리오: [cite_start]논문의 Figure 8을 바탕으로 가상의 시나리오를 구성해 보겠습니다. [cite: 268, 270, 272]

Rubick 스케줄러의 단계별 동작 과정 (Algorithm 1 기반):

  1. 새로운 작업(Job 2) 도착 및 스케줄링 시도 (line 4-5): [cite_start]스케줄러는 Job 2를 스케줄링하기 위해 클러스터의 가용 자원을 찾습니다. [cite: 202] 현재 Job 1이 2개를 쓰고 있어 2개의 GPU가 남아있습니다.

  2. 자원 추가 확보를 위한 ‘Shrink’ 고려 (line 8-17): 스케줄러는 단순히 남은 2개의 GPU를 Job 2에 할당하는 것에 그치지 않고, 더 나은 할당이 가능한지 탐색합니다. [cite_start]이를 위해 현재 실행 중인 Job 1의 자원을 회수하는 것을 고려합니다. [cite: 207]

  3. 자원 민감도 비교 (line 13): [cite_start]스케줄러는 두 작업의 자원 민감도 곡선의 기울기를 비교합니다. [cite: 209]

    • Job 2(T5)는 GPU를 할당받을 때 성능 향상폭(기울기)이 매우 큽니다.
    • Job 1(RoBERTa)은 이미 2개의 GPU를 가지고 있고, 여기서 자원을 뺏겨 1개로 줄어들 때의 성능 하락폭(기울기)이 Job 2의 성능 향상폭보다 작습니다.
    • [cite_start]결론적으로, Job 1에서 GPU 1개를 빼앗아 Job 2에 주는 것이 클러스터 전체의 총 처리량(throughput)을 높이는 길이라고 판단합니다. [cite: 211]
  4. 자원 재할당 및 실행 계획 재구성 (line 15, 21):

    • [cite_start]스케줄러는 “가장 덜 민감한 작업(least sensitive job)“인 Job 1의 GPU 할당을 2개에서 1개로 줄입니다(shrink). [cite: 210, 213]
    • 이제 클러스터에는 총 3개의 가용 GPU(원래 있던 2개 + 회수한 1개)가 생깁니다.
    • 이 3개의 GPU를 자원 민감도가 높은 Job 2에 모두 할당합니다.
    • [cite_start]마지막으로, 변경된 자원 할당량에 맞춰 각 작업의 최적 실행 계획을 자원 민감도 곡선을 통해 다시 선택합니다. [cite: 204]
      • [cite_start]Job 1 (RoBERTa, 1 GPU)은 DP+GA 계획을 선택합니다. [cite: 272]
      • [cite_start]Job 2 (T5, 3 GPUs)는 TP+GA 계획을 선택합니다. [cite: 272]
  5. 최종 결과: 단순히 2개씩 나눠 갖는 것보다, Rubick의 지능적인 재할당을 통해 T5는 3개의 GPU를, RoBERTa는 1개의 GPU를 할당받게 됩니다. [cite_start]이 결과, 두 작업의 총 처리량 합(normalized speedup)이 0.78에서 1.44로 약 85% 향상되었습니다. [cite: 270, 273]

3. 논문의 한계점

Rubick은 매우 혁신적인 시스템이지만, 다음과 같은 잠재적 한계점을 가지고 있습니다.

Q : 논문의 핵심알고리즘을 예시를 들어 아주 자세하게 설명해주고 정리해 줘

[cite_start]Rubick의 핵심 스케줄링 알고리즘(Algorithm 1)은 **‘자원 민감도 곡선(Resource Sensitivity Curve)’**을 사용하여 클러스터 전체의 처리량을 극대화하는 것을 목표로 합니다[cite: 174, 178]. [cite_start]알고리즘은 더 많은 자원을 할당받았을 때 성능 향상 폭이 큰(민감도가 높은) 작업에 자원을 우선적으로 몰아주고, 반대로 성능 향상 폭이 작은(민감도가 낮은) 작업의 자원은 회수하여 재할당하는 방식으로 동작합니다[cite: 208, 210].


예시로 보는 알고리즘 동작 과정

[cite_start]논문의 Figure 8 실험을 바탕으로 알고리즘의 동작을 단계별로 설명하겠습니다[cite: 248].

시나리오 설정

Step 1: 작업 도착 및 자원 민감도 분석

  1. RoBERTaT5 작업이 스케줄링 큐에 도착합니다.
  2. Rubick 스케줄러는 각 작업에 대해 미리 계산된 자원 민감도 곡선을 참조합니다. [cite_start]이 곡선은 GPU 개수에 따라 각 작업이 달성할 수 있는 최상의 성능(처리량)을 보여줍니다[cite: 179].
  3. [cite_start]분석 결과, T5 모델은 GPU가 추가될 때마다 성능이 급격히 향상되는 반면(곡선의 기울기가 가파름), RoBERTa 모델은 상대적으로 성능 향상 폭이 작다는 것을 발견합니다[cite: 271]. 즉, T5RoBERTa보다 자원 민감도가 훨씬 높습니다.

Step 2: 자원 할당 결정 (Shrink & Reallocate)

  1. [cite_start]단순한 스케줄러라면 4개의 GPU를 두 작업에 공평하게 2개씩 할당할 것입니다[cite: 269].
  2. 하지만 Rubick은 클러스터의 총 처리량을 최대화하기 위해 다른 결정을 내립니다. [cite_start]알고리즘은 기울기(slope)를 기준으로 작업을 정렬하여(SortBySlope), 자원 민감도가 가장 높은 T5에 자원을 우선적으로 할당하고자 합니다[cite: 216].
  3. [cite_start]Rubick은 RoBERTa에 1개의 GPU를, T5에 3개의 GPU를 할당하는 것이 두 작업의 처리량 합을 가장 크게 만드는 조합임을 계산해냅니다[cite: 272]. [cite_start]이 과정에서 민감도가 낮은 RoBERTa의 자원을 “축소(shrink)“하여 민감도가 높은 T5에 “재할당"하는 개념이 적용됩니다[cite: 207, 210].

Step 3: 실행 계획 선택 (Co-optimization)

  1. [cite_start]자원 할당(GPU 개수)이 결정된 후, Rubick은 다시 자원 민감도 곡선을 사용하여 해당 자원량에서 최고의 성능을 내는 최적의 실행 계획(execution plan)을 자동으로 선택합니다 (GetBestPlan 함수)[cite: 6, 204].
  2. [cite_start]T5 (GPU 3개): 최적 계획으로 TP+GA (Tensor Parallelism + Gradient Accumulation)를 선택합니다[cite: 272].
  3. [cite_start]RoBERTa (GPU 1개): 최적 계획으로 DP+GA (Data Parallelism + Gradient Accumulation)를 선택합니다[cite: 272].

Step 4: 결과


알고리즘 요약 정리

Q : 이 논문에서 제시한 결과를 자세하게 보고 다른 방법론에 비하여 특출난 점과 논문에서 제기하는 어떠한 방법이 이러한 결과를 도출하게 되었는지 논문에서 제시하는 이유와 너의 생각을 알려줘

[cite_start]논문에서 제시된 Rubick의 핵심 결과는 기존 최신 스케줄링 시스템 대비 평균 작업 완료 시간(JCT)을 최대 3.2배, 전체 작업 완료 시간(Makespan)을 최대 1.4배 단축했다는 것입니다[cite: 9, 309].

Rubick 결과의 특출난 점

Rubick의 결과가 다른 방법론에 비해 특히 뛰어난 점은 다양한 환경에서 일관되게 높은 성능 향상을 보였다는 것입니다.


결과 도출의 핵심 원리

이러한 뛰어난 결과는 논문에서 제시하는 다음 두 가지 핵심 방법론의 시너지 효과 덕분입니다.

1. 실행 계획과 자원 할당의 공동 최적화 (Co-optimization)

논문에서 제시하는 이유: [cite_start]논문은 기존 시스템들이 작업의 실행 계획을 고정된 ‘블랙박스’로 보고 자원만 할당하는 반면, Rubick은 실행 계획 재구성과 다차원 자원 재할당을 하나의 문제로 보고 동시에 최적화한다고 말합니다[cite: 6]. [cite_start]Breakdown 연구에서 실행 계획 재구성만 하는 경우(Rubick-E)나 자원 재할당만 하는 경우(Rubick-R)보다, 두 가지를 함께 수행하는 완전한 Rubick이 각각 2.5배와 1.7배 더 높은 JCT 감소를 보인 결과가 이를 뒷받침합니다[cite: 325, 327].

저의 생각: 이것이 Rubick의 가장 근본적인 차별점입니다. 클러스터의 자원 가용성은 실시간으로 변하는데, 실행 계획이 고정되어 있다면 최적의 성능을 낼 수 없습니다. [cite_start]예를 들어, GPU가 부족할 때는 ZeRO-Offload처럼 CPU와 메모리를 더 많이 사용하더라도 적은 GPU로 실행 가능한 계획으로 바꾸고 [cite: 32, 101][cite_start], 반대로 CPU가 여유로울 때는 이를 활용해 파라미터 업데이트를 가속화하는 등 [cite: 259] 상황에 맞는 최적의 카드를 계속해서 바꿔 내는 능력이 뛰어난 결과를 만든 핵심입니다.

2. 자원 민감도 기반의 지능적인 스케줄링

논문에서 제시하는 이유: [cite_start]Rubick은 **‘자원 민감도 곡선(Resource Sensitivity Curve)’**을 사용하여 어떤 작업이 자원을 추가로 할당받았을 때 가장 큰 성능 향상을 보이는지 정량적으로 파악합니다[cite: 179]. [cite_start]스케줄링 알고리즘은 이 곡선의 기울기를 기반으로, 민감도가 낮은(자원을 줘도 성능 향상이 적은) 작업의 자원을 회수(shrink)하여 민감도가 높은 작업에 재할당함으로써 클러스터 전체의 처리량을 극대화합니다[cite: 210, 211].

저의 생각: 이 방법은 “한정된 자원을 가장 똑똑하게 사용하는 방법"에 대한 효과적인 해답입니다. 모든 작업에 자원을 공평하게 분배하는 대신, 가장 큰 잠재력을 가진 작업에 자원을 집중하는 것입니다. [cite_start]예를 들어, Figure 8에서 T5 모델이 RoBERTa 모델보다 GPU에 더 민감하다는 것을 파악하고, T5에 더 많은 GPU(3개)를, RoBERTa에는 더 적은 GPU(1개)를 할당하여 총 처리량을 85%나 향상시킨 것이 대표적인 사례입니다[cite: 271, 272, 273]. 이러한 선택과 집중 전략이 클러스터의 유휴 자원을 최소화하고 전체 효율성을 끌어올린 것입니다.

결론적으로, Rubick의 뛰어난 결과는 단순히 하나의 기능이 아닌, 실행 계획의 유연한 재구성 능력자원 민감도에 기반한 지능적인 자원 배분 전략이 유기적으로 결합하여 만들어낸 필연적인 성과라고 할 수 있습니다.

Q : 이 논문의 한계를 극복하기 위한 방법으로 어떤 연구흐름이 있는지 정리해서 자세하게 설명해 줘

Rubick의 한계를 극복하기 위한 향후 연구는 현재의 시스템을 더욱 지능적이고, 적응적이며, 비침습적(non-intrusive)으로 만드는 방향으로 진행될 수 있습니다. Rubick이 제기한 ‘재구성 가능성’이라는 패러다임을 더욱 발전시키기 위한 구체적인 연구 흐름은 다음과 같습니다.


1. 실시간/무중단 재구성을 통한 오버헤드 최소화


2. 온라인 자기 학습 및 전이 학습 기반 성능 모델 고도화


3. 모델 수렴을 고려한 스케줄링 (Convergence-Aware Scheduling)


4. 강화학습(RL) 기반 스케줄링 정책 탐색

Q : 기존 스케줄러와 비교하여, Rubick이 ‘실행 계획’과 ‘자원 할당’을 동시에 최적화하는 ‘공동 최적화’ 방식은 구체적으로 어떻게 동작하며, 이것이 클러스터 효율성에 어떤 근본적인 이점을 제공하는가?

[cite_start]Rubick의 ‘공동 최적화’ 방식은 딥러닝 작업의 **실행 계획(어떻게 학습할 것인가)**과 **자원 할당(어떤 자원을 얼마나 쓸 것인가)**을 분리된 문제가 아닌, 서로 맞물려 있는 하나의 최적화 문제로 취급합니다[cite: 6]. [cite_start]기존 스케줄러가 작업의 실행 계획을 변경 불가능한 ‘블랙박스’로 보고 단순히 자원만 할당해주는 것과 근본적으로 다릅니다[cite: 3].


공동 최적화 동작 방식

Rubick의 공동 최적화는 다음 두 단계로 구체적으로 동작합니다.

  1. [cite_start]성능 모델링: Rubick은 먼저 성능 모델을 통해 특정 작업에 대해 가능한 여러 실행 계획(예: 3D 병렬성, ZeRO, Gradient Checkpointing 등)과 다양한 자원(GPU, CPU, 메모리) 조합이 어떤 성능(처리량)을 낼지 예측합니다[cite: 7, 49]. [cite_start]이 모델은 자원의 변화가 각기 다른 실행 계획의 성능에 미치는 영향을 이해하고 있습니다[cite: 124].

  2. 동적 선택 및 할당: 스케줄링 시점마다 Rubick은 이 성능 모델의 예측값을 기반으로 다음과 같은 결정을 내립니다.

    • [cite_start]자원에 계획을 맞추기: 클러스터에 가용 자원이 제한적일 경우, 현재 자원 상황에서 최고의 성능을 낼 수 있는 최적의 실행 계획을 선택하여 작업을 실행합니다[cite: 36].
    • [cite_start]계획에 자원을 맞추기: 반대로 자원이 풍부할 경우, 가장 높은 성능을 내는 실행 계획을 먼저 선택한 뒤, 해당 계획이 요구하는 만큼의 자원을 할당합니다[cite: 37].

[cite_start]이 과정은 일회성으로 끝나지 않고, 클러스터 상황이 변할 때마다 지속적으로 실행되어 항상 최적의 (실행 계획, 자원 할당) 조합을 찾아냅니다[cite: 6].


근본적인 이점

이러한 공동 최적화 방식은 클러스터 효율성에 다음과 같은 근본적인 이점을 제공합니다.

[cite_start]실행 계획과 자원 간의 ‘불일치(Mismatch)’ 해소. 기존 방식에서는 사용자가 클러스터의 동적인 자원 상황을 모른 채 정적으로 실행 계획을 결정하기 때문에, 작업이 요구하는 자원과 실제 가용 자원 사이에 불일치가 발생합니다[cite: 4]. 이로 인해 자원이 부족하면 작업이 하염없이 대기하거나, 자원이 과도하게 할당되어 낭비되는 문제가 있었습니다.

Rubick은 작업을 ‘재구성’하여 이러한 불일치를 해소합니다.

결론적으로, Rubick은 작업을 클러스터 환경에 수동적으로 맞추는 것이 아니라, 작업 자체가 환경에 능동적으로 적응하도록 만들어 클러스터 효율성을 근본적으로 개선합니다.

Q : ‘자원 민감도 곡선(Resource Sensitivity Curve)‘은 Rubick의 스케줄링 결정에 어떻게 활용되며, ‘Shrink(자원 회수)’ 메커니즘과 결합하여 클러스터 전체의 처리량을 극대화하는 과정은 구체적으로 어떻게 이루어지는가?

‘자원 민감도 곡선’은 특정 작업에 자원을 추가로 투입했을 때 얼마나 큰 성능 향상을 기대할 수 있는지를 보여주는 핵심 지표입니다. Rubick은 이 곡선과 ‘Shrink’ 메커니즘을 결합하여, 마치 경제 원리처럼 한정된 자원을 가장 수익률이 높은 곳에 투자함으로써 클러스터 전체의 처리량을 극대화합니다.


‘자원 민감도 곡선’의 활용법: 투자 가이드라인 📈


‘Shrink’와 결합하여 처리량을 극대화하는 과정 ⚙️

이 과정은 ‘선택과 집중’이라는 말로 요약할 수 있습니다.

  1. [cite_start]가장 민감한 작업 선택 (투자 대상 선정): 새로운 작업을 스케줄링하거나 기존 작업의 성능을 향상시켜야 할 때, Rubick은 현재 대기 중이거나 실행 중인 모든 작업 중에서 자원 민감도 곡선의 기울기가 가장 가파른, 즉 가장 자원 민감도가 높은 작업을 우선순위로 둡니다. [cite: 216]
  2. [cite_start]가장 둔감한 작업에서 자원 회수 (Shrink): Rubick은 가용 자원을 찾는 과정에서, 현재 실행 중인 작업들 중 자원 민감도 곡선의 기울기가 가장 낮은(가장 완만한) 작업을 식별합니다. [cite: 210] [cite_start]이 작업은 자원을 회수당하더라도 성능 하락 폭이 가장 적을 것으로 예상되는 ‘가장 둔감한’ 작업입니다. [cite: 210]
  3. [cite_start]자원 재할당 및 공동 최적화: Rubick은 2단계에서 회수한 자원을 1단계에서 선택한 가장 민감한 작업에 재할당합니다. [cite: 207, 210] 이 재할당은 다음과 같은 경우에 허용됩니다.
    • [cite_start]총 처리량 증가: 자원을 받는 작업의 성능 향상(기울기)이 자원을 뺏기는 작업의 성능 하락(기울기)보다 커서, 클러스터 전체의 총 처리량이 증가할 때. [cite: 211]
    • [cite_start]성능 보장(SLO) 충족: 총 처리량이 다소 감소하더라도, 성능 보장이 필요한 ‘보장(guaranteed) 작업’이 최소 요구 성능에 도달하지 못했을 때. [cite: 212]
  4. [cite_start]최적 실행 계획 자동 선택: 자원 재할당이 완료되면, 각 작업은 변경된 자원량에 맞춰 최고의 성능을 낼 수 있는 실행 계획으로 자동 재구성됩니다. [cite: 204]

결론적으로, 이 과정은 클러스터 내의 모든 자원이 항상 가장 큰 성능 향상을 이끌어낼 수 있는 작업에 동적으로 흘러가도록 만듭니다. 덜 중요한 곳에서 자원을 빼내어 가장 중요한 곳에 집중 투자하는 이 전략이 바로 Rubick이 클러스터 전체의 처리량을 극대화하는 핵심 원리입니다.

Q : Rubick은 자원의 양을 보장하는 대신 ‘성능’을 보장하는 새로운 SLO 개념을 제시한다. 이러한 접근 방식이 실제 다중 사용자(multi-tenant) 환경에서 ‘보장(guaranteed) 작업’의 효율성을 높이고 ‘최선형(best-effort) 작업’에 더 많은 기회를 제공하는 원리는 무엇이며, 이 과정에서 발생하는 트레이드오프는 무엇인가?

Rubick의 ‘성능’ 기반 서비스 수준 목표(SLO)는 더 적은 자원으로 동일하거나 더 높은 성능을 달성하는 영리한 방식을 통해 ‘보장(guaranteed) 작업’과 ‘최선형(best-effort) 작업’ 모두에게 이득을 줍니다.


효율성 및 기회 제공의 원리 💡

기존 스케줄러는 사용자가 요청한 자원의 ‘양’ (예: GPU 8개)을 보장하는 데 집중합니다. 하지만 사용자의 실행 계획이 비효율적이라면, 이 8개의 GPU는 낭비될 수 있습니다.

Rubick은 이 패러다임을 바꿉니다. [cite_start]Rubick은 “사용자가 GPU 8개와 원래 계획으로 얻었을 ‘성능’“을 목표로 설정합니다[cite: 138]. 그리고 더 효율적인 실행 계획을 찾아, 예를 들어 GPU 4개만으로도 그 목표 성능을 달성합니다.

이러한 접근 방식은 다음과 같은 연쇄 효과를 낳습니다.


과정에서 발생하는 트레이드오프 (Trade-off) ⚖️

이러한 접근 방식의 가장 중요한 트레이드오프는 **재구성 오버헤드(Reconfiguration Overhead)**입니다.

라이선스

저작자: Jaehun Ryu

링크: https://jaehun.me/posts/rubick-exploiting-job-reconfigurability-for-deep-learning-cluster-scheduling/

라이선스: CC BY 4.0

이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스에 따라 이용할 수 있습니다. 출처를 밝히면 상업적 목적을 포함해 자유롭게 이용 가능합니다.

댓글

검색 시작

검색어를 입력하세요

↑↓
ESC
⌘K 단축키