Skip to main content
QUICK REVIEW

[논문 리뷰] Optimizing Performance of Recurrent Neural Networks on GPUs

Jeremy Appleyard, Tomáš Kočiský|arXiv (Cornell University)|2016. 04. 07.
Advanced Neural Network Applications참고 문헌 11인용 수 79
한 줄 요약

이 논문은 RNN 셀, 레이어 및 전체 네트워크 전반에서 최대한의 병렬성을 확보함으로써 GPU에서 순환 신경망(RNN) 학습을 크게 가속화하는 다단계 최적화 전략을 제시한다. 행렬 연산을 조합하고 CUDA 스트림을 활용해 동시 실행을 도모하며, 저수준의 cuBLAS 히وري스틱을 최적화함으로써 저자들은 순수 구현 대비 최대 10배의 성능 향상을 달성했으며, LSTM, GRU 및 단순 RNN에 대해 cuDNN v5에서 GPU의 최대 처리 능력에 근접한 성능을 확보했다.

ABSTRACT

As recurrent neural networks become larger and deeper, training times for single networks are rising into weeks or even months. As such there is a significant incentive to improve the performance and scalability of these networks. While GPUs have become the hardware of choice for training and deploying recurrent models, the implementations employed often make use of only basic optimizations for these architectures. In this article we demonstrate that by exposing parallelism between operations within the network, an order of magnitude speedup across a range of network sizes can be achieved over a naive implementation. We describe three stages of optimization that have been incorporated into the fifth release of NVIDIA's cuDNN: firstly optimizing a single cell, secondly a single layer, and thirdly the entire network.

연구 동기 및 목표

  • 깊고 큰 순환 신경망의 학습 시간이 수주 또는 수개월에 이르는 문제를 해결하기 위해.
  • GPU가 학습의 주요 하드웨어임에도 불구하고 표준 구현에서 GPU 활용도가 종종 최적화되지 않은 문제를 개선하기 위해.
  • NVIDIA의 cuDNN 라이브러리에 성능 최적화된 RNN 커널을 개발하고 통합하여 광범위한 사용을 가능하게 하기 위해.
  • 개별 RNN 셀, 전체 레이어 및 전체 네트워크 전반에서의 병렬성을 폭로하고 최대한의 하드웨어 처리 능력을 확보하기 위해.

제안 방법

  • LSTM 게이트당 네 개의 행렬 곱셈을 하나의 더 큰 행렬 곱셈으로 재구성하여 병렬성 향상과 커널 실행 오버헤드 감소를 도모하기 위해.
  • 독립적인 행렬 곱셈(예: 입력 및 순환 가중치)을 동시에 실행하기 위해 CUDA 스트림을 활용하여 GPU 점유율을 높이고 지연 시간을 숨기기 위해.
  • 특히 더 깊은 네트워크에서 메모리 및 계산 자원 활용도를 향상시키기 위해 레이어 간 순방향 및 역방향 전파를 겹쳐 실행하기 위해.
  • 고병렬성 환경에서 자원 효율적인 실행 경로를 우선시하기 위해 cuBLAS 히وري스틱을 수동으로 최적화하여, 기본 히وري스틱이 하드웨어를 제대로 활용하지 못할 수 있는 상황을 우회하기 위해.
  • 유사한 최적화 전략을 GRU(세 개의 행렬 그룹) 및 단순 RNN에 적용하였으며, 후자는 입력당 하나의 행렬만 존재해 행렬 그룹화의 이점을 얻을 수 없음.
  • 단일 큰 행렬 곱셈을 사용해 가중치 갱신을 구현하여 거의 최고 성능에 도달했으며, 편향 갱신은 계산적으로 무시할 수 있음.

실험 결과

연구 질문

  • RQ1현대 GPU에서 RNN 셀과 레이어 전반에서 더 많은 병렬성을 폭로함으로써 RNN 학습에서 뚜렷한 성능 향상을 달성할 수 있는가?
  • RQ2행렬 연산을 조합하고 CUDA 스트림을 사용하는 것이 LSTM 및 GRU 네트워크의 처리 능력 향상에 어느 정도 기여하는가?
  • RQ3라이브러리가 고수준 알고리즘적 맥락을 인지하지 못하는 상황에서, 저수준 최적화(예: cuBLAS 히وري스틱의 수동 최적화)가 성능에 어떤 영향을 미치는가?
  • RQ4다양한 미니배치 크기 및 은닉 상태 크기에 따라 레이어 수준의 겹침 및 배치 전략의 성능 영향은 어떠한가?
  • RQ5큰 은닉 상태에서 특정 미니배치 크기(예: 32)에서 성능이 떨어지는 이유는 무엇이며, 이를 어떻게 완화할 수 있는가?

주요 결과

  • NVIDIA M40 GPU에서의 난이한 RNN 구현은 단지 0.4 TFLOPS를 기록하여 하드웨어의 최대 성능(약 5.8 TFLOPS)의 10% 미만에 그침.
  • 행렬 연산을 그룹화함으로써 병렬성 향상과 커널 실행 오버헤드 감소로 인해 처리 능력이 두 배로 증가하여 0.8 TFLOPS로 향상됨.
  • CUDA 스트림을 사용해 독립적인 행렬 곱셈을 동시에 실행함으로써 성능이 최대 2배로 향상되었으며, 특히 병렬성이 낮은 경우에 효과적임.
  • 레이어 겹침 전략은 특히 더 깊은 네트워크에서 뚜렷한 성능 향상을 제공하며, 큰 미니배치 크기(예: 256) 및 큰 은닉 상태(예: 4096)에서도 성능 향상 유지됨.
  • 고스트림 환경에서 병렬성보다 자원 효율성을 우선시하도록 cuBLAS 히وري스틱을 수동으로 최적화함으로써 측정 가능한 성능 향상이 발생했으며, 특히 대역폭 제약 영역에서 두드러짐.
  • cuDNN v5에 통합된 최종 구현은 다양한 네트워크 크기에서 거의 최고 성능을 달성했으며, 고유의 병렬성이 제한된 작은 깊은 네트워크에서 가장 큰 성능 향상이 관찰됨.

더 나은 연구,지금 바로 시작하세요

연구 설계부터 논문 작성까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.