분산 학습 (Distributed Training)

컴퓨터과학·AI
한 줄 정의: 하나의 딥러닝 모델을 여러 대의 컴퓨터나 여러 개의 가속기에 나누어 동시에 학습시키는 방법.
분산 학습분산 학습: 분산 학습 아래에 데이터 병렬화, 모델 병렬화; 모델 병렬화 아래에 파이프라인 병렬화, 텐서 병렬화.분산 학습여러 장치로 동시학습데이터 병렬화같은 모델·다른데이터모델 병렬화모델을 쪼개 나눠담음파이프라인병렬화층 단위로 분할텐서 병렬화텐서 단위로 분할여러 병렬화를 함께 결합해 쓰기도 함(3차원 병렬화)한계장치 간 통신 오버헤드 때문에 GPU 수만큼 선형으로빨라지지는 않음분산 학습분산 학습: 분산 학습 아래에 데이터 병렬화, 모델 병렬화; 모델 병렬화 아래에 파이프라인 병렬화, 텐서 병렬화.분산 학습여러 장치로 동시 학습데이터 병렬화같은 모델·다른 데이터모델 병렬화모델을 쪼개 나눠 담음파이프라인 병렬화층 단위로 분할텐서 병렬화텐서 단위로 분할여러 병렬화를 함께 결합해 쓰기도 함(3차원 병렬화)한계장치 간 통신 오버헤드 때문에 GPU 수만큼선형으로 빨라지지는 않음

쉽게 풀면

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

왜 중요한가

최근 대규모 언어모델과 이미지 생성 모델은 파라미터 수가 매우 커서 단일 GPU의 메모리와 연산 능력으로는 학습이 불가능한 경우가 많기 때문에, 분산 학습은 대규모 딥러닝 연구를 실제로 가능하게 하는 핵심 인프라 기술입니다.

학습 시간을 단축해 더 많은 실험을 반복할 수 있게 해주므로 연구 생산성에도 직접적인 영향을 미치며, GPU 클러스터의 통신 효율을 높이는 것 자체가 하나의 독립된 연구 주제로 다뤄질 만큼 중요합니다. 따라서 시스템 분야와 머신러닝 분야의 경계에서 활발히 연구되는 주제입니다.

어떤 절차인가

언제 쓰고 무엇을 얻나

모델이 한 GPU 메모리에 안 들어가면 모델 병렬이나 상태 분할이 필요하고, 모델은 들어가지만 학습 시간이 길면 데이터 병렬로 시간을 줄입니다. 장치를 늘려도 통신 때문에 속도가 선형으로 늘지는 않습니다.

가상의 예(계산)

논문에는 이렇게 적는다

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

실제 논문에서

이 용어를 직접 쓴 국내 논문 문장을 아직 수집하지 못했습니다. 수집되는 대로 출처와 함께 싣겠습니다.

예시 문장

아래는 용어의 쓰임을 보여 주려고 만든 예시로, 실제 논문에서 가져온 문장이 아닙니다.

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

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

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

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

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

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

조금 더 깊게 보면

분산 학습을 깊이 이해하려면 각 장치가 계산한 그레이디언트를 어떻게 모으고 합치는지를 살펴볼 필요가 있습니다.

데이터 병렬화에서는 흔히 올리듀스(all-reduce) 연산을 통해 모든 장치의 그레이디언트를 동기화하며, 이 통신 과정이 전체 학습 속도의 병목이 되는 경우가 많아 통신과 연산을 겹쳐 수행하거나 그레이디언트를 압축·양자화하는 기법이 함께 연구됩니다.

모델 병렬화 중에서도 모델을 층 단위로 나누어 여러 장치가 순차적으로 처리하는 방식은 파이프라인 병렬화라 불리며, 이 경우 장치 간 유휴 시간(bubble)을 줄이는 스케줄링이 성능에 큰 영향을 미칩니다.

주의할 점

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

헷갈리기 쉬운 용어

용어무엇을 나누는가
데이터 병렬학습 데이터(미니배치). 모델은 각 장치에 전부 복제
모델 병렬모델 자체. 층 단위(파이프라인) 또는 층 내부(텐서)
혼합정밀도 학습나누는 것이 아니라 연산 정밀도를 섞는 기법. 분산 학습과 함께 쓰임

참고 문헌

  1. Dean, J., Corrado, G. S., Monga, R., Chen, K., Devin, M., Le, Q. V., Mao, M. Z., Ranzato, M., Senior, A., Tucker, P., Yang, K., & Ng, A. Y. (2012). Large scale distributed deep networks. Advances in Neural Information Processing Systems, 25.
  2. Goyal, P., Dollár, P., Girshick, R., Noordhuis, P., Wesolowski, L., Kyrola, A., Tulloch, A., Jia, Y., & He, K. (2017). Accurate, large minibatch SGD: Training ImageNet in 1 hour. arXiv preprint.
  3. Shoeybi, M., Patwary, M., Puri, R., LeGresley, P., Casper, J., & Catanzaro, B. (2019). Megatron-LM: Training multi-billion parameter language models using model parallelism. arXiv preprint.
  4. Rajbhandari, S., Rasley, J., Ruwase, O., & He, Y. (2020). ZeRO: Memory optimizations toward training trillion parameter models. SC20: International Conference for High Performance Computing, Networking, Storage and Analysis.

표의 기준값은 위 문헌에 근거한 관례이며, 분야·학술지마다 다른 기준을 쓸 수 있습니다.

개념 계통

분야 전체 개념 지도 보기 →

관련 용어