[论文解读] Fast Algorithms for Convolutional Neural Networks
本文提出基于Winograd的快速卷积算法,用于卷积神经网络,通过最小化滤波操作将小尺寸3×3卷积的算术复杂度降低最多4倍。该方法在NVIDIA Maxwell GPU上实现了当前最优的吞吐量,批量大小为1–64时,fp16下比cuDNN快2.64倍,fp32下快2.26倍,内存占用极低(≤16MB),且数值精度高。
Deep convolutional neural networks take GPU days of compute time to train on large data sets. Pedestrian detection for self driving cars requires very low latency. Image recognition for mobile phones is constrained by limited processing resources. The success of convolutional neural networks in these situations is limited by how fast we can compute them. Conventional FFT based convolution is fast for large filters, but state of the art convolutional neural networks use small, 3x3 filters. We introduce a new class of fast algorithms for convolutional neural networks using Winograd's minimal filtering algorithms. The algorithms compute minimal complexity convolution over small tiles, which makes them fast with small filters and small batch sizes. We benchmark a GPU implementation of our algorithm with the VGG network and show state of the art throughput at batch sizes from 1 to 64.
研究动机与目标
- 为解决深度卷积神经网络推理与训练中的性能瓶颈,特别是自驾车和移动设备等低延迟应用场景中的问题。
- 克服传统FFT与直接卷积方法在现代网络(如VGG)中常见的小滤波器与小批量大小下的低效问题。
- 开发一种快速、内存高效的卷积算法,在降低算术复杂度的同时保持高数值精度。
- 实现在极小批量大小(1–64)下高吞吐量推理,无需依赖大批次优化技术。
- 展示基于Winograd的卷积在真实世界CNN(如VGG)中实现GPU的实用加速,优于现有库(如cuDNN)的表现。
提出的方法
- 该方法采用Winograd的最小滤波算法,以减少二维卷积的乘法复杂度,特别针对F(2×2,3×3)和F(4×4,3×3)两种形式,其乘法次数仅为(m+r−1)(n+s−1),其中m×n为输出尺寸,r×s为滤波器尺寸。
- 将卷积重构成矩阵运算:Y = Aᵀ[(Gg)⊙(Bᵀd)],其中Gg和Bᵀd为变换后的滤波器与输入数据,从而实现高效的密集矩阵乘法。
- 该算法采用两种变体:融合变换(无全局工作区)与外部滤波器变换(FX),前者在滤波器/通道数量较少至中等时更优。
- 与直接卷积相比,该方法将算术复杂度降低最多4倍,且大部分计算集中在高性能密集矩阵乘法上。
- 通过预计算变换矩阵A、B和G,实现快速、数值稳定的计算,即使在fp16下也能保持极低的精度损失。
- 实现针对NVIDIA Maxwell GPU进行优化,实现高内存带宽利用率和极低内存占用(≤16MB工作区)。
实验结果
研究问题
- RQ1基于Winograd的最小滤波算法能否在现代CNN(如VGG)中实现小批量、小滤波器卷积的更高吞吐量?
- RQ2Winograd卷积在不同批量大小(1至64)下,与FFT和直接卷积的性能相比如何?
- RQ3Winograd卷积的内存与精度开销如何?能否在实际部署中最小化?
- RQ4与直接卷积相比,Winograd卷积在低精度数据(fp16)下是否保持数值精度?
- RQ5该算法在扩展至更大滤波器组和网络层时是否仍保持性能,无退化?
主要发现
- 在批量大小为1、fp32数据下,F(2×2,3×3) Winograd算法的吞吐量比cuDNN高2.26倍,达到7.03 TFLOPS。
- 在批量大小为8、fp16数据下,该算法达到9.57 TFLOPS,相比cuDNN提速7.42倍。
- 融合F(2×2,3×3)变体无需全局工作区,而FX变体最多使用16MB内存,远低于cuDNN的2.6GB。
- 除conv1.1层(占总计算量不足0.5%)外,该算法在VGG的所有层上均优于cuDNN。
- 在fp16数据、批量大小为64时,F(2×2,3×3)达到10.28 TFLOPS,相比cuDNN提速1.63倍。
- 使用fp32数据时,F(2×2,3×3)的最大元素误差低于直接卷积;使用fp16时,所有算法精度相当。
更好的研究,从现在开始
从论文设计到论文写作,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。