GPU 병렬화 기법 - Songwooseok123/Study_Space GitHub Wiki
- 헷갈렸던 병렬화 기법
- 강다솔 저자의 "한 권으로 끝내는 실전 LLM 파인튜닝"책을 보고 정리
- 병렬화의 의미
- ex) 데이터(를 여러 gpu에) 병렬화(쪼갠다)
- → 즉, 모델이 여러 gpu에 복사되어야 함.
DP(데이터 병렬화)
- 각 gpu에 모델 복제
- 그럼 데이터는 쪼개서 각각 들어가겠네
- 특정 gpu에 그레디언트가 모여 계산되기 때문에 모든 GPU의 VRAM을 균등하게 활용하지 못함
- 각 GPU에서 계산된 그래디언트를 모아 모든 모델 복사본의 파라미털르 갱신하는데 사용
- 학습시간이 단축됨
- GPU 간 그레이던트 수집과 파라미터 동기화 과정에서 네트워크 통신 비용이 발생
MP(모델 병렬화)

- 모델을 여러 GPU에 쪼개는거
- 그럼 데이터가 통째로 각 GPU에 순차적으로 들어가겠네, (GPU에서 다음 GPU로 전달되겠네)
- 대부분의 데이터 이동은 각 GPU 내에서 이뤄지지만, GPU0의 레이어 3에서 GPU1의 레이어 4로 넘어갈 때는 GPU 간 데이터 전송이 필요해 네트워크 통신 비용 발생(동일한 컴퓨터에 GPU들이 있으면 문제 없음. 다른 컴퓨터로 넘어가는 상황에선 비용 크게 증가)
- 특정시점에 대부분의 GPU가 놀고 있을 수 있다는 단점.
PP(파이프라인 병렬화)
- MP를 개선해서, 데이터를 미니 배치로 나누고, 노는 GPU가 최대한 없게 만듦
TP(텐서 병렬화)
- 모델 웨이트를 텐서 단위로 GPU에 분배
- 모델 병렬화랑 다른 점은 LAYER 단위(신경망을 세로로 자를지)일지, 텐서단위(가로로 자를지) 일지.
- 이것도 계산과정에서 gpu간 데이터를 주고 받아야 함
FSDP(Fully Sharded Data Parallel)
- 모델을 샤드라고 하는 더 작은 조각으로 분할하고, 각 GPU에 샤드를 할당해 실행하는 방식
- 학습 과정에서 필요에 따라 파라미터 샤드를 gpu 메모리에 로드하고, 사용이 끝나면 메모리에서 제거할 수 있어 메모리 리소스가 제한적인 환경에서 유리함
- 효율적인 그레디언트 집계
- 각 gpu에서 계산된 그레디언트는 중앙 집계 서버나 특정 gpu에서 수집되어 전체 모델의 파라미터를 업데이트하는데 사용되며, fsdp는 이과정에서 네트워크 통신 비용을 최소화함.