选自github.io
作者:ManasSahni
机器之心编译
参与:魔王
使用深度学习库可以大幅加速CNN模型运行,那么这些库中的哪些具体的做法实现了这种高速度和高性能呢?佐治亚理工学院计算机科学硕士研究生ManasSahni在自己的电脑上试验了多种方法的策略,深入剖析高速卷积的实现过程。
我的笔记本电脑CPU还可以,在TensorFlow等库的加持下,这台计算机可以在10-毫秒内运行大部分常见CNN模型。年,即使是智能手机也能在不到半秒内运行「重量级」CNN模型。而当我自己做了一个简单的卷积层实现,发现这一个层的运行时间竟然超过2秒时,我非常震惊。
大家都知道,现代深度学习库对大部分运算具备高度优化的生产级实现。但是这些库使用了哪些人类不具备的「黑魔法」呢?它们如何将性能提升倍?当它们「优化」或加速神经网络运算时,它们在做什么?当谈及高性能/高效DNN时,我常常问(或被问及)这些问题。
本文尝试介绍在DNN库中如何实现一个卷积层。卷积不仅是很多DNN模型中最常见和最繁重的操作,它也是导致上述高性能实现的代表性trick:一点点算法智慧+大量调参+充分利用低级架构。
本文所涉及的很多内容来自这篇开创性论文《AnatomyofHigh-PerformanceMatrixMultiplication》,这篇论文形成了线性代数库(如OpenBLAS)所用算法的基础;本文还涵盖StefanHadjis博士和ChrisRose的教程。
论文