Parallelism vs Sharding

trainingdistributedshardingparallelism

LLM 학습 문맥에서 parallelismsharding은 겹치지만 같은 말은 아니다.

Parallelism

여러 GPU가 일을 나눠 수행한다.

GPU 0
data A
GPU 1
data B
GPU 2
data C
예: DP는 같은 모델 복사본들이 서로 다른 데이터를 처리한다.

Sharding

큰 tensor나 state를 조각내 저장한다.

GPU 0
state 0
GPU 1
state 1
GPU 2
state 2
예: ZeRO는 optimizer state, gradient, parameter를 DP rank에 나눠 저장한다.

핵심 구분은 다음과 같다.

parallelism = 일을 여러 GPU가 나눠 수행하는 전략
sharding    = tensor나 state를 여러 GPU에 조각내 저장하는 방법

DP는 병렬화지만 샤딩은 아니다

vanilla DP에서는 모델이 GPU마다 복제된다.

GPU 0: full model
GPU 1: full model
GPU 2: full model
GPU 3: full model

나눠지는 것은 데이터다.

GPU 0: micro-batch A
GPU 1: micro-batch B
GPU 2: micro-batch C
GPU 3: micro-batch D

그래서 DP는 병렬화다. 하지만 parameter, gradient, optimizer state를 기본적으로 shard하지는 않는다.

ZeRO는 DP 위의 샤딩이다

ZeRO는 DP rank 사이의 중복 메모리를 줄이기 위해 optimizer state, gradient, parameter를 shard한다.

ZeRO-1: optimizer state sharding
ZeRO-2: optimizer state + gradient sharding
ZeRO-3: optimizer state + gradient + parameter sharding

즉 ZeRO는 DP와 무관한 별도 세계가 아니라, DP 축을 따라 중복된 학습 state를 나눠 저장하는 방법이다.

TP는 왜 헷갈리는가

Tensor Parallelism은 weight matrix를 나눠 계산하므로 물리적으로는 sharding처럼 보인다.

GPU 0: W의 일부
GPU 1: W의 일부

하지만 TP의 주목적은 단순히 저장 공간을 줄이는 것이 아니라, 한 layer의 matmul 계산을 여러 GPU가 함께 수행하는 것이다. 그래서 보통 parallelism 전략으로 분류한다.

확인

  • DP에서 모델 parameter는 기본적으로 복제되는가, shard되는가?
  • ZeRO가 shard하는 세 가지 큰 대상은 무엇인가?
  • TP가 sharding처럼 보이지만 parallelism으로 불리는 이유는 무엇인가?