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은 이것들을 모듈처럼 조합해서 한 학습 루프 안에 넣는 걸 지향해요. 튜토리얼 섹션에서 각 기법에 대한 독립된 예제를 따라 하다 보면 감이 잡혀요.