데이터 병렬화 (Data Parallelism)
쉽게 풀면
데이터 병렬화는 같은 모델을 여러 GPU에 똑같이 복사해 두고, 학습 데이터만 나누어 각 GPU에 다른 부분을 맡기는 방식이다. 각 GPU는 자신이 맡은 데이터로 독립적으로 계산한 뒤, 그 결과(그레이디언트)를 모아서 평균을 내고 모든 GPU의 모델을 동시에 업데이트한다. 모델 자체는 한 장치에 다 들어갈 만큼 작지만 데이터 처리량을 늘리고 싶을 때 가장 널리 쓰이는 방식이다.
왜 중요한가
딥러닝 모델과 데이터셋의 규모가 커지면서 하나의 장치만으로는 현실적인 시간 안에 학습을 끝내기 어려워졌습니다. 데이터 병렬화는 학습 시간을 장치 수에 비례해 줄일 수 있는 가장 기본적인 방법이기 때문에, 대규모 언어모델·비전 모델 학습을 다루는 논문에서 실험 설정을 설명할 때 거의 빠지지 않고 등장합니다. 또한 모델 병렬화나 파이프라인 병렬화 같은 다른 분산 학습 기법과 결합되어 더 큰 규모의 학습을 가능하게 하는 기반 기술로도 다뤄집니다.
어떤 절차인가
- 모델 복제: 같은 모델을 장치(GPU) N개에 똑같이 올립니다. 초기 가중치는 같게 맞춥니다.
- 배치 분할: 전역 배치(global batch)를 N등분해 장치마다 다른 조각을 줍니다.
- 지역 계산: 각 장치가 자기 조각으로 순전파·역전파를 해 그레이디언트를 구합니다.
- 동기화: 장치들의 그레이디언트를 모아 평균을 냅니다(보통 all-reduce 집합 통신).
- 동시 갱신: 평균 그레이디언트로 모든 장치가 같은 방식으로 가중치를 갱신해 복제본이 항상 같게 유지됩니다.
이렇게 모든 장치가 한 걸음마다 기다려 맞추는 방식이 동기식이며, 기다림을 줄이려고 장치별로 따로 갱신하는 비동기식은 학습 안정성이 떨어질 수 있습니다. 비동기 방식의 초기 사례로 Dean 등(2012)의 대규모 분산 학습 시스템이 자주 인용됩니다.
언제 쓰고 무엇을 얻나
언제 쓰나: 모델 하나가 장치 메모리에 들어가고, 데이터 처리량을 늘려 학습 시간을 줄이고 싶을 때 가장 먼저 고려하는 방법입니다. 모델이 한 장치에 안 들어가면 모델 병렬화를 쓰거나 결합합니다(분산 학습).
가상의 계산 두 가지. (1) 전역 배치 4096을 GPU 32개에 나누면 장치당 4096 ÷ 32 = 128개입니다. (2) 파라미터 1억 개(fp32 기준 400 MB)인 모델에서 링(ring) all-reduce를 쓰면 장치당 한 걸음에 주고받는 데이터는 약 2 × (N − 1) / N × 400 MB로, N = 32이면 약 775 MB입니다. 장치 수가 늘수록 이 값은 2 × 400 MB에 가까워지고 한 걸음의 계산 시간은 줄어드므로, 통신 비중이 커지면서 속도 향상이 장치 수에 비례하지 않게 됩니다. 확장 효율은 ‘N개 장치의 처리량 ÷ (N × 장치 1개의 처리량)’으로 재며, 예를 들어 1개에서 초당 1,000장, 4개에서 초당 3,200장이면 확장 효율은 80%입니다(가상의 값).
전역 배치가 커지면 학습률 조정이 필요합니다. Goyal 등(2017)은 배치 크기를 k배로 키울 때 학습률도 k배로 키우고 초반에 서서히 올리는 워밍업을 쓰는 방법으로 큰 배치 학습을 안정시켰습니다.
논문에는 이렇게 적는다
- 장치 종류와 개수, 장치당 배치와 전역 배치를 적습니다(전역 배치 = 장치당 배치 × 장치 수).
- 동기식/비동기식, 통신 라이브러리나 프레임워크(예: Horovod, PyTorch DDP)를 밝힙니다.
- 전역 배치를 키웠다면 학습률 스케일링과 워밍업 같은 조정을 적습니다. 그렇지 않으면 결과 차이가 병렬화 때문인지 하이퍼파라미터 때문인지 알 수 없습니다.
- 배치 정규화는 장치별 통계를 쓰는지, 장치 간 동기화하는지를 적습니다.
- 속도는 처리량(samples/s)과 확장 효율로 보고하고, 정확도가 단일 장치 학습과 비슷한지도 확인합니다.
- 모델 전체가 한 장치 메모리에 들어가야 한다는 제약을 한계로 언급합니다.
논문에서는 이렇게 쓰입니다
실제 논문에서
이 용어를 직접 쓴 국내 논문 문장을 아직 수집하지 못했습니다. 수집되는 대로 출처와 함께 싣겠습니다.
예시 문장
아래는 용어의 쓰임을 보여 주려고 만든 예시로, 실제 논문에서 가져온 문장이 아닙니다.
전체 배치를 32개의 GPU에 균등하게 나누어, 각 GPU가 자신의 몫만 계산하고 이후 결과를 합치는 방식으로 학습을 병렬화했다는 뜻이다.
컴퓨터 비전 분야에서 데이터 병렬화를 다른 최적화 기법과 결합해 학습 속도를 높였다는 서술이다.
강화학습 분야에서도 여러 워커가 각자 경험 데이터를 모아 병렬로 학습을 진행하는 방식이 데이터 병렬화의 한 형태로 쓰인다는 뜻이다.
조금 더 깊게 보면
데이터 병렬화를 구현할 때는 각 장치에서 계산된 그레이디언트를 어떻게 모으고 평균 낼지가 핵심이며, 이때 흔히 올리듀스(all-reduce) 같은 집합 통신 연산이 사용됩니다.
동기식 방식은 모든 장치가 계산을 마칠 때까지 기다렸다가 한꺼번에 업데이트하는 반면, 비동기식 방식은 대기 시간을 줄이는 대신 학습 안정성이 떨어질 수 있습니다. 장치 수가 늘어날수록 통신 비용이 커지는 문제가 있어, 이를 줄이기 위한 그레이디언트 압축이나 통신-계산 중첩 기법도 함께 논의되는 경우가 많습니다.
주의할 점
데이터 병렬화는 모델 전체가 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:1706.02677.
- Sergeev, A., & Del Balso, M. (2018). Horovod: Fast and easy distributed deep learning in TensorFlow. arXiv:1802.05799.
- Li, S., Zhao, Y., Varma, R., Salpekar, O., Noordhuis, P., Li, T., Paszke, A., Smith, J., Vaughan, B., Damania, P., & Chintala, S. (2020). PyTorch Distributed: Experiences on accelerating data parallel training. Proceedings of the VLDB Endowment, 13(12), 3005–3018.
표의 기준값은 위 문헌에 근거한 관례이며, 분야·학술지마다 다른 기준을 쓸 수 있습니다.