FairScale 딥 다이브 — OSS·SDP·FSDP와 메모리 관리
FairScale 딥 다이브 — OSS·SDP·FSDP와 메모리 관리
대규모 학습의 가장 큰 걸림돌은 옵티마이저 상태·그래디언트·활성화가 GPU 메모리를 잡아먹는 문제예요. FairScale의 OSS(Optimizer State Sharding), SDP(Sharded Data Parallel), FSDP(Fully Sharded Data Parallel) 는 이 메모리를 어떻게 나눠 담는지를 다루는 기법이에요.
출처: https://fairscale.readthedocs.io/en/latest/deep_dive/oss_sdp_fsdp.html
OSS(Optimizer State Sharding) 는 옵티마이저 상태만 여러 GPU에 나눠 담는 방식이에요. 옵티마이저 상태는 파라미터보다 몇 배나 커서(예: Adam은 파라미터의 2배) 이것만 잘 나눠도 아낄 수 있는 메모리가 크게 줄어요.
SDP(Sharded Data Parallel) 는 데이터 병렬 처리 + 옵티마이저 상태 셔딩을 결합해, 그래디언트와 옵티마이저 상태를 모두 쪼개서 담는 기법이에요.
FSDP(Fully Sharded Data Parallel) 는 파라미터·그래디언트·옵티마이저 상태를 전부 쪼개는 완전 셔딩 방식이에요. 이 개념은 이후 PyTorch 자체의 native FSDP로도 이어지며 분산 학습의 표준으로 자리잡았어요.
더불어 FairScale의 활성화 체크포인팅(Activation Checkpointing) 은 포워드 중간 활성화를 저장하지 않고 backward 때 다시 계산하는 전략이에요. 메모리를 아끼는 대신 연산을 더 하는 트레이드오프이며, 큰 모델을 한 장 GPU에 올릴 때 핵심 기법이 돼요.
참고: FairScale은 research용으로 널리 쓰였고, 유사한 기능이 PyTorch로 흡수·진화하면서 오늘날 생태계의 토대가 됐어요. 최신 버전에서는 의존성·유지보수 측면을 확인하고 쓰는 걸 권장해요.