분산 학습 (Distributed Training)

컴퓨터과학·AI
한 줄 정의: 하나의 딥러닝 모델을 여러 대의 컴퓨터나 여러 개의 가속기에 나누어 동시에 학습시키는 방법.

쉽게 풀면

모델과 데이터가 너무 커서 GPU 하나로는 감당할 수 없을 때, 여러 개의 GPU나 여러 대의 컴퓨터에 작업을 나누어 동시에 학습을 진행하는 것이 분산 학습이다. 데이터를 나누어 각 장치가 서로 다른 데이터로 같은 모델을 학습하는 데이터 병렬화와, 모델 자체를 쪼개어 나누어 담는 모델 병렬화가 대표적인 두 가지 방식이다. 이 두 방식을 함께 섞어 쓰는 경우도 흔하다.

왜 중요한가

최근 대규모 언어모델과 이미지 생성 모델은 파라미터 수가 매우 커서 단일 GPU의 메모리와 연산 능력으로는 학습이 불가능한 경우가 많기 때문에, 분산 학습은 대규모 딥러닝 연구를 실제로 가능하게 하는 핵심 인프라 기술입니다. 학습 시간을 단축해 더 많은 실험을 반복할 수 있게 해주므로 연구 생산성에도 직접적인 영향을 미치며, GPU 클러스터의 통신 효율을 높이는 것 자체가 하나의 독립된 연구 주제로 다뤄질 만큼 중요합니다. 따라서 시스템 분야와 머신러닝 분야의 경계에서 활발히 연구되는 주제입니다.

논문에서는 이렇게 쓰입니다

"모델은 128개의 GPU를 사용해 데이터 병렬 방식으로 분산 학습되었다."

128개의 GPU에 학습 데이터를 나누어 배분하고, 각 GPU가 동시에 학습을 진행하는 방식으로 전체 학습 시간을 단축했다는 뜻이다.

"파라미터 수가 수백억에 달하는 모델을 학습하기 위해 텐서 병렬화와 파이프라인 병렬화를 결합한 3차원 병렬화 전략을 적용하였다."

대형 언어모델 학습에서는 데이터 병렬화만으로 부족해, 모델을 층 단위나 텐서 단위로 쪼개는 여러 병렬화 기법을 함께 사용한다는 것을 보여주는 예문입니다.

"기상 시뮬레이션 딥러닝 모델을 여러 노드에 분산 학습시키면서, 노드 간 그레이디언트 통신량을 줄이기 위해 그레이디언트 압축 기법을 적용하였다."

딥러닝을 활용한 과학 시뮬레이션 연구에서도 분산 학습이 활용되며, 통신 병목을 줄이기 위한 최적화가 함께 다뤄지는 경우를 보여줍니다.

조금 더 깊게 보면

분산 학습을 깊이 이해하려면 각 장치가 계산한 그레이디언트를 어떻게 모으고 합치는지를 살펴볼 필요가 있습니다. 데이터 병렬화에서는 흔히 올리듀스(all-reduce) 연산을 통해 모든 장치의 그레이디언트를 동기화하며, 이 통신 과정이 전체 학습 속도의 병목이 되는 경우가 많아 통신과 연산을 겹쳐 수행하거나 그레이디언트를 압축·양자화하는 기법이 함께 연구됩니다. 모델 병렬화 중에서도 모델을 층 단위로 나누어 여러 장치가 순차적으로 처리하는 방식은 파이프라인 병렬화라 불리며, 이 경우 장치 간 유휴 시간(bubble)을 줄이는 스케줄링이 성능에 큰 영향을 미칩니다.

주의할 점

분산 학습은 GPU 수를 늘린다고 항상 선형적으로 속도가 빨라지지는 않으며, GPU 간 통신 오버헤드 때문에 효율이 떨어지는 경우가 흔하다.

관련 용어