FairScale 사용자 워크플로 — 어떤 기법을 고를까

FairScale 사용자 워크플로 — 어떤 기법을 고를까

FairScale에서 어느 API를 쓸지 고르는 건 내가 병목은 메모리인가, 연산인가, 커뮤니케이션인가를 정하는 일과 같아요. docs는 사용자 워크플로 다이어그램으로 각 기법을 어떤 상황에서 선택하면 좋을지 안내해요.

출처: https://fairscale.readthedocs.io/en/latest/getting_started.html

이 페이지는 사실상 다이어그램 중심이라, 실제 선택 기준은 딥 다이브와 튜토리얼에서 더 풍부하게 나와요. 대표적으로 이렇게 생각하면 돼요:

  • 단일 GPU에서도 메모리가 부족하다OffloadModel 로 파라미터·옵티마이저 상태를 CPU로 내리기.
  • GPU 여러 개를 데이터 병렬로 쓰는데 메모리가 모자라다OSS(Optimizer State Sharding) 또는 SDP(Sharded Data Parallel) 로 옵티마이저/그래디언트를 나눠 담기.
  • 모델이 GPU 메모리의 수십 배로 크다파이프라인 병렬(pipe) 과 텐서 병렬로 모델 자체를 쪼개기.
  • 활성화(activation) 메모리가 걱정된다활성화 체크포인팅(Activation Checkpointing) 으로 재계산 비용과 메모리를 맞바꾸기.
  • 학습률을 재조정하고 싶지 않다Adascale 로 하이퍼파라미터 튜닝 부담 줄이기.

이렇게 각 기법은 목적이 명확히 나뉘고, FairScale은 이것들을 모듈처럼 조합해서 한 학습 루프 안에 넣는 걸 지향해요. 튜토리얼 섹션에서 각 기법에 대한 독립된 예제를 따라 하다 보면 감이 잡혀요.

더 알아보기