GPU 병렬화 기법 - Songwooseok123/Study_Space GitHub Wiki

  • 헷갈렸던 병렬화 기법
  • 강다솔 저자의 "한 권으로 끝내는 실전 LLM 파인튜닝"책을 보고 정리
  • 병렬화의 의미
    • ex) 데이터(를 여러 gpu에) 병렬화(쪼갠다)
    • → 즉, 모델이 여러 gpu에 복사되어야 함.

DP(데이터 병렬화)

  • 각 gpu에 모델 복제
  • 그럼 데이터는 쪼개서 각각 들어가겠네
  • 특정 gpu에 그레디언트가 모여 계산되기 때문에 모든 GPU의 VRAM을 균등하게 활용하지 못함
  • 각 GPU에서 계산된 그래디언트를 모아 모든 모델 복사본의 파라미털르 갱신하는데 사용
  • 학습시간이 단축됨
  • GPU 간 그레이던트 수집과 파라미터 동기화 과정에서 네트워크 통신 비용이 발생

MP(모델 병렬화)

image

  • 모델을 여러 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는 이과정에서 네트워크 통신 비용을 최소화함.