분산 학습 (Distributed Training)
쉽게 풀면
모델과 데이터가 너무 커서 GPU 하나로는 감당할 수 없을 때, 여러 개의 GPU나 여러 대의 컴퓨터에 작업을 나누어 동시에 학습을 진행하는 것이 분산 학습이다. 데이터를 나누어 각 장치가 서로 다른 데이터로 같은 모델을 학습하는 데이터 병렬화와, 모델 자체를 쪼개어 나누어 담는 모델 병렬화가 대표적인 두 가지 방식이다. 이 두 방식을 함께 섞어 쓰는 경우도 흔하다.
왜 중요한가
최근 대규모 언어모델과 이미지 생성 모델은 파라미터 수가 매우 커서 단일 GPU의 메모리와 연산 능력으로는 학습이 불가능한 경우가 많기 때문에, 분산 학습은 대규모 딥러닝 연구를 실제로 가능하게 하는 핵심 인프라 기술입니다.
학습 시간을 단축해 더 많은 실험을 반복할 수 있게 해주므로 연구 생산성에도 직접적인 영향을 미치며, GPU 클러스터의 통신 효율을 높이는 것 자체가 하나의 독립된 연구 주제로 다뤄질 만큼 중요합니다. 따라서 시스템 분야와 머신러닝 분야의 경계에서 활발히 연구되는 주제입니다.
어떤 절차인가
- 데이터 병렬: 같은 모델을 여러 장치에 복제하고 미니배치를 나눕니다. 장치마다 그래디언트를 계산한 뒤 all-reduce로 평균을 내어 모두 같은 방식으로 파라미터를 갱신합니다.
- 모델 병렬: 모델 자체를 쪼갭니다. 층 단위로 나누면 파이프라인 병렬(예: GPipe), 층 내부 행렬을 나누면 텐서 병렬(예: Megatron-LM)입니다. 둘을 데이터 병렬과 함께 쓰는 경우가 많습니다.
- 상태 분할: ZeRO는 옵티마이저 상태·그래디언트·파라미터를 장치들에 나누어 담아 데이터 병렬의 메모리 중복을 줄입니다.
- 동기/비동기: 동기 방식은 모든 장치가 갱신을 맞춥니다. Dean 외(2012)의 DistBelief처럼 비동기로 갱신하는 방식도 있습니다.
언제 쓰고 무엇을 얻나
모델이 한 GPU 메모리에 안 들어가면 모델 병렬이나 상태 분할이 필요하고, 모델은 들어가지만 학습 시간이 길면 데이터 병렬로 시간을 줄입니다. 장치를 늘려도 통신 때문에 속도가 선형으로 늘지는 않습니다.
가상의 예(계산)
- 메모리: 파라미터 10억 개 모델을 혼합정밀도와 Adam으로 학습하면 가중치(FP16) 2 + 그래디언트(FP16) 2 + 옵티마이저 상태 12 = 파라미터당 16바이트로, 활성값을 빼고도 약 16 GB가 필요합니다(ZeRO 논문의 계산 방식). 8개 장치에 ZeRO로 모두 분할하면 장치당 약 2 GB입니다.
- 통신: 링 all-reduce에서 장치당 보내는 양은 2(N−1)/N × 그래디언트 크기입니다. N = 8, FP16 그래디언트 2 GB이면 장치당 3.5 GB입니다. N이 커져도 이 값은 약 2배 크기에 수렴합니다.
- 학습률: 배치를 256에서 8,192로 32배 키울 때 Goyal 외(2017)의 선형 스케일링 규칙은 학습률도 32배(0.1 → 3.2)로 올리고 처음에 워밍업을 둡니다.
논문에는 이렇게 적는다
- 장치 구성: 장치의 종류와 수, 노드 구성, 사용한 소프트웨어(통신 라이브러리 포함)를 적습니다.
- 병렬화 방식: 데이터/텐서/파이프라인 병렬의 차수(예: 8×4×2)와 상태 분할 여부를 적습니다.
- 학습 설정의 변화: 전역 배치 크기와 그에 따른 학습률 조정, 워밍업, 정밀도(FP16/BF16 등)를 적습니다. 장치 수를 바꾸면 결과가 달라질 수 있습니다.
- 효율: 처리량(예: 초당 토큰 수)과 스케일링 효율(장치를 늘렸을 때 이상적인 속도 대비 비율)을 보고하고, 통신 병목을 논합니다.
- 재현성: 비동기 방식이나 비결정적 연산 때문에 같은 설정에서도 결과가 조금 다를 수 있음을 밝힙니다.
논문에서는 이렇게 쓰입니다
실제 논문에서
이 용어를 직접 쓴 국내 논문 문장을 아직 수집하지 못했습니다. 수집되는 대로 출처와 함께 싣겠습니다.
예시 문장
아래는 용어의 쓰임을 보여 주려고 만든 예시로, 실제 논문에서 가져온 문장이 아닙니다.
128개의 GPU에 학습 데이터를 나누어 배분하고, 각 GPU가 동시에 학습을 진행하는 방식으로 전체 학습 시간을 단축했다는 뜻이다.
대형 언어모델 학습에서는 데이터 병렬화만으로 부족해, 모델을 층 단위나 텐서 단위로 쪼개는 여러 병렬화 기법을 함께 사용한다는 것을 보여주는 예문입니다.
딥러닝을 활용한 과학 시뮬레이션 연구에서도 분산 학습이 활용되며, 통신 병목을 줄이기 위한 최적화가 함께 다뤄지는 경우를 보여줍니다.
조금 더 깊게 보면
분산 학습을 깊이 이해하려면 각 장치가 계산한 그레이디언트를 어떻게 모으고 합치는지를 살펴볼 필요가 있습니다.
데이터 병렬화에서는 흔히 올리듀스(all-reduce) 연산을 통해 모든 장치의 그레이디언트를 동기화하며, 이 통신 과정이 전체 학습 속도의 병목이 되는 경우가 많아 통신과 연산을 겹쳐 수행하거나 그레이디언트를 압축·양자화하는 기법이 함께 연구됩니다.
모델 병렬화 중에서도 모델을 층 단위로 나누어 여러 장치가 순차적으로 처리하는 방식은 파이프라인 병렬화라 불리며, 이 경우 장치 간 유휴 시간(bubble)을 줄이는 스케줄링이 성능에 큰 영향을 미칩니다.
주의할 점
분산 학습은 GPU 수를 늘린다고 항상 선형적으로 속도가 빨라지지는 않으며, GPU 간 통신 오버헤드 때문에 효율이 떨어지는 경우가 흔하다.
헷갈리기 쉬운 용어
| 용어 | 무엇을 나누는가 |
|---|---|
| 데이터 병렬 | 학습 데이터(미니배치). 모델은 각 장치에 전부 복제 |
| 모델 병렬 | 모델 자체. 층 단위(파이프라인) 또는 층 내부(텐서) |
| 혼합정밀도 학습 | 나누는 것이 아니라 연산 정밀도를 섞는 기법. 분산 학습과 함께 쓰임 |
참고 문헌
- 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.
- 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.
- 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.
- 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.
표의 기준값은 위 문헌에 근거한 관례이며, 분야·학술지마다 다른 기준을 쓸 수 있습니다.