HuggingFace 모델을 두 배 빠르게 훈련하기
Transformer의 훈련 시간 단축을 위한 옵션
이 보고서의 목적은 정확도에 부정적 영향을 미치지 않고 훈련 시간을 크게 줄일 수 있는 2가지간단한 최적화 방법을 탐구하는 것에 있습니다.
우리는 잘 알려진 대규모 NLP 데이터 세트 (X-NLI의 프랑스어 부분)에 대해 21 개의 실험 + 12 개의 재현성 실험을 실행했으며, 기본 매개 변수 인 기본 매개 변수 인 CamemBERT (프랑스어BERT 모델)를 사용하여 간단히 보여줍니다. 단일 소비자 등급 GPU 및 이러한 최적화를 통해 모델의 기본 특성을 위해 128 개의 최대 토큰 길이에 대해 16 분 훈련으로 81.5 %의 정확도에 도달하여 56 분 훈련으로 얻은 점수보다 0.5 점 더 높은 점수를 얻을 수 있습니다. 최적화 없이CamemBERT 모델 작성자가 이 작업에 대해보고 한 점수보다 0.3 점 더 높았습니다.
동일한 모델에서 493 개의 최대 토큰 길이에 대한 이득은 훨씬 더 인상적입니다. 여기서 훈련 시간은 최적화없이 4h38에서 모든 최적화를 통해 1h01로 감소하지만 여전히 동일한 점수에 도달합니다. 대형 모델 (128 개의 토큰 길이에 대해 4 시간에서 1 시간 30 분으로)에서도 유사한 학습 시간 단축에 도달했습니다.
더 자세한 내용은 Medium 기사를 참조하시기 바랍니다.
저희는 wandb
에 로그한 X-NLI
의 프랑스어 부분에 대해서 많은 실험을 수행했습니다:
base
Camembert 모델: 14번 실험 + 5번 재현성 실험large
t 모델: 7번 실험 + 5번 재현성 실험
각 케이스에서 (base
/large
), 실험은 다음 두 그룹으로 나뉩니다:
- 최대 128 토큰 64 시퀀스의 mini-batch
- 최대 493 토큰 2X8 시퀀스의 mini-batch
이 기사에서 설명한 바와 같이, 128 토큰 설정은 훈련 세트 예시의 3% truncation(절단)을 발생시킵니다.
이러한 각 그룹의 경우, 저희는 훈련 가속화를 위해 다음의 3가지 최적화 조합을 고려했습니다:
- 혼합 정밀도 (mixed-precision) (gcc7으로 컴파일된 Nvidia Apex)
- 동적 패딩 (dynamic padding)
- 스마트 배치(smart batching) (기사에서는 uniform length batching(균일한 길이 배치)으로 명시됨. 실험은 이 바보 같은 이름으로 로그 되었기 때문에, 이 보고서를 위해서 계속 사용)
이러한 실험을 직접 실행하고 싶으신 경우, 이 Github gist에서 소스 코드를 사용하실 수 있습니다.
보고서의 첫 번째 부분에서는 모델의 base 특징에 중점을 둡니다.
보고서의 첫 번째 부분에서는 모델의 base
특징에 중점을 둡니다.
시퀀스 길이에 어떠한 제한도 적용하지 않은 경우, 가장 짧은 훈련 시간은 활성화된 mixed precision(혼합 정밀도), dynamic padding(동적 패딩), smart batching(스마트 배치)의 3가지 옵션과 함께 얻을 수 있었습니다. 즉, 이 세 가지 옵션은 각각 유용하다는 것을 의미합니다.
그러나, 각 옵션은 동일한 영향력을 가지지 않을 수 있습니다. 지금까지 dynamic padding(동적 패딩)이 가장 큰 영향을 미치므로, 시퀀스의 97%가 길이에서 128 시퀀스 미만인 데이터 세트에서 의미가 있습니다. Smart batching(스마트 배치)은 이 전략에 도움이 되며, 두 번째로 중요한 옵션입니다.
훈련 시간 – base 모델 – 128 토큰 64 시퀀스 1 단계 배치(batch)
128 토큰 길이를 적용한 경우, 가장 짧은 훈련 시간은 다시 활성화된 다음 세 가지 옵션과 함께 달성됩니다: mixed precision(혼합 정밀도), dynamic padding(동적 패딩), smart batching(스마트 배치)
However, the impact of mixed precision is more important than before.
- Mixed precision(혼합 정밀도) 단독은 dynamic padding(동적 패딩) 및 smart batching(스마트 배치) 단독보다 4% 빠릅니다.
- Mixed precision(혼합 정밀도) 단독은 dynamic padding(동적 패딩) 및 smart batching(스마트 배치)과 결합한 Mixed precision(혼합 정밀도)보다 34% 느립니다.
Github gist 전체 코드 →
정확도 – base 모델 – 전체 설정
어떤 그룹화를 하든 단순한 트렌드가 나타나지 않으므로 저희는 모든 설정(setup)을 함께 분석하겠습니다. 즉, 속도 최적화는 정확도에 뚜렷한 영향을 미치지 않습니다.
우선, 우리는 모든 스코어가 0.810과 0.820 사이임을 알 수 있으며, 즉 다양한 패턴을 가진 많은 실험에서는 아주 작은 차이(gap)입니다.
이 모델의 풍미에 대해 Camembert 논문 (0.812)에보고 된 점수보다 항상 높습니다.
2가지 설정에서 최고 스코어에 (0.820) 도달합니다:
- Dynamic padding(동적 패딩)만을 사용한 128 토큰 64 시퀀스의 배치(batch)
- Dynamic padding(동적 패딩)만을 사용한 493 토큰 16 시퀀스의 배치(batch)
Dynamic padding(동적 패딩) 단독으로 정확도가 향상되는 것을 설명할만한 적절한 이유는 없습니다. 운이 좋았다고 생각합니다.
체크할 다른 옵션으로는 다른 활성화된 옵션이 없는 설정과 비교하여 smart batching(스마트 배치) 단독 효과가 있습니다.
- 493 토큰 16 시퀀스의 배치, 옵션 없음: 0.814
- smart batching(스마트 배치)만을 사용한 493 토큰 16 시퀀스의 배치: 0.816
- 493 토큰 64 시퀀스의 배치, 옵션 없음: 0.810
- smart batching(스마트 배치)만을 사용한 128 토큰 64 시퀀스의 배치: 817
Smart batching(스마트 배치)은 정확도에 있어 약간의 긍정적 영향을 미치는 것으로 보입니다.
Github gist 전체 코드 →
훈련 시간에 대한 트레이드 오프 정확도 / 훈련 시간 - 8X2 시퀀스 493 토큰의 배치(batch)
64 시퀀스 128 토큰의 배치에 대한 트레이드 오프 정확도 / 훈련 시간
재현성 실험 – base 모델
서로 다른 시드(seed)와 함께 가장 빠른 설정을 (dynamic padding(동적 패딩) + smart batching(스마트 배치) + mixed-precision(혼합 정밀도) + 128 최대 토큰 길이) 5번 재실행했으며, 이 모델의 풍미에 대해 Camembert 논문 (0.812)에보고 된 점수보다 항상 높습니다.
Large 모델 실험
\보고서의 두 번째 부분은 base
특성 (1 억 1 천만 매개 변수) 대신 모델의 large 특성 (335M 매개 변수)에 전념합니다.
보고서의 두 번째 부분은 base
특성 (1 억 1 천만 매개 변수) 대신 모델의 large 특성 (335M 매개 변수)에 전념합니다.
-
최대 128 토큰 길이의 경우, 단계 크기(step size)는 8이며, 저희는 16개 예시의 배치(batch)에 도달하기 위해 2개의 단계를 누적합니다
-
최대 493 토큰 길이의 경우, 단계 크기(step size)는 2이며, 저희는 16개 예시의 배치(batch)에 도달하기 위해 8개의 단계를 누적합니다
Medium 기사에 제시된 두 가지 최적화 목적은 배치(batch)/단계(step) 생성에 초점을 두고 있습니다. 모델이 3배 키지만 저희가 테스트에 사용하는 GPU 크기는 12GB로 제한되어 있음으로, 단계 크기(step size)는 더 작습니다.
어떠한 최적화도 없으면, 훈련 시간은 매우 깁니다 (493 토큰 길이의 경우 15시간, 128 토큰의 경우 4시간). 모든 최적화를 사용하면, 훈련 시간은 감소하지만, 여전히 깁니다 (493 토큰 길이의 경우 7시간, 128 토큰의 경우 1시간 30분).
설정이 어떻든 간에 (최적화가 있든 없든), 1 에포크(epoch) 동안 얻은 스코어는 10 에포크(epoch) + 조기 종료로(early stopping) 논문에 보고된 스코어보다 살짝 낮습니다 (가장 최적화된 large 모델은 0.856에 도달했으며, 논문의 경우 0.857에 도달했다고 보고).
훈련 시간 – large 모델 – 128 토큰 8 시퀀스 2 단계의 배치(batch)
훈련 시간 – large 모델 – 493 토큰 2 시퀀스 4 단계의 배치(batch)
재현성 실험 – large 모델
다음 단계
여러분께 이 기사가 도움이 되었기를 바라며, 직접 이러한 실험을 해보시기 바랍니다. 소스 코드는 Github gist에서 사용하실 수 있습니다.
Twitter @pommedeterre33에서 저를 팔로우 하실 수 있습니다.