로컬 그래디언트 누적(Local Gradient Accumulation)으로 학습 속도 1.7배 향상
파이프라인의 유휴 시간(idle time)으로 인해 학습 속도가 정체되는 경우가 많습니다. 이러한 유휴 시간을 '버블(bubble)'이라고 부릅니다.
PACI라고 불리는 새로운 방법이 이 문제를 해결합니다. PACI는 이러한 버블을 제거하여 학습 속도를 1.69배 높여줍니다.
대부분의 팀은 1F1B-flush라고 불리는 전략을 사용합니다. 이 방법은 가중치(weights)의 일관성을 유지하지만, 시스템이 데이터를 기다리는 빈 슬롯을 생성합니다. 이러한 대기 시간은 전체적인 속도를 저하시킵니다.
다른 비동기(asynchronous) 방식들도 이를 해결하려 시도합니다. 이들은 가중치 저장(weight stashing)이나 복제본 생성과 같은 복잡한 트릭을 사용합니다. 하지만 이러한 트릭은 메모리를 너무 많이 사용하며 학습을 불안정하게 만드는 경우가 많습니다.
PACI는 다른 길을 택합니다. 바로 로컬 그래디언트 누적(local gradient accumulation)을 사용하는 것입니다. 이를 통해 전역 동기화(global synchronization) 없이도 파이프라인을 계속 가동 상태로 유지할 수 있습니다.
PACI가 중요한 이유는 다음과 같습니다:
- 표준 방식과 동일한 수준의 안정성을 유지합니다.
- 메모리 사용량이 동일합니다.
- 더 빠르지만 더 무거운 설정의 속도에 도달합니다.
- 정확도 도달 시간(time-to-accuracy)을 1.69배 단축합니다.
GPT-2 Medium을 이용한 테스트에서 PACI는 목표 정확도에 훨씬 더 빠르게 도달했습니다. 이는 약간의 가중치 드리프트(weight drift)를 허용하는 대신 엄청난 효율성 이득을 얻을 수 있음을 보여줍니다.
엔지니어링 팀에게 이는 하드웨어 비용을 40% 절감할 수 있음을 의미합니다. 더 많은 GPU를 구매하거나 메모리를 추가하지 않고도 더 빠른 결과를 얻을 수 있습니다.
연구진은 GPT 스타일 모델을 사용하여 8단계 파이프라인에서 이를 테스트했습니다. 파이프라인 깊이나 배치 크기(batch size)를 변경하는 경우 누적 윈도우(accumulation window)를 조정해야 할 수도 있습니다.
직접 테스트해 볼 수도 있습니다. 저자들은 저장소(repository)에 로컬 누적 래퍼(local-accumulation wrapper)를 제공합니다. 현재 사용 중인 flush 동기화기를 이것으로 교체하여 속도 향상을 확인해 보세요.
Source: https://dev.to/olaughter/local-gradient-accumulation-speeds-training-17x-2mdk
Optional learning community: https://t.me/GyaanSetuAi