[분산학습] Data Parallelism과 Model Parallelism

yoonene·2023년 1월 18일
0

ML/DL

목록 보기
16/17

이전 게시물에서 모델이 점점 거대해지며 한정된 자원에서 효율적으로 분산 학습할 수 있도록 도움을 주는 라이브러리인 accelerate, deepspeed에 대해 알아보았다.

딥러닝 분산 학습으로 모델이나 데이터를 쪼개서 학습하는 Model Parallelism, Data Parallelism이 있다.

Data Parallalism

Data Parallelism은 데이터가 많을 때 학습 속도를 높이기 위해 사용하는 방법이다.
데이터를 나눠 여러 GPU에서 연산한 후 각 최종 업데이트 결과에 대해 평균을 내는 방식이다.
하나의 GPU가 1개의 데이터를 학습할 때 걸리는 시간이 T라면 B개의 Batch를 학습할 때 T*B의 시간이 소요된다. 하지만 N개의 GPU에 B/10만큼 나눠서 학습한다면 T*B/N으로 시간을 단축할 수 있다.

Synchronization

N개의 GPU에서 연산한 업데이트 결과를 모아서 평균을 내고 다시 재분배하는 Synchronization 과정이 필요하다.
Synchronization 과정에서도 시간이 소요되기 때문에 이를 단축하는 것도 중요하다. 평균 낸 weight parameter를 각 GPU에 동일하게 재분배하는데 이때 GPU 간 데이터 전송 속도가 빠르면 synchronization 시간도 단축된다. 따라서 빠른 GPU간 Interconnect를 통해 학습 시간을 단축할 수도 있다. (ex. NVIDIA의 NVLink)

Model Parallelism

Model Parallelism은 모델이 너무 커서 한 GPU 메모리에 다 들어가지 않을 때 여러 GPU에 모델 parameter를 나누어 연산하는 방법이다. (속도 개선의 목적 X, 큰 모델을 돌리는 목적)
Model Parallelism을 구현하는 방법으로는 Tensor Parallelism과 Pipeline Parallelism이 있다.

1) Tensor Parallelism

Tensor parallelism은 Weight Matrix를 나누어 여러 GPU에서 연산을 하고 결과를 concatenate 하는 방식이다.
Input과 Weight Matrix의 행렬 연산을 Weight Matrix를 나눠 한다는 뜻인데, 여러 GPU에서 병렬로 연산한 후 결과값을 합하기 때문에 학습 시간이 단축된다.

2) Pipeline Parallelism

Pipeline Parallelism은 Model의 layer를 여러 대의 GPU에 쪼개서 순차적으로 학습시키는 방법이다.
병렬적으로 처리 가능했던 Tensor parallelism과 달리 각 GPU 연산의 결과를 다음 GPU에 넘겨주는 방식으로 순차적 연산을 하기 때문에 학습 시간을 단축할 수 없다. 그냥 큰 모델을 여러 GPU에 넣을 수 있다.의 의미가 있는 것 같다.

+) 두 가지 방법을 한 번에 사용한 2D model parallelism도 있다.

Model Parallelism의 단점

Model parallelism은 모델을 나눴기 때문에 Forward, Backward에 각각 synchronization을 해야 하기 때문에 F,B를 모두 거친 후 각 GPU에서 나온 업데이트(Weight 혹은 Gradient)들을 평균내고 재분배하는 Data parallelism에 비해 Synchronization 빈도가 훨씬 높다.

참고
https://lifeisenjoyable.tistory.com/21
멘토님 두뇌

profile
NLP Researcher / Information Retrieval / Search

0개의 댓글