在深度学习与神经网络领域,研究人员通常离不开 GPU。得益于 GPU 极高内存带宽和较多核心数,研究人员可以更快地获得模型训练的结果。与此同时,CPU 受限于自身较少的核心数,计算运行需要较长的时间,因而不适用于深度学习模型以及神经网络的训练。
但近日,莱斯大学、蚂蚁集团和英特尔等机构的研究者发表了一篇论文,表明了在消费级 CPU 上运行的 AI 软件,其训练深度神经网络的速度是 GPU 的 15 倍。这篇论文已被 MLSys 2021 会议接收。
论文链接:
https://proceedings.mlsys.org/paper/2021/file/3636638817772e42b59d74cff571fbb3-Paper.pdf
论文通讯作者、莱斯大学布朗工程学院的计算机科学助理教授 Anshumali Shrivastava 表示:「训练成本是 AI 发展的主要瓶颈,一些公司每周就要花费数百万美元来训练和微调 AI 工作负载。」他们的这项研究旨在解决 AI 发展中的训练成本瓶颈。
Anshumali Shrivastava。
研究动机及进展
深度神经网络(DNN)是一种强大的人工智能,在某些任务上超越了人类。DNN 训练通常是一系列的矩阵乘法运算,是 GPU 理想的工作负载,速度大约是 CPU 的 3 倍。
如今,整个行业都专注于改进并实现更快的矩阵乘法运算。研究人员也都在寻找专门的硬件和架构来推动矩阵乘法,他们甚至在讨论用于特定深度学习的专用硬件 - 软件堆栈。
Shrivastava 领导的实验室在 2019 年做到了这一点,将 DNN 训练转换为可以用哈希表解决的搜索问题。他们设计的亚线性深度学习引擎(sub-linear deep learning engine, SLIDE)是专门为运行在消费级 CPU 上而设计的,Shrivastava 和英特尔的合作伙伴在 MLSys 2020 会议上就公布了该技术。他们表示,该技术可以超越基于 GPU 的训练。
在 MLSys 2021 大会上,研究者探讨了在现代 CPU 中,使用矢量化和内存优化加速器是否可以提高 SLIDE 的性能。
论文一作、莱斯大学 ML 博士生 Shabnam Daghaghi 表示:「基于哈希表的加速已经超越了 GPU。我们利用这些创新进一步推动 SLIDE,结果表明即使不专注于矩阵运算,也可以利用 CPU 的能力,并且训练 AI 模型的速度是性能最佳专用 GPU 的 4 至 15 倍。」
Shabnam Daghaghi。
此外,论文二作、莱斯大学计算机科学与数学本科生 Nicholas Meisburger 认为,CPU 仍然是计算领域最普遍的硬件,其对 AI 的贡献无可估量。
技术细节
在本论文中,该研究重新了解了在两个现代 Intel CPU 上的 SLIDE 系统,了解 CPU 在训练大型深度学习模型方面的真正潜力。该研究允许 SLIDE 利用现代 CPU 中的矢量化、量化和一些内存优化。与未优化的 SLIDE 相比,在相同的硬件上,该研究的优化工作带来了 2-7 倍的训练时间加速。
SLIDE 的工作流程包括:初始化、前向-反向传播和哈希表更新。下图 1 为前向-反向传播工作流程图:
前向和后向传播示意图。
该研究专注于大规模评估,其中所需的神经网络拥有数亿个参数。在两台 Intel CPU 上比较了优化的 SLIDE,分别是 Cooper Laker 服务器(CPX)和 Cascade Lake 服务器(CLX),并与以下以下 5 个基准进行了对比:
1)V100 GPU上的 full-softmax tensorflow 实现;
2) CPX 上的 full-softmax tensorflow 实现;
3)CLX 上的 full-softmax tensorflow 实现;
4)CPX 上的 Naive SLIDE;
5)CLX 上的 Naive SLIDE。
其中,CPX 是英特尔第三代至强可扩展处理器,支持基于 AVX512 的 BF16 指令。CLX 版本更老,不支持 BF16 指令。
研究者在三个真实的公共数据集上评估了框架和其他基准。Amazon670K 是用于推荐系统的 Kaggle 数据集;WikiLSH-325K 数据集和 Text8 是 NLP 数据集。详细统计数据见下表 1:
对于 Amazon-670K 和 WikiLSH-325K,研究者使用了一个标准的全连接神经网络,隐藏层大小为 128,其中输入和输出都是多个热编码向量。对于 Text8,该研究使用标准 word2vec 语言模型,隐藏层大小为 200,其中输入和输出分别是一个热编码向量和多个热编码向量。
下图 6 第一行代表所有数据集的时间收敛图,结果显示了该研究提出的优化 SLIDE 在 CPX 和 CLX(深绿色和浅绿色)上训练时间优于其他基准 。图 6 的底部行显示了所有数据集的柱状图。
下表 2 给出了三个数据集上的详细数值结果:
下表 3 中,研究者展示了 BF16 指令对每个 epoch 平均训练时间的影响。结果表明,在 Amazon-670K 和 WikiLSH325K 上,激活和权重中使用 BF16 指令分别将性能提升了 1.28 倍和 1.39 倍。但是,在 Text8 上使用 BF16 没有产生影响。
下表 4 展示了有无 AVX-512 时,优化 SLIDE 在三个数据集上的每个 epoch 平均训练时间对比。结果表明,AVX-512 的矢量化将平均训练时间减少了 1.2 倍。