model 이 한 GPU 에 너무 클 때
DDP 가 모든 GPU 에 model replicate. model 자체가 안 들어가면 깨짐. FullyShardedDataParallel (FSDP) 가 model parameter, gradient, AND optimizer state 를 GPU 들에 shard. 각 GPU 가 1/N 만 들고, forward 와 backward 위 필요한 slice gather 한 후 release. 24GB GPU cluster 에 70B-parameter model train 가능하게 만든 거.
Sharding strategy
- FULL_SHARD — parameter, gradient, optimizer state shard. 가장 메모리 효율. 가장 큰 model 의 default 선택.
- SHARD_GRAD_OP — gradient 와 optimizer state 만 shard; parameter 는 replicate. parameter all-gather 없어서 FULL_SHARD 보다 빠르지만 더 메모리.
- NO_SHARD — DDP 등가. 같은 training script 공유하는 unit test 에 유용.
FSDP vs FSDP2
FSDP1 이 module wrap 하는 legacy API; FSDP2 (fully_shard() per-parameter approach) 가 새 in-development API, 깔끔한 interface 와 torch.compile 더 나은 composability. 2026 의 새 코드, bleeding-edge PyTorch 타겟이면 FSDP2 선호 — 근데 FSDP1 이 여전히 production-stable, 문서가 더 성숙.
같은 거 유지
training loop 안에선 FSDP 가 DDP 와 동일해 보여. model wrap 하고 평소대로 진행. 복잡도가 setup (nested module 의 auto-wrap policy, mixed-precision 설정) — loop 에 아님.