[논문 리뷰] Optimizing Inference Performance of Transformers on CPUs
이 논문은 HuggingFace의 벤치마크를 사용하여 BERT에서 CPU 기반 추론을 최적화하기 위해 세 가지 행렬 곱셈(matmul) 최적화 기법을 제안한다: 적응형 행렬 전치, matmul 호출에서의 순차적 오버헤드 감소, 및 조정된 행렬 분할. 모델 정확도를 변경하지 않거나 프레임워크 수정 없이도 최대 2.37배의 성능 향상을 달성한다.
The Transformer architecture revolutionized the field of natural language processing (NLP). Transformers-based models (e.g., BERT) power many important Web services, such as search, translation, question-answering, etc. While enormous research attention is paid to the training of those models, relatively little efforts are made to improve their inference performance. This paper comes to address this gap by presenting an empirical analysis of scalability and performance of inferencing a Transformer-based model on CPUs. Focusing on the highly popular BERT model, we identify key components of the Transformer architecture where the bulk of the computation happens, and propose three optimizations to speed them up. The optimizations are evaluated using the inference benchmark from HuggingFace, and are shown to achieve the speedup of up to x2.37. The considered optimizations do not require any changes to the implementation of the models nor affect their accuracy.
연구 동기 및 목표
- 생산 웹 서비스에서 널리 사용되고 있음에도 불구하고 CPU 기반 시스템에서의 Transformer 추론 성능 최적화 문제는 아직 탐색되지 않은 도전 과제임을 다룸.
- BERT 추론에서의 주요 성능 저하 원인으로 행렬 곱셈(matmul)을 규명함.
- 모델 아키텍처를 수정하지 않거나 추론 정확도에 영향을 주지 않는, 하드웨어 인지적이고 비침습적인 세 가지 최적화 기법을 제안함.
- Intel Skylake CPU에서 다양한 시퀀스 길이와 스레드 수에 걸쳐 확장성과 성능 향상이 뚜렷하게 향상됨을 입증함.
- BERT를 초월해 다양한 모델(예: BERT-base)과 수학 라이브러리(예: oneDNN)에서도 일반화 가능함을 검증함으로써 BERT를 넘어서는 적용 가능성을 넓힘.
제안 방법
- 입력 행렬을 matmul 전에 전치할지 여부를 동적으로 선택하는 적응형 행렬 전치를 구현함으로써 데이터 국소성과 캐시 활용도를 향상시킴.
- 딥러닝 프레임워크에서의 매 호출 당 지연 시간을 분석하고 최소화하여 matmul 호출에서의 순차적 오버헤드를 감소시킴으로써 스레드 수준의 확장성 향상.
- oneDNN의 GEMM 커널에서 행렬 분할 파라미터(BK, BM, BN)를 조정하여 CPU 캐시 계층에 더 잘 맞추고, 특히 최종 레벨 캐시(LLC) 미스를 감소시킴.
- BK를 384에서 64로 줄임으로써 더 작은 캐시 우수한 부분 행렬을 만들고, 명령어 수준의 병렬성 향상.
- 성능 카운터( perf를 통해 측정)를 활용하여 최적화된 oneDNN 버전에서 LLC 미스 감소와 더 높은 IPC를 검증함.
- PyTorch와 oneDNN를 사용하여 HuggingFace 추론 벤치마크를 통해 모든 최적화 기법을 평가하고, 다양한 시퀀스 길이와 스레드 수에서 지연 시간 측정.
실험 결과
연구 질문
- RQ1왜 matmul이 CPU에서의 BERT 추론에서 주요 성능 저하 원인이 되며, 스레드 수가 증가함에 따라 성능 확장성은 어떻게 저하되는가?
- RQ2데이터 국소성과 캐시 효율성을 향상시킴으로써 적응형 행렬 전치가 matmul 성능 향상에 얼마나 기여하는가?
- RQ3matmul 호출에서의 순차적 오버헤드가 확장성에 어떤 제약을 주며, 기반 프레임워크를 변경하지 않고도 이를 줄일 수 있는가?
- RQ4행렬 분할 파라미터(BK, BM, BN 등)를 조정하면 CPU 캐시를 더 효과적으로 활용하고 캐시 미스를 줄여 성능 향상에 기여할 수 있는가?
- RQ5관측된 성능 향상은 다양한 Transformer 모델과 수학 라이브러리에 일반화 가능한가?
주요 결과
- 제안된 최적화 기법은 다양한 시퀀스 길이와 스레드 수에서 BERT-large에서 최대 2.37배의 추론 성능 향상을 달성함.
- 적응형 행렬 전치만으로도 짧은 시퀀스(예: 8 토큰)에서는 최대 1.44배의 성능 향상, 긴 시퀀스(예: 384 토큰)에서는 16 스레드에서 1.19배의 성능 향상 달성.
- 행렬 분할 크기를 줄임(BK를 384에서 64로)하면 4 스레드에서 1.16배, 16 스레드에서 1.19배의 성능 향상가능하며, 이는 마지막 레벨 캐시(LLC) 미스 감소와 함께 측정됨.
- 성능 카운터 분석 결과 최적화된 oneDNN 버전은 유사한 명령어 수를 유지하면서도 지연 시간 당 사이클 수를 줄이고 IPC를 높여 하드웨어 활용도 향상을 보임.
- 최적화 기법은 다양한 모델에 효과적임: BERT-base 역시 조정된 분할을 통해 뚜렷한 지연 시간 감소를 보이며 보다 넓은 적용 가능성을 확인함.
- 레이어 정규화에서 소비하는 시간 비율이 스레드 수가 증가함에 따라 2.9% (1 스레드)에서 12% (16 스레드)로 증가함을 확인하여, 향후 최적화 대상으로 이러한 연산도 고려되어야 함.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.