Skip to main content
QUICK REVIEW

[论文解读] cuDNN: Efficient Primitives for Deep Learning

Sharan Chetlur, Cliff Woolley|arXiv (Cornell University)|Oct 3, 2014
Parallel Computing and Optimization Techniques参考文献 16被引用 1,026
一句话总结

cuDNN 是一个针对 GPU 优化的库,为深度学习工作负载提供高效、低级别的原语,包括卷积、池化和激活函数。通过利用高度调优的内核并最小化辅助内存,它加速了训练和推理——在 Caffe 中实现了 36% 的速度提升,并减少了内存使用,且可无缝集成到现有深度学习框架(如 Caffe 和 PaddlePaddle)中。

ABSTRACT

We present a library of efficient implementations of deep learning primitives. Deep learning workloads are computationally intensive, and optimizing their kernels is difficult and time-consuming. As parallel architectures evolve, kernels must be reoptimized, which makes maintaining codebases difficult over time. Similar issues have long been addressed in the HPC community by libraries such as the Basic Linear Algebra Subroutines (BLAS). However, there is no analogous library for deep learning. Without such a library, researchers implementing deep learning workloads on parallel processors must create and optimize their own implementations of the main computational kernels, and this work must be repeated as new parallel processors emerge. To address this problem, we have created a library similar in intent to BLAS, with optimized routines for deep learning workloads. Our implementation contains routines for GPUs, although similarly to the BLAS library, these routines could be implemented for other platforms. The library is easy to integrate into existing frameworks, and provides optimized performance and memory usage. For example, integrating cuDNN into Caffe, a popular framework for convolutional networks, improves performance by 36% on a standard model while also reducing memory consumption.

研究动机与目标

  • 解决缺乏类似高性能计算中 BLAS 的标准化、高度优化的深度学习原语库的问题。
  • 通过提供卷积和池化等核心操作的可移植、高性能实现,减轻深度学习框架的负担。
  • 在无需框架开发者手动重新优化内核的情况下,实现跨不断演进的 GPU 架构的性能可移植性。
  • 在各种工作负载(包括小批量大小)下,最小化内存开销并最大化吞吐量。
  • 支持灵活的数据布局,并无缝集成到现有深度学习框架中,而无需更改模型架构或数据结构。

提出的方法

  • 该库提供基于 C 语言的 API,使用不透明的描述符表示张量和滤波器,支持任意步长和数据布局,以实现与多种框架的集成。
  • 它暴露了单精度和双精度下卷积、池化及激活函数的前向和反向传播的优化例程。
  • 实现基于高度优化的 GEMM(通用矩阵乘法)内核作为卷积操作的基础,从而在 GPU 架构上实现高性能。
  • 通过避免使用辅助缓冲区,直接通过用户控制的 GPU 内存缓冲区管理数据,最小化内存使用。
  • 该库支持灵活的张量变换和子张量索引,可高效处理非方形输入和非对称填充。
  • 通过使用标准框架层的即插即用替换实现集成,必要时可自动回退到原生实现。

实验结果

研究问题

  • RQ1如何通过高度优化的深度学习原语库提升深度学习框架的性能和内存效率?
  • RQ2一个 GPU 优化的库是否能在不修改现有模型架构或数据布局的前提下,显著提升多种深度学习工作负载的性能?
  • RQ3此类库在不断演进的 GPU 硬件平台之间在多大程度上实现性能可移植性?
  • RQ4该库的极低内存使用对训练更大模型和更大批量大小的能力有何影响?
  • RQ5该库是否能以极低的工程投入有效集成到 Caffe 和 PaddlePaddle 等现有框架中?

主要发现

  • 在 NVIDIA Tesla K40 GPU 上,将 cuDNN 集成到 Caffe 中,使 bvlc_reference_caffenet 模型的整体训练时间减少了 36%。
  • 前向传播速度提升了 1.45 倍,反向传播提升了 1.30 倍,测试阶段提升了 1.49 倍,表明在训练各阶段均实现了稳定提升。
  • 与基于矩阵乘法的替代实现相比,内存消耗更低,从而支持更大模型和更大批量大小。
  • 在 Tesla K10 GPU 上,cuDNN 在百度 PaddlePaddle 框架中相较于基于矩阵乘法的卷积实现,平均性能提升了 30%。
  • 由于采用灵活的基于描述符的接口,cuDNN 可实现与现有框架的无缝集成,无需更改模型架构或数据结构布局。
  • 该库支持广泛的输入尺寸和配置,包括非方形输入和非对称填充,这对语音和自然语言处理任务尤其有用。

更好的研究,从现在开始

从论文设计到论文写作,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。