데이터 병렬화 (Data Parallelism)

컴퓨터과학·AI
한 줄 정의: 동일한 모델의 복사본을 여러 장치에 두고, 학습 데이터를 나누어 각 장치가 서로 다른 데이터 배치를 동시에 처리하도록 하는 분산 학습 방식.

쉽게 풀면

데이터 병렬화는 같은 모델을 여러 GPU에 똑같이 복사해 두고, 학습 데이터만 나누어 각 GPU에 다른 부분을 맡기는 방식이다. 각 GPU는 자신이 맡은 데이터로 독립적으로 계산한 뒤, 그 결과(그레이디언트)를 모아서 평균을 내고 모든 GPU의 모델을 동시에 업데이트한다. 모델 자체는 한 장치에 다 들어갈 만큼 작지만 데이터 처리량을 늘리고 싶을 때 가장 널리 쓰이는 방식이다.

왜 중요한가

딥러닝 모델과 데이터셋의 규모가 커지면서 하나의 장치만으로는 현실적인 시간 안에 학습을 끝내기 어려워졌습니다. 데이터 병렬화는 학습 시간을 장치 수에 비례해 줄일 수 있는 가장 기본적인 방법이기 때문에, 대규모 언어모델·비전 모델 학습을 다루는 논문에서 실험 설정을 설명할 때 거의 빠지지 않고 등장합니다. 또한 모델 병렬화나 파이프라인 병렬화 같은 다른 분산 학습 기법과 결합되어 더 큰 규모의 학습을 가능하게 하는 기반 기술로도 다뤄집니다.

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

"배치 크기 4096을 32개 GPU에 데이터 병렬 방식으로 분산하여 각 GPU가 128개씩 처리하도록 하였다."

전체 배치를 32개의 GPU에 균등하게 나누어, 각 GPU가 자신의 몫만 계산하고 이후 결과를 합치는 방식으로 학습을 병렬화했다는 뜻이다.

"본 연구에서는 데이터 병렬화와 혼합 정밀도 학습을 함께 적용하여 이미지 분류 모델의 학습 처리량을 크게 향상시켰다."

컴퓨터 비전 분야에서 데이터 병렬화를 다른 최적화 기법과 결합해 학습 속도를 높였다는 서술이다.

"강화학습 환경에서 다수의 워커가 서로 다른 에피소드를 병렬로 수집하고, 데이터 병렬 방식으로 정책 신경망의 그레이디언트를 동기화하였다."

강화학습 분야에서도 여러 워커가 각자 경험 데이터를 모아 병렬로 학습을 진행하는 방식이 데이터 병렬화의 한 형태로 쓰인다는 뜻이다.

조금 더 깊게 보면

데이터 병렬화를 구현할 때는 각 장치에서 계산된 그레이디언트를 어떻게 모으고 평균 낼지가 핵심이며, 이때 흔히 올리듀스(all-reduce) 같은 집합 통신 연산이 사용됩니다. 동기식 방식은 모든 장치가 계산을 마칠 때까지 기다렸다가 한꺼번에 업데이트하는 반면, 비동기식 방식은 대기 시간을 줄이는 대신 학습 안정성이 떨어질 수 있습니다. 장치 수가 늘어날수록 통신 비용이 커지는 문제가 있어, 이를 줄이기 위한 그레이디언트 압축이나 통신-계산 중첩 기법도 함께 논의되는 경우가 많습니다.

주의할 점

데이터 병렬화는 모델 전체가 GPU 하나의 메모리에 들어갈 수 있어야 적용 가능하며, 모델 자체가 너무 크면 모델 병렬화가 필요하다.

관련 용어