버키팅을 이용한 언어 모델 학습 - Slime0519/Training_LM GitHub Wiki
Bucketing을 이용한 GPT2학습
Bucketing이란?
(그림 출처 : https://medium.com/@rashmi.margani/how-to-speed-up-the-training-of-the-sequence-model-using-bucketing-techniques-9e302b0fd976)
Sequence padding에 의해 생기는 문제
- 자연어 모델 학습 시에는 input batch의 sequence length를 똑같이 맞춰주기 위해 padding을 이용한다.
- 하지만, 일반적인 padding은 dataset의 가장 긴 sequence를 기준으로 padding을 적용하게 되는데, 그러면 자연어 모델 혹은 시계열 데이터를 다루는 모델 학습 시 연산 효율이 매우 떨어지게 된다.(일례로, BERT는 Seq length를 N이라고 했을 때, O(N^2)의 연산 복잡도를 가진다.)
- 일반적으로 zero-padding은 의미가 없기 때문에, 학습 시에는 zero-padding을 줄이는 것이 자원을 효율적으로 사용할 수 있는 방법이다.
Bucketing
- 앞서 말한 것처럼, 배치에 들어가는 데이터들에서 padding의 비율을 최대한 줄이는 것이 관건이다.
- 이를 위해서 Bucketing이라는 방법이 제시되었는데, 이는 데이터셋 전체에 대해 max-length를 구하고 padding을 적용해 주는 것이 아니라, Batch 단위로 padding을 해준다.