Reduce

distributedcollectivereduce

Reduce는 여러 rank의 값을 합산해서 하나의 destination rank에만 결과를 만드는 collective operation이다.

Before Reduce

rank 0
12
rank 1
1020
rank 2
100200

After Reduce

rank 0
111222
sum
rank 1
1020
rank 2
100200
Reduce는 여러 rank의 값을 합쳐 하나의 destination rank만 결과를 갖게 한다.

Before와 after

Before reduce
rank 0: [1, 2]
rank 1: [10, 20]
rank 2: [100, 200]

After reduce
rank 0: [111, 222]
rank 1: [10, 20]
rank 2: [100, 200]

여기서 rank 0이 destination이다. 같은 위치의 값끼리 더해서 rank 0에만 합산 결과를 만든다.

행렬곱에서 왜 필요한가

행렬곱에서 inner dimension을 여러 rank가 나눠 계산하면 각 rank는 full C가 아니라 partial C를 만든다.

final C = partial C0 + partial C1 + partial C2

최종 C를 한 rank에만 만들면 충분하다면 reduce를 사용할 수 있다.

Reduce partial C to one rank

rank 0
partial C0+partial C1+partial C2
result
final C on rank 0
inner dimension을 나눠 곱하면 각 rank는 partial C만 만든다. Reduce는 partial C들을 더해 destination rank 하나에만 final C를 만든다.

언제 쓰는가

Reduce는 여러 rank의 partial result를 합치되, 결과가 하나의 rank에만 있으면 충분할 때 쓴다.

partial results on many ranks -> sum on one rank

확인

  • Reduce는 값을 모으기만 하는가, 같은 위치끼리 더하는가?
  • Reduce 이후 모든 rank가 합산 결과를 갖는가?
  • partial C들을 한 rank에만 합쳐도 되는 상황은 어떤 경우일까?