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启发式策略,作者在LSTM、GRU和简单RNN中实现了相较于朴素实现高达10倍的加速,其性能在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.

研究动机与目标

  • 为解决深度且庞大的循环神经网络训练时间过长的问题,其训练时间可能长达数周甚至数月。
  • 提升RNN训练中GPU的利用率,尽管GPU是训练的主要硬件,但标准实现中的利用率往往不理想。
  • 开发并集成性能优化的RNN核函数至NVIDIA的cuDNN库,以实现广泛使用。
  • 暴露并利用单个RNN单元、整层以及整个网络之间的并行性,以最大化硬件吞吐量。

提出的方法

  • 将每个LSTM门的四次矩阵乘法重新组织为单次更大的矩阵乘法,以提升并行性并减少内核启动开销。
  • 使用CUDA流并发执行独立的矩阵乘法(例如,输入权重与循环权重),以提高GPU占用率并隐藏延迟。
  • 通过层间重叠前向与反向传播,提升内存与计算利用率,尤其在深层网络中效果显著。
  • 手动调优cuBLAS启发式策略,优先选择资源高效执行路径,以避免默认启发式策略在高并行场景下导致硬件利用率不足。
  • 对GRUs(三组矩阵)和简单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 生成,并经人工编辑审核。