Skip to main content
QUICK REVIEW

[論文レビュー] Optimizing Performance of Recurrent Neural Networks on GPUs

Jeremy Appleyard, Tomáš Kočiský|arXiv (Cornell University)|Apr 7, 2016
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ゲートごとに4つの行列乗算を1つの大きな行列乗算に再定式化することで、並列性を向上させ、カーネル起動のオーバーヘッドを削減する。
  • CUDAストリームを用いて、独立した行列乗算(例:入力重みと再帰的重み)を同時に実行することで、GPUの占有率を向上させ、レイテンシを隠蔽する。
  • レイヤー間で前方伝搬と逆伝搬を重ねて実行することで、特に深層ネットワークにおいてメモリと計算の利用効率を向上させる。
  • 高並列性のシナリオにおいて、リソース効率の高い実行パスを優先するようにcuBLASヒューリスティクスを手動でチューニングし、デフォルトのヒューリスティクスがハードウェアを十分に活用しない場合を回避する。
  • 同様の最適化戦略をGRU(3つの行列グループ)および単純なRNNに対しても適用したが、後者は入力ごとに1つの行列しか持たないため、行列グループ化の恩恵を受けることができない。
  • 重み更新を1つの大きな行列乗算で実装することで、ピーク性能に近い性能を達成し、バイアス更新は計算的に無視できるほど小さい。

実験結果

リサーチクエスチョン

  • RQ1現代のGPU上でRNNセルとレイヤーにわたるより多くの並列性を露呈させることで、RNN学習における顕著なパフォーマンス向上を達成できるか?
  • RQ2行列演算の組み合わせとCUDAストリームの使用が、LSTMおよびGRUネットワークのスループットにどの程度向上効果をもたらすか?
  • RQ3低レベルの最適化、例えばcuBLASヒューリスティクスの手動チューニングが、上位レベルのアルゴリズム的文脈をライブラリが認識しない状況でパフォーマンスにどのような影響を与えるか?
  • RQ4異なるミニバッチサイズおよび隠れ状態サイズにおいて、レイヤー単位のオーバーラップとバッチ処理戦略のパフォーマンスへの影響は何か?
  • RQ5大きな隠れ状態に対して特定のミニバッチサイズ(例:32)でパフォーマンスが劣化するのはなぜか、そしてその原因をどのように是正できるか?

主な発見

  • NVIDIA M40 GPU上で素朴なRNN実装を実行したところ、0.4 TFLOPSにとどまり、ハードウェアのピーク性能(約5.8 TFLOPS)の10%未満にとどまった。
  • 行列演算のグループ化により、並列性が向上し、カーネル起動のオーバーヘッドが削減され、スループットが2倍の0.8 TFLOPSに向上した。
  • CUDAストリームを用いて独立した行列乗算を同時に実行することで、パフォーマンスが最大2倍に向上し、特に並列度が低いケースで顕著だった。
  • レイヤーのオーバーラップにより顕著な高速化が得られ、特に深層ネットワークにおいて顕著で、大きなミニバッチサイズ(例:256)や大きな隠れ状態(例:4096)でも性能向上が維持された。
  • 高ストリーム環境下で、並列性よりもリソース効率を優先するようにcuBLASヒューリスティクスを手動でチューニングすることで、明確なパフォーマンス向上が得られ、特に帯域幅制限の領域で顕著だった。
  • cuDNN v5における最終的な実装は、さまざまなネットワークサイズでピーク性能に近いパフォーマンスを達成した。特に、固有の並列性が限られる小さな深層ネットワークで最大の高速化が観察された。

より良い研究を、今すぐ始めましょう

論文設計から論文執筆まで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。