#데이터병렬
2편
- 분산 학습 — 계산을 나누면 통신이 남는다GPU를 32배 늘려도 32배 빨라지지 않는다. 나눌 수 없는 부분이 5%만 있어도 12.1배에서 멈췄고, 20%면 5.1배였다. 나누는 방식마다 통신량도 달랐다 — 데이터 병렬은 스텝마다 28GB, 파이프라인은 0.067GB다. 그리고 분산은 속도만을 위한 것이 아니다. 학습에는 파라미터의 4.0배가 드는데(실측), 그것을 32장에 쪼개면 장당 112GB가 3.5GB가 된다
- 큰 배치와 그래디언트 축적 — 분산 학습의 산수여러 GPU로 학습한다는 것은 결국 배치를 나눠 계산하고 그라디언트를 평균하는 일이다. 배치 128짜리 4개의 평균이 배치 512 한 번과 오차 9e-10으로 같았다. 배치를 키우면 그라디언트 잡음이 정확히 1/B로 줄었고(로그 기울기 -1.00), 그만큼 최적 학습률도 함께 커졌다(배치 16배에 학습률 10배)