MLCC: A Congestion Control Technique to Accelerate ML Training
본 논문은 네트워크 전송 속도를 연산 주기와 일치시켜 플로우 인터리빙(flow interleaving)을 달성함으로써 혼잡을 크게 줄이고 작업 완료 시간을 개선하여, 공유 GPU 클러스터에서 DNN 학습을 가속화하는 완전 분산형 혼잡 제어 기술인 MLCC를 제시한다.
원본 논문은 CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) 라이선스로 제공됩니다. 이것은 아래 논문에 대한 AI 생성 설명입니다. 저자가 작성하거나 승인한 것이 아닙니다. 기술적 정확성을 위해서는 원본 논문을 참조하세요. 전체 면책 조항 읽기
거대한 첨단 주방을 상상해 보세요. 수십 명의 요리사가 동시에 복잡한 요리를 만들려고 노력하고 있습니다. 이 주방에서 '식재료'는 데이터이고, '요리'는 강력한 컴퓨터(GPU라고 불리는)가 수행하는 실제 수학적 작업이며, '식재료를 전달하는 것'은 컴퓨터 사이를 이동하는 네트워크 트래픽입니다. 오랫동안 이 주방의 규칙은 단순한 공정함이었습니다. 두 요리사가 카운터 너머로 그릇을 전달해야 한다면, 똑같이 차례를 돌아가며 갖는 것이었죠. 하지만 문제는 요리가 단순히 그릇을 전달하는 것만이 아니라는 점입니다. 요리에는 '타이밍'이 중요합니다. 때때로 요리사는 채소를 다듬고 있고(연산), 때로는 배달을 기다리기도 합니다(통신). 만약 모든 사람이 정확히 같은 순간에 그릇을 전달하려고 한다면, 카운터는 막히고 그릇들은 충돌하며 모두가 기다리게 됩니다. 이것이 바로 머신러닝(ML) 학습의 세계, 즉 거대한 AI 모델들이 구축되는 과정에서 발생하는 문제입니다. 문제는 많은 AI 작업이 함께 실행될 때, 데이터가 도착하기를 기다리는 동안 값비싼 컴퓨터들이 유휴 상태로 남겨지며 교통 체증에 갇히는 경우가 많다는 것입니다. 목표는 이 작업들이 혼란스러운 싸움이 아니라, 잘 짜인 춤처럼 조화롭게 움직이도록 만드는 것입니다.
여기에 AI 주방을 위한 스마트한 교통 경찰 역할을 하는 영리한 새로운 기술, MLCC가 등장했습니다. MLCC는 모두에게 똑같이 차례를 강요하는 대신, 데이터 흐름이 서로를 스르륵 지나쳐 "미끄러지듯(slide)" 지나가도록 가르칩니다. 트랙 위의 달리기 선수들을 생각해 보세요. 기존 방식에서는 두 선수가 나란히 달리면 부딪히지 않기 위해 둘 다 속도를 줄입니다. MLCC는 규칙을 바꿉니다. 만약 한 선수가 막 한 바퀴를 마칠 참이라면(데이터 전송 완료), 그 선수가 앞서 달려나갈 수 있도록 약간의 추진력을 얻는 반면, 이제 막 시작하려는 다른 선수는 잠시 기다리도록 부드럽게 밀려납니다. 이를 통해 한 작업이 "요리"하는 동안 다른 작업은 "배달"하는 리듬이 만들어져, 서로 충돌하지 않게 됩니다. 이 논문은 컴퓨터들이 서로 통신하는 기존 방식(혼잡 제어)의 규칙을 단 몇 줄의 코드로 수정함으로써, 이러한 AI 작업들이 스스로 이 리듬을 찾아낼 수 있음을 보여줍니다. 테스트 결과, 이 간단한 기술은 가장 느린 경우의 학습 속도를 최대 2.7배 높였고, 평균적으로는 1.9배 빠르게 만들어, 혼란스러운 교통 체증을 매끄럽게 흐르는 고속도로로 바꾸어 놓았습니다.
문제점: 거대한 AI 교통 체증
MLCC가 왜 중요한지 이해하려면 먼저 AI 학습이 어떻게 작동하는지 알아야 합니다. 컴퓨터가 학습할 때, 컴퓨터는 하나의 사이클을 거칩니다. 숫자를 계산하고(연산), 그다음 자신이 배운 것을 팀원들과 공유해야 하며(통신), 다시 숫자를 계산하는 과정을 반복합니다. 이 과정은 수천 번 일어납니다. 공유된 데이터 센터에서는 이러한 많은 학습 작업이 동시에 실행됩니다.
기존의 네트워크 트래픽 처리 방식은 '공정함'을 위해 설계되었습니다. 만약 작업 A와 작업 B가 모두 데이터를 보내고 싶어 한다면, 네트워크는 대역폭을 50/50으로 나눕니다. 하지만 이는 AI에 최악입니다. AI 작업은 엄격한 리듬을 가지고 있기 때문에, 대역폭을 나누는 것은 그들이 종종 정확히 같은 시간에 데이터를 보내려고 시도하게 만듭니다. 이는 마치 두 사람이 좁은 문을 동시에 통과하려는 것과 같습니다. 서로 부딪혀 식료품을 떨어뜨리고 뒤로 물러나야 하죠. 이로 인해 "혼잡"이 발생하며, 데이터 패킷이 누락되거나 지연되고, 값비싼 컴퓨터들은 데이터가 도착하기를 기다리며 유휴 상태로 있게 됩니다.
기존 솔루션들: 왜 완벽하지 않았나
MLCC 이전에 연구자들은 두 가지 주요 해결책을 시도했습니다:
- 압축(Compression): 데이터를 줄여서 보내야 할 양을 줄이는 것입니다. 도움이 되긴 하지만, 타이밍 문제를 해결하지는 못합니다.
- 중앙 집중형 스케줄러(Centralized Schedulers): 모든 요리사를 지켜보며 언제 움직여야 할지 정확히 알려주는 초지능적인 매니저를 상상해 보세요. 이론적으로는 잘 작동하지만, 실제로는 너무 느리고 복잡합니다. 만약 한 요리사가 예상보다 조금 느리다면(이를 "스트래글러(straggler)"라고 합니다), 전체 계획이 무너지고 매니저는 모든 것을 다시 계산해야 합니다. 이는 연주자들이 계속 템포를 바꾸는 오케스트라를 지휘하는 것과 같습니다. 지휘자는 따라잡을 수 없습니다.
MLCC 솔루션: "미끄러지는" 춤
MLCC는 다른 접근 방식을 취합니다. 중앙 매니저를 두는 대신, 데이터 자체에 약간의 "상식"을 부여합니다. 이 기술은 컴퓨터가 데이터를 얼마나 빨리 보낼지 결정하는 표준 규칙(혼잡 제어 알고리즘)을 수정합니다.
그 비결은 바로 이것입니다: MLCC는 네트워크를 스마트한 방식으로 약간 '불공정'하게 만듭니다.
한 차선 도로를 달리는 자동차 A와 자동차 B를 상상해 보세요.
- 기존 방식: 두 자동차 모두 같은 속도로 달립니다. 가까워지면 둘 다 속도를 줄입니다.
- MLCC 방식: 시스템이 자동차들을 관찰합니다. 만약 자동차 A가 현재의 "바퀴(데이터 전송)"를 거의 마칠 참이라면, MLCC는 자동차 A가 빠르게 끝낼 수 있도록 작은 추진력을 줍니다. 동시에, 자동차 B에게는 조금 천천히 가라고 부드럽게 말합니다.
이것이 왜 도움이 될까요? 자동차 A가 데이터 전송을 마치면, 다시 "요리(연산)"하러 돌아가 도로를 사용하지 않기 때문입니다. 속도가 늦춰졌던 자동차 B는 이제 도로 전체를 독차지하여 자신의 바퀴를 마칠 수 있습니다. 자동차 B가 자신의 바퀴를 마칠 때쯤이면, 자동차 A는 다음 바퀴를 시작할 준비가 되어 있을 것입니다. 그들은 자연스럽게 여정을 "교차(interleave)"하게 됩니다. 하나가 운전하는 동안 다른 하나는 요리를 하는 식이죠.
이것은 경직된 스케줄이 아닙니다. 역동적인 춤입니다. 만약 한 작업이 지연되면(스트래글러 발생), 시스템은 자동으로 속도를 다시 조정하여 리듬을 맞춥니다. 마치 파트너가 발을 헛디뎠을 때 리듬을 놓치지 않도록 발걸음을 조절해 주는 댄스 파트너와 같습니다.
실제 적용 사례
연구자들은 새로운 하드웨어를 구축하거나 거대한 중앙 컴퓨터를 설치할 필요가 없었습니다. 그들은 단지 몇 줄의 추가 코드(일부 시스템의 경우 60줄 미만)로 데이터 흐름을 제어하는 소프트웨어(혼잡 제어 알고리즘)를 업데이트했을 뿐입니다.
그들은 NVIDIA A100 GPU가 탑적인 12대의 서버가 있는 실제 환경에서 이를 테스트했습니다. Llama2, GPT-2, BERT와 같은 인기 있는 AI 모델을 실행했습니다.
- 결과: 작업들은 빠르게 리듬을 찾아냈습니다. 약 30번의 학습 반복(iteration)(전체 실행 시간 중 아주 작은 부분) 내에, 작업들은 매끄럽게 교차하는 패턴을 찾아냈습니다.
- 속도 향상: 한 단계의 학습을 완료하는 데 걸리는 평균 시간이 크게 줄었습니다. 가장 최악의 경우(99 백분위수)에는 학습 시간이 최대 2.7배 단축되었습니다. 평균적으로는 1.9배 더 빨랐습니다.
- 오류 감소: 트래픽이 원활하게 흐르기 때문에 데이터 패킷 누락이 훨씬 적었습니다. 한 테스트에서는 오류 수가 거의 29배 가까이 감소했습니다.
서로 다른 크기의 작업은 어떻게 되나요?
"작업의 크기가 서로 다르면 어떻게 되나요? 한 작업은 거대 모델이고 다른 하나는 아주 작다면요?"라는 의문이 들 수 있습니다. 논문은 MLCC가 이 문제도 해결한다는 것을 보여줍니다. 설령 작업들이 완벽하게 일치하지 않더라도(실제로는 드문 일이지만), "미끄러지는(sliding)" 효과는 여전히 작동합니다. 시스템은 그들이 서로 충돌하지 않으면서도 "부분적으로 교차된(partially interleaved)" 상태를 찾아냅니다.
또한 288개의 GPU를 사용하는 대규모 시뮬레이션에서도 테스트를 진행했습니다. 네트워크가 매우 혼잡한 상황(oversubscribed)에서도 MLCC는 트래픽을 계속 흐르게 하여, 표준 방식 대비 1.35배 향상된 처리량(throughput)을 유지했습니다.
결론
MLCC는 때때로 최선의 해결책이 더 크고 복잡한 기계를 만드는 것이 아니라, 기존의 기계들이 어떻게 협력할지를 가르치는 것임을 상기시켜 줍니다. AI 작업들이 공간을 차지하기 위해 싸우는 대신, 시간 속에서 서로를 "미끄러지듯" 지나가게 함으로써, 우리는 AI 학습을 훨씬 더 빠르고 효율적으로 만들 수 있습니다. 이는 혼란스러운 교통 체증을 잘 짜인 안무가 있는 춤으로 바꾸어 놓으며, 스마트한 타이밍이 얼마나 큰 차이를 만드는지 증명합니다.
연구 분야의 논문에 파묻히고 계신가요?
연구 키워드에 맞는 최신 논문의 일일 다이제스트를 받아보세요 — 기술 요약 포함, 당신의 언어로.