분산 학습 : 여러개의 GPU를 사용하여 학습 하는 것
Data Parallelism
- 데이터를 여러 개의 GPU로 나누어서 학습하는 방법
- 모델은 모든 GPU에 똑같이 복사되며 데이터가 GPU의 갯수 만큼 나뉘게 된다
Model Parallelism
- 모델의 파라미터를 여러 개의 GPU에 나누어서 연산하는 방법
- Tensor Parallelism: 모델을 수평으로 나눈다고 생각, 각각의 가중치 매트릭스가 쪼개져서 여러 gpu에 할당,레이어 수준의 분할은 이루어지지 않기에 수평 분할
- Pipeline Parallelism: 레이어 별로 서로 다른 gpu에 할당하는 방식
Data Parallelism
- gpu가 많아 질수록 batch size증가 가능
- all reduce ring
- 같은 양의 데이터를 더 빠르게 처리하는 기법
- 데이터는 분산되지만 모델은 각 gpu에 복사되어져서 모두 들어가야 함 → 모델 자체가 매우 큰 경우에는 Data Parallelism으로 해결하기에는 문제가 발생할 가능성이 있음 → 이러한 문제를 해결할 수 있는 방법이 Model Parallelsim
Tensor Parallelism
- 모델을 가로로 분할 → 하나의 레이어가 여러 개로 분할
Pipeline Parallelism
- 레이어를 서로 다른 gpu에 쪼개서 넣는다는 조금 더 직관적인 개념을 기반
Deepspeed Zero
데이터의 병렬화와 모델의 병렬화 두 개의 이점을 모두 활용했으며, data parallelism으로 병렬화를 하되 프로세스 간 중복되는 부분을 최대한 제거함으로써 메모리 효율성을 향상