모델이 GPU 하나에 들어가지 않을 때
DDP는 모든 GPU에 모델 전체를 복제해. 모델 하나가 GPU 메모리에 들어가지 않으면 이 방식을 쓸 수 없어. FullyShardedDataParallel(FSDP)는 매개변수, 기울기, 옵티마이저 상태를 GPU마다 나눠 보관해. 각 GPU는 전체의 1/N만 계속 들고 있고, 순전파와 역전파에 필요한 조각만 잠시 모았다가 다시 해제해. 그래서 충분한 수의 24GB GPU를 묶으면 700억 매개변수 규모의 모델도 학습할 수 있어.
샤딩 전략
- FULL_SHARD: 매개변수, 기울기, 옵티마이저 상태를 모두 나눠. 메모리를 가장 아끼므로 아주 큰 모델의 기본 선택이야.
- SHARD_GRAD_OP: 기울기와 옵티마이저 상태만 나누고 매개변수는 복제해. 매개변수 all-gather가 적어서 FULL_SHARD보다 빠를 수 있지만 메모리는 더 써.
- NO_SHARD: DDP와 같은 방식이야. 같은 학습 스크립트의 단위 테스트에 유용해.
FSDP1과 FSDP2
FSDP1은 모듈을 감싸는 기존 API야. FSDP2는 fully_shard()를 사용하는 매개변수별 방식으로, 인터페이스가 더 깔끔하고 torch.compile과도 잘 조합돼. 2026년의 최신 PyTorch를 대상으로 새 코드를 작성한다면 FSDP2를 우선할 수 있지만, FSDP1은 여전히 운영 환경에서 안정적이고 문서도 더 성숙해.
학습 반복문은 거의 그대로야
학습 반복문 안에서는 FSDP와 DDP가 거의 같아 보여. 모델을 감싸고 평소처럼 학습하면 돼. 복잡한 부분은 반복문이 아니라 중첩 모듈의 자동 감싸기 정책과 혼합 정밀도 같은 구성에 있어.