#米粒创意#GPU,靠的居然是哈希?,学习超大神经网络,CPU超越V100

学习超大神经网络 , CPU超越V100GPU , 靠的居然是哈希?
#米粒创意#GPU,靠的居然是哈希?,学习超大神经网络,CPU超越V100
文章图片
机器之心Pro
1583297618机器之心报道
机器之心编辑部
训练一亿参数量的全连接网络 , 44核心CPU让V100甘拜下风 , 靠的居然是——哈希?
深度学习模型的训练和推理加速近来是研究领域关注的重点 。 虽然普遍观点认为 , GPU相比CPU有更强的算力优势 。 但在近日 , 莱斯大学的计算机科学家们公布了新的研究成果 , 其提出的深度学习框架 , 在大型工业级的推荐数据集上验证了在没有类似于GPU的专业硬件加速条件下 , 也可以对深度学习进行加速 。
在论文中 , 研究者指出 , 尽管已有的研究表明 , 在算法端对模型进行优化无法显示出如同V100GPU那样强大的性能提升 , 但是他们提出的SLIDE引擎却可以实现 。 这一模型可以显著地减少训练和推理阶段的运算 , 比在GPU上经过TensorFlow高度优化过的算法还要快 。
例如 , 在工业级的推荐数据集上测试SLIDE时 , TeslaV100GPU上的训练时间是IntelXeonE5-2699A2.4GHZ的3.5倍 。 而在同样的CPU硬件条件下 , SLIDE比TensorFlow快了10倍 。
我们可以先看张实验图 , 在Amazon-670K这样的复杂分类数据集上 , 超一亿参数量的大型神经网络训练时间竟然是SLIDE+CPU最快 , 连TensorFlow+TeslaV100都要慢很多 。 而且从迭代步数上看 , 它们两者是等价的 , 表明模型的收敛行为是相同的 。
对于论文和结果的复现 , 研究者已提供了相应的代码 。
论文链接:https://www.cs.rice.edu/~as143/Papers/SLIDE_MLSys.pdf开源地址:https://github.com/keroro824/HashingDeepLearning计算复杂度大降 , 局部敏感哈希立功
如此神奇的加速是怎么实现的?具体而言 , 研究者采用了局部敏感哈希(LocalitySensitiveHashing)算法 , 并在神经网络中使用了自适应dropout 。 局部敏感哈希是一类哈希算法 , 当输入数据彼此类似的时候 , 具有更高的碰撞概率 , 而不相似的算法彼此碰撞的概率很低 。 一种广泛应用的最近邻逼近搜索算法就使用了局部敏感哈希理论 。
SLIDE的局部敏感哈希如何构建
在Indyk和Motwani在1998年的一项研究中表明 , 对于给定的相似性计算 , 一类LSH函数就足以有效地解决次线性时间中的最近相邻搜索 。
算法:LSH算法使用两个参数(K,L) , 研究者构造了L个独立的哈希列表 。 每个哈希表都有一个原始哈希函数H , 而该函数是由集合F里K个随机的独立哈希函数串联而成 。 在给定一个查询下 , 从每一个哈希列表中采集一个bucket后会返还L个bucket的集合 。
直观地说 , 原哈希函数使得bucket变得稀疏 , 并减少了误报的数量 , 因为只有有效的最近相邻项才可以匹配给所查询的所有K的哈希值 。 L的bucket集合通过增加可存放的最近相邻项的潜在bucket数量来减少漏报的数量 。 而候选生成算法分为两个阶段工作:
1.预处理阶段 , 通过储存所有x元素 , 从数据层面构造L的哈希列表 。 只存储哈希列表中指向向量的指针 , 因为储存整个数据向量会非常低效 。
2.查询阶段:给定一个查询Q , 搜索其最近相邻项 , 从L的哈希列表所收集的所有bucket集合进行报告 。 这里注意 , 不需要去扫描所有的元素 , 只是在探测L的不同的bucket , 而每个哈希列表里都有一个bucket 。
在生成潜在的候选算法后 , 通过比较候选集里的每个子项与查询间的距离从而计算处最近相邻项 。
将局部敏感哈希用于采样和预估
虽然局部敏感哈希被证明能够在亚线性条件下进行快速抽取 , 但是对于精确搜索而言速度非常慢 , 因为它需要大量的哈希表 。 有研究表明 , 通过如图1所示的高效采样能够在一定程度上缓解搜索的计算量 , 只需要看一些哈希桶就能够做到足够的自适应采样 。


推荐阅读