FairScale 개요 — 병렬화·셔딩·메모리 최적화
FairScale 개요 — 병렬화·셔딩·메모리 최적화
모델 크기가 커지면서 메모리에 다 못 올리는데 어쩌지? 하는 문제가 생겨요. FairScale 은 이런 상황에서 PyTorch의 기본 능력을 확장해 최신 분산 학습 기법을 조합 가능한 API로 내놓는 라이브러리예요.
출처: https://fairscale.readthedocs.io/en/latest/what_is_fairscale.html
FairScale은 세 가지 가치를 설계 기준으로 잡았어요: 사용성(최소한의 인지 부하로 쓰기), 모듈성(여러 API를 학습 루프에 자연스럽게 조합), 성능(스케일링과 효율 면에서 최상).
전통적인 대규모 학습은 데이터 병렬 처리(data parallelism)로 시작해요. 여러 디바이스로 큰 배치를 한 번에 학습해 목표 정확도에 더 빨리 도달하는 방식이죠. 그런데 모델이 커지면 데이터 병렬만으로는 부족해져요. FairScale이 제공하는 해법은 크게 세 축이에요:
- 병렬화(Parallelism) — 레이어 병렬과 텐서 병렬로 모델을 쪼개는 기법.
- 셔딩(Sharding) — 메모리와 연산의 트레이드오프를 조절해 모델 레이어·파라미터, 옵티마이저 상태, 그래디언트를 나눠 담아 메모리 사용을 줄이고 연산을 효율화.
- 최적화(Optimization) — 규모와 무관하게 메모리를 최적화하거나, 하이퍼파라미터 튜닝 없이 학습하는 기법 등 전반적인 학습 성능 최적화.
핵심은 이 기법들이 각자 따로 노는 게 아니라 조합할 수 있는 모듈이라는 점이에요. 예를 들어 특정 스케일링 기법은 데이터 병렬과 함께 쓰고, 특정 기법은 파이프라인 병렬과 함께 쓰는 식으로 스택을 만들 수 있어요.