AllReduce
AllReduce는 여러 rank의 값을 합산한 뒤, 모든 rank가 같은 합산 결과를 갖게 하는 collective operation이다.
Before AllReduce
rank 0
12
rank 1
1020
rank 2
100200
After AllReduce
rank 0
111222
rank 1
111222
rank 2
111222
Before와 after
Before all-reduce
rank 0: [1, 2]
rank 1: [10, 20]
rank 2: [100, 200]
After all-reduce
rank 0: [111, 222]
rank 1: [111, 222]
rank 2: [111, 222]
Reduce와 마찬가지로 같은 위치끼리 더한다. 차이는 합산 결과를 destination rank 하나가 아니라 모든 rank가 갖는다는 점이다.
행렬곱에서 왜 필요한가
inner dimension을 나눠 행렬곱을 하면 각 rank는 partial C를 만든다.
rank 0: partial C0
rank 1: partial C1
rank 2: partial C2
모든 rank가 다음 계산에서 같은 final C를 계속 사용해야 한다면, partial C를 합친 결과를 모든 rank가 가져야 한다.
AllReduce partial C to every rank
rank 0
partial C0->final C
rank 1
partial C1->final C
rank 2
partial C2->final C
언제 쓰는가
AllReduce는 여러 rank의 partial result를 합치고, 합쳐진 결과를 모두가 필요로 할 때 쓴다.
partial results on many ranks -> every rank has summed result
확인
- Reduce와 AllReduce의 차이는 무엇인가?
- AllReduce는 gather처럼 값을 이어 붙이는가, reduce처럼 값을 더하는가?
- inner dimension을 나눠 계산한 partial
C를 모든 rank가 필요로 하면 왜 AllReduce가 자연스러운가?