雷锋网 AI 研习社按,2017 年 5 月,在 GTC 2017 上,英伟达 CEO 黄仁勋发布 Volta 架构 Tesla V100,它被称为史上最快 GPU 加速器。2018 年 3 月,同样也是在 GTC 上,黄仁勋发布「全球最大的 GPU」——DGX-2,搭载 16 块 V100 GPU,速度达到 2 petaflops。
近年来,英伟达在高速计算之路上越走越快。日前,英伟达 Developer Blog 上一篇博文详细陈述了英伟达 Volta Tensor Core GPU 在深度学习社群取得的巨大突破,以及种种突破背后的技术细节。正文如下,雷锋网 AI 研习社编译整理。
由深度学习驱动的人工智能现在解决了曾一度被认为不可能的挑战,比如让计算机理解自然语言、进行对话以及自动驾驶。既然深度学习能如此有效地解决一系列挑战,随着算法复杂度呈现指数级增长,我们是否能将计算变得更快呢?基于此,英伟达设计了 Volta Tensor Core 架构。
为了更快地计算,英伟达与许多公司以及研究人员一样,一直在开发计算的软件和硬件平台。Google 是个典型的例子——他们的研究团队创建了 TPU(张量处理单元)加速器,当利用 TPU 进行加速时,在训练神经网络时可以达到优异的性能。
这篇文章中,我们分享了英伟达实现 GPU 巨大的性能提升后,在 AI 社群中取得的一些进步:我们已经在单芯片和单服务器上创造了 ResNet-50 的训练速度记录。最近,fast.ai 也宣布了他们利用英伟达 Volta Tensor Core GPU 在单个云实例上的创纪录表现 。
以下是我们的结果:
在训练 ResNet-50 时,一个 V100 Tensor Core GPU 的处理速度能达到 1075 张图像/秒,与上一代 Pascal GPU 相比,它的性能提高了 4 倍。
一个由 8 个 Tensor Core V100 驱动的 DGX-1 服务器的处理速度能达到 7850 张图像/秒,几乎是去年在同一系统上处理速度(4200 张图像/秒)的两倍。
一个由 8 个 Tensor Core V100 驱动的 AWS P3 云实例可以在不到 3 小时内完成 ResNet-50 的训练,比 TPU 实例快 3 倍。
图 1:Volta Tensor Core GPU 在训练 ResNet-50 时所取得的速度突破
英伟达 GPU 在对算法进行大规模并行处理时效果极好,因此它极其适合用于深度学习。我们一直都没有停止探索的脚步,Tensor Core GPU 是我们利用多年的经验和与世界各地的人工智能研究人员的密切合作,为深度学习模型创造的一种新的架构。
结合高速 NVLink 互连以及在当前所有框架内的深度优化,我们获得了最先进的性能。英伟达 CUDA GPU 的可编程性在这里也非常重要。
V100 Tensor Core 打破了单处理器的最快处理速度记录
英伟达 Volta GPU 中引入了 Tensor Core GPU 架构,这是英伟达深度学习平台的巨大进步。这种新硬件能加速矩阵乘法和卷积计算,这些计算在训练神经网络时占总计算的很大一部分。
英伟达 Tensor Core GPU 架构能够提供比功能单一的 ASIC 更高的性能,在不同工作负载下仍然具备可编程性。例如,每一个 Tesla V100 Tensor Core GPU 用于深度学习可以达到 125 teraflop 的运算速度,而 Google TPU 芯片只能达到 45 teraflop。包含 4 个 TPU 芯片的「Cloud TPU」可以达到 125 teraflop,相比之下,4 个 V100 芯片可以达到 500 teraflop。
我们的 CUDA 平台使每一个深度学习框架都能充分利用 Tensor Core GPU 的全部能力,加速诸如 CNN、RNN、GAN、RL 等各类神经网络,以及基于这些网络每年出现的成千上万个变种。
接下来是对 Tensor Core 架构的更深入讲解,大家可以在这里看到它独特的功能。图 2 显示了 Tensor Core 计算张量的过程,虽然存储是在低精度的 FP16 中,但是用精度更高的 FP32 来进行计算,可以在维持精度时最大化吞吐量。
图 2:Volta Tensor Core 矩阵乘法计算
随着最近的软件改进,目前在单个 V100 上训练 ResNet-50 的速度达到了 1360 张图像/秒。我们现在正努力将这一训练软件集成到流行的框架中,详情如下。
为了让性能最佳,基于 Tensor Core 进行张量操作的存储器布局应该为 channel-interleaved 型数据布局(Number-Height-Width-Channel,常被称为 NHWC),但往往默认是 channel-major 型数据布局(Number-Channel-Width-Height,通常称为 NCHW)。因此,cuDNN 库会在 NCHW 和 NHWC 之间执行张量转置操作,如图 3 所示。正如前面所提到的,由于卷积运算现在的速度非常快,所以这些转置操作占了总运行时间中相当大的一部分。
为了消除这些转置操作,我们直接用 NHWC 格式表示 RN-50 模型图中的每个张量,MXNet 框架支持这一功能。此外,对所有其他非卷积层,我们还将优化的 NHWC 实现添加到 MXNet 和 cuDNN 中,从而消除了训练过程中对张量转置的需求。
图 3:优化 NHWC 格式,以消除张量转置
另一个优化是基于阿尔达姆定律(并行计算中的加速比是用并行前的执行速度和并行后的执行速度之比来表示的,它表示了在并行化之后的效率提升情况),这一法则能预测并行处理的理论加速。由于 Tensor Core 显著地加速了矩阵乘法和卷积层的计算,因此在训练时对其他层的计算占据了总运行时间很大的一部分。我们可以确定这些新的性能瓶颈并进行优化。
如图 4 所示,数据会移动到 DRAM 或从 DRAM 中移出,因此许多非卷积层的性能会受到限制。可以利用片上存储器将连续的层融合在一起,避免 DRAM traffic。例如,我们在 MXNet 中创建一个图优化传递功能,以检测连续的 ADD 和 ReLu 层,只要有可能就将这些层替换成融合层。在 MXNet 中可以非常简单地使用 NNVM(神经网络虚拟机,Neural Network Virtual Machine)来实现这些类型的优化。
图 4 : 进行层融合操作,消除反复数据读/写
最后,我们继续为常见的各类卷积创建额外的专用 kernel,以进行优化。
我们目前正在将许多这种优化应用于多个深度学习框架之中,包括 TensorFlow、PyTorch 和 MXNet 。我们利用单个 Tensor Core V100 GPU 进行标准的 90-epoch 训练,基于在 MXNet 上做的改进,处理速度达到 1075 张图像/秒,与此同时,我们的训练与单精度训练一样达到了相同的 Top-1 分类精度(超过 75%)。我们在单机测试中的处理速度可以达到 1360 张图像/秒,这意味着性能还有很大的提升空间。可以在 NGC(NVIDIA GPU CLOUD)上利用 NVIDIA-optimized deep learning framework containers 实现性能的提升。
创纪录的最高单节点速度
多个 GPU 可以作为单节点运行,以实现更高的吞吐量。然而,在将多个 GPU 缩到单服务节点中工作时,需要 GPU 之间存在高带宽/低延迟通信路径。英伟达 NVLink 高速互连结构允许我们将 8 个 GPU 作为单服务器运行,实现性能扩展。这些大规模的加速服务器可以让深度学习的计算达到 petaflop 量级的速度,并且在云端和本地部署中都可以被广泛使用。
然而,虽然将 GPU 扩展到 8 个可以显著提高训练性能,但在这种框架下,主 CPU 执行其他工作时性能会受到限制。而且,在这种框架下,对连接 GPU 的数据管道性能要求极高。
数据管道从磁盘中读取编码的 JPEG 样例,然后再执行解码、调整图像大小、图像增强(如图 5 所示)操作。这些操作提高了神经网络的学习能力,从而提高了训练模型的预测准确性。而因为在训练时,有 8 个 GPU 在进行运算操作,这会限制框架的整体性能。
图 5:图像解码和增强数据管道
为了解决这个问题,我们开发了 DALI(Data Augmentation Library,数据扩充库),这是一个与框架无关的库,可以将计算从 CPU 转移到 GPU 上。如图 6 所示,DALI 将 JPEG 解码的一部分、调整图像大小以及其他所有增强操作移动到 GPU 上。这些操作在 GPU 上的执行速度要比在 CPU 上快得多,这缓解了 CPU 的负荷。DALI 使得 CUDA 的并行处理能力更加突出。消除 CPU 瓶颈之后,在单节点上的计算速度可以达到 7850 张图像/秒。
图 6:利用 DALI 优化工作负荷
英伟达正在帮助将 DALI 融入到所有主流人工智能框架中。这一解决方案有助于提升具备 8 个以上 GPU 的系统的性能,比如英伟达最近发布的带有 16 个 Tesla V100 GPU 的 DGX-2。
创纪录的单个云实例处理速度
我们使用单 GPU 和单节点运行来训练 ResNet-50(90 epoch),使预测准确率超过 75%。通过算法的创新和超参数调节,可以进一步减少训练时间,在更少的 epoch 下达到更高精度。GPU 具备可编程的特性,并支持所有深度学习框架,这使得 AI 研究者能够探索新的算法,并利用现有的算法进行研究。
fast.ai 团队最近分享了基于英伟达硬件的优秀成果,他们使用 PyTorch 在远小于 90 epoch 的训练下达到了很高的精确度。Jeremy Howard 和 fast.ai 的研究人员利用 8 个 V100 Tensor Core GPU,在一个 AWS P3 实例上用 ImageNet 训练 ResNet-50。他们对算法进行创新,调节了一系列超参数,不到 3 个小时就将模型训练好了,这比基于云实例的 TPU 计算(需要将近 9 个小时来训练 ResNet-50)快三倍。
我们进一步期望这一博客中描述的提高吞吐量的方法同样也适用于其他训练,例如前面提到的 fast.ai 的例子。
效果呈现指数级增长
自从 Alex Krizhevsky 利用两块 GTX 580 GPU 赢得了 ImageNet 比赛,我们在深度学习加速方面所取得的进步令人难以置信。Krizhevsky 当时花了 6 天时间来训练他的神经网络——AlexNet,这一网络在当时的表现优于所有其他的图像识别方法,引发了一场深度学习革命。我们最近发布的 DGX-2 可以在 18 分钟内训练好 AlexNet。从图 7 可以看到,在这 5 年多的时间里,随着硬件性能的提升,处理速度加快了 500 倍。
图 7:在 ImageNet 上训练 AlexNet 所需要的时间
Facebook 人工智能研究院(FAIR)开源了他们的语言翻译模型 Fairseq,在不到一年的时间里,我们基于 DGX-2 和软件栈的改进(见图 8),在训练 Fairseq 时实现了 10 倍的加速。
图 8:训练 Fairseq 所需要的时间
图像识别和语言翻译仅仅是研究人员用 AI 力量解决无数难题的用例之一。Github 上共有超过 6 万个使用 GPU 加速框架的神经网络项目,GPU 的可编程性为 AI 社群正在构建的所有类型的神经网络提供加速。我们的快速改进使得 AI 研究人员能够想象出更复杂的神经网络,以解决更困难的挑战。
这些长久的进步得益于我们对 GPU 加速计算的全堆栈优化算法。从构建最先进的深度学习加速器到复杂的系统(HBM、COWOS、SXM、NVSwitch、DGX),从先进的数字计算库和深度软件栈(cuDNN,NCCL,NGC) 到加速所有的 DL 框架,英伟达对 AI 的承诺为 AI 开发者提供了无与伦比的灵活性。
我们将继续优化整个堆栈,并持续实现性能的指数级提升,为 AI 社群提供推动深度学习创新研究的有力工具。
总结
AI 继续改变着各行各业,驱动出无数用例。理想的 AI 计算平台需要提供出色的性能,能支持庞大且不断增长的模型,并具备可编程性,以应对模型的多样性需求。
英伟达的 Volta Tensor Core GPU 是世界上最快的 AI 处理器,只用一块芯片就能让深度学习的训练速度达到 125 teraflop。我们很快会将 16 块 Tesla V100 整合到一个单服务器节点中,以创建世界上最快的计算服务器,提供 2 petaflops 的计算性能。
除了在加速上的优异性能,GPU 的可编程性以及它在云、服务器制造商和整个 AI 社群中的广泛使用,将带来下一场 AI 变革。
无论你选择什么深度学习框架(Caffe2, Chainer, Cognitive Toolkit, Kaldi, Keras, Matlab, MXNET, PaddlePaddle, Pytorch,TensorFlow),都可以用英伟达硬件进行加速。此外,英伟达 GPU 还用于训练 CNN、RNN、GAN、RL、混合网络架构以及每年基于这些网络的成千上万个变体。AI 社群中目前存在很多惊人的应用,我们期待着为 AI 的下一步发展提供动力。
雷锋网 AI 研习社编译整理。