扩展以满足 AI 不断增长的需求
英特尔新的深度学习工具(即将整合 Nervana 的云堆栈)旨在隐藏/降低在资源受限的边缘设备上进行强力扩展训练时间和模型部署折衷的复杂性,同时不损害性能需求。
人工智能(AI)是一个简单的愿景,即计算机变得与人类无法区分;能够像人类一样思考和行为。人工智能需要计算机,但它主要依赖于人类精心设计的研究重点、见解和启发式方法。它以人为中心,但即使是这种人为的关注点也主要集中在人类专家身上。对专家(尤其是在人工智能研究初期使用的领域,如医学)的依赖一直是人工智能发展的挑战,因为专家无法规模化。
人工智能现在依赖于机器学习,这是一类随时间推移而改进的算法。这是通过数据处理以及硬件和方法的改进来实现的。这 S A L W A Y S 是人工智能的一个原则,但由于当时没有足够大的数据量进行处理和开发,因此并未得到实践。现在,数据量每年翻一番,增长速度超过了计算能力。这就是我们讨论人工智能的真正原因,也是机器学习成为实现人工智能力量的有效工具的原因。
人工智能、机器学习和神经网络
由于神经网络是包含在人工智能领域的机器学习范围内的算法类别,神经网络中有一个“子子类”,称为深度神经网络。这些网络具有两个以上的隐藏层,包含输入和输出。图 1 显示了单层输入和输出,以及连接它们的权重关系。实际上,深度神经网络拥有超过一百层输入和输出。
机器学习中的算法子类,即神经网络,是受到最多关注的算法。本文的重点将是机器学习以及机器学习算法的子类——神经网络。它们之间的关系如图 2 所示。
给深度神经网络一张图像,它就能找到你正在寻找的人,并用方框(或轮廓)对其进行标记。这是在网络经过适当训练后能够实现的。从输入到输出的过程称为“前向传播”,用于描述这一过程的术语是“推理”。
要做到这一点,神经网络必须经过训练。训练才是挑战。
培训
训练一个网络需要什么?你开始,经历前向传播,然后查看结果。你查看它应该说什么和实际说了什么之间的差异,取这个差异,然后将差异反向传播(图 3)。这就是所谓的反向传播。反向传播算法是最难的部分。每一条连接上的权重都会被调整。这是逐层小心地进行的,针对多个训练场景(在此例中为图像)。
当前最先进的训练方案存在两个主要挑战:a) 它们依赖于标记数据(监督训练),b) 算法并行性非常有限。虽然训练所需的数据标记工作量很大,但它不需要专家,而是普通人,通常是在目标对象周围画一个方框或轮廓。算法并行性主要限于同时处理的图像批次,以学习某个点的平均属性。大批量数据在训练数据上效果不佳,因此批量大小通常限制在约一千。
跨越大量的输入数据(图像)和网络的深度,训练主要以串行方式逐层进行,并且网络本身非常庞大(有数百万个不同的权重需要确定),因此训练时间可能很长。对于大多数用例而言,训练时间(几周甚至几个月)是不可接受的。由于目标任务(推理)在没有合理训练好的模型的情况下甚至无法开始,因此我们希望缩短训练周转时间,因此训练时间成为衡量好坏的主要指标。
由于指标是训练模型所需的时间,我们如何减少训练时间?在拥有完整模型之前,机器学习本身无法开始。
良好的训练会产生一个良好、紧凑的模型。作为比较,想象一位漫画家可以用五笔画描绘一个人。有无数种笔触可供选择。选择哪五种笔触,在哪里应用它们,以及如何应用它们,是最终结果,即使是专家艺术家也常常无法真正解释他们是如何做到的,因此无法轻易复制。机器学习算法一旦用足够的数据进行训练,就可以在无需人类专家帮助的情况下学习正确的紧凑表示,用于识别或重现原始图像。
自动驾驶汽车是机器学习过程的一个绝佳范例。在车辆内部,有传感器处理、传感器数据采集、路径规划和驾驶控制功能。在数据中心,有车辆终端管理、车辆模拟和验证,以及跨车队捕获的传感器数据分析。机器学习可以在任一端发生。汽车端可以进行汽车特定处理,数据中心端可以进行更广泛的跨车辆处理。主要地,大部分推理和处理发生在边缘设备和云上,但它也必须是端到端的,以便进行跨设备学习。
神经网络层
全连接层是指层中的所有输入都连接到该层的所有输出(输出即结果)。层中有输入、权重和输出。全连接层本质上就是矩阵处理,使用矩阵数学。即使是神经网络中的其他非全连接的卷积层,也经常使用矩阵乘法进行处理。矩阵乘法是计算量最大的地方,占到 90% 以上,而且大部分是稠密线性代数。换句话说,神经网络的核心内核非常适合计算,任何用于执行稠密线性代数的架构都应该表现得非常好。
最终,所需的矩阵计算如图 4 所示。前向传播——输入矩阵、权重矩阵以及输出矩阵的计算。反向传播查看输出矩阵、权重矩阵,并计算输入矩阵。对于权重更新,您比较输入和输出的差值,并计算新权重(图 4)。
并行化
并行化的类型包括数据并行、模型并行和混合并行。
在数据并行中,您将数据分成两部分,在两个不同的节点上运行,使用相同的权重并行处理。权重保持不变,但输入和输出数据被分割以并行运行。
模型并行与数据并行是相同的概念,但应用于模型(权重)。权重被分割,数据通过一半的权重运行以并行处理。这通常发生在全连接层,此时模型大小(n²)远大于数据量(n)。
混合并行(图 5)是将模型并行和数据并行结合起来。
如何知道一种并行化系统何时更好?当您分割数据或模型时,矩阵会发生变化,变得更难处理。例如,我们可能从一个大型且规则的(维度可比)矩阵开始,在几次分割后,会得到一个高而窄的矩阵(许多行,很少的列)。前者易于在处理器缓存或内存中进行块数据获取,以及宽 SIMD 并行;后者则不然。有时,同一节点的计算会被分割,从而需要额外的工作来确保同一节点的计算保持在一起。随着我们为了高度并行的架构而进行更细粒度的并行化,节点间通信和倾斜的矩阵格式会成为问题。
所以,通常
- 当激活(输出)>权重(模型)时,使用数据并行。
- 当权重>激活时,使用模型并行。
这些分割的影响
- 大规模数据并行化使激活远小于权重。
- 大规模模型并行化使权重远小于激活。
- 由于倾斜的矩阵,计算效率会降低(例如,10x4k 矩阵会吞噬处理器时间,而不管缓存如何)。
扩展
随着我们进行大规模并行化,通信时间开始主导总计算时间。因此,增加节点的计算能力对以总体训练时间衡量的应用程序性能的好处会递减。因此,我们需要超越简单的并行化方案,才能从大型计算资源(如公共云)中受益,以减少训练大型模型的时间。两种这样的优化是:使用混合并行和限制/管理节点间通信。这两种方法可以实现高效的扩展。混合并行有助于防止矩阵变得过于倾斜。此外,为了限制节点间通信,我们建议创建节点组,以便在每个组内进行激活传输,并在组之间进行权重传输。
深度学习中的通信模式
让我们更深入地了解涉及的节点间通信模式类型。当您跨节点并行化时,就需要进行节点间通信。例如,如果您正在对点积进行乘法-加法运算,而矩阵的某个元素仅在一个节点上可用,那么来自两个不同节点的局部激活需要被通信并组合起来以获得所需的点积。如果此数据不可用,则下一层无法计算。此类节点间通信的更多细节如图 6 所示。
绿色线条(Allreduce)可以等待,红色线条(Alltoall 等)是必需的,以便可以进行下一层计算。绿色线条代表不太关键的通信,因为数据对于下一个前向传播阶段是必需的。红色线条代表更具时间紧迫性的通信,因为数据对于下一层计算是即时必需的,任何延迟都可能导致处理流水线气泡,或者效率损失可以以不同的方式处理,但红色线条不行。因此,红色线条消息需要被优先调度。
总而言之,高效通信模式的必要步骤如下:
- 优化各种节点间通信原语的性能,使其处理时间最短。
- 尽可能将通信与计算重叠,以最小化通信对性能的影响。
- 优先调度时间关键的节点间通信消息(例如,红色与绿色)。
图 7 显示了通过优化 Allreduce 原语获得的性能改进(相对于当前的 Intel MPI 实现)。
效率发生在通信花费的周期数减少而计算花费的周期数增加的时候。图 8 和图 9 说明了这些优化措施的效果。
这些优化的组合能够提高各种神经网络拓扑的整体可扩展性和性能。图 10 显示了四种流行拓扑的扩展结果。这些结果显示了多达 128 个节点的情况,但我们正在努力扩展到数千个节点。
训练时间达标后
一旦我们开发了足够多的模型,达到了训练时间可接受的程度,会发生什么?模型足够紧凑,并且具有速度和准确性。然后,训练好的模型会被部署到某个边缘设备上运行,并在实际现场数据上提供准确的推理。推理的计分卡随后会被发送回服务器;然后,服务器会获得足够的新数据来重新训练自己,生成一个更好的模型,并部署到更多的设备上。模型的推理准确性越高,它就越有可能被部署到更多的边缘设备上,从而产生更多的反馈到服务器,以重新训练并使模型变得更好。这就是计算的良性循环(图 11)。
模型的推理准确性越高,它就越有可能被部署到更多的边缘设备上,并且部署的地方越多,它就能将更多的推理数据发送回服务器(关于它何时正确预测与错误预测),这反过来又提高了服务器精炼和改进模型推理准确性的能力。反过来,这意味着模型现在可能被部署到更多的设备上……循环继续。这就是我们正在准备的计算的良性循环(图 11)。
然而,在我们实际将其发送到设备之前,循环并没有完成。发送到设备需要更多的工作,因为网络总是有限制的。数据中心基础设施上的实时、快速模型再训练,由于边缘设备连接到数据中心的网络延迟长、带宽有限,变得更加困难。随着硬件、网络和无线连接的改进,这个问题将更容易解决。
此外,了解边缘设备是什么很重要。大多数情况下,限制在于计算能力或可用内存,从而限制了模型的大小。工具要求和软件支持需求必须端到端地满足。我们的深度学习工具包考虑了这些模型部署方面的因素。
在边缘设备上进行模型部署存在三个高层权衡:压缩、准确性和吞吐量(图 12)。有些设备可能无法存储模型,需要您压缩、缩小或以某种方式减小模型(图 13)。如何压缩模型?通过稀疏化1, 2。
在特定情况下,您可能需要更高的推理吞吐量,并愿意牺牲推理准确性来换取更高的吞吐量。(图 14)。
换句话说,设备的性能要求和使用场景决定了您愿意进行的具体权衡。
Nervana™
2016 年,英特尔收购了 Nervana™,它是机器学习行业的领导者,也是硬件工程、系统软件、机器学习和云领域的一体化智能平台。
Nervana 的目标是构建一个智能平台。这意味着利用计算机创建和处理大型数据集并对其进行推理。目标是通过优化深度学习和其他算法来加速这一过程。
然而,机器学习的目的是为人类问题提供解决方案。所以我们回答这些问题:人们想如何使用深度学习?我们可以在哪里使用它?以下是我们立即可以使用我们的机器学习平台的一些地方:
- 医疗保健 – 医学影像是一个最大的领域之一。MRI 和 CT 扫描的体积成像,即使是单张图像也会产生问题。一些静态医学图像的每侧像素多达 200,000 个;一张图像本身可能就比基准数据集大。因此,计算机问题是巨大的,我们必须能够有效地扩展。
- 农业 – 基因组问题和气候建模,以及用于选择性收获作物的机器人蔬菜采摘机。这些需要在边缘和云端进行扩展,并且需要低延迟的推理。
- 金融 – 这里有许多用例,例如金融机构会遇到的庞大 IT 问题。各种交易方式的金融工具交易所可以使用深度学习来更好地专注于交易时间和方法。这些也用于预测潜在的欺诈行为,以保护交易所免受不利事件的影响。
- 汽车 – 语音识别、驾驶员辅助、自动驾驶。所有这些都有海量数据集,并不断收集更多数据。规模巨大,需要一个完整的解决方案,不仅能在汽车的边缘进行处理,也能在数据中心进行处理。
因此,深度学习是核心技术。Nervana 在每个客户那里应用“Google Brain”模型,一个中央核心处理所有相关信息(图 16)。
这种看待解决方案、解决方案中的工程师、部署以及创建深度学习产品的一切的方式,有助于客户理解如何将深度学习视为一项核心技术。
Nervana 的深度学习方法中额外关注的是云部署。云提供了最快速的深度学习部署给客户。具有高带宽、低延迟连接到弹性、可扩展云的环境,可以更轻松地进行探索性数据科学和训练数据模型。这是最易于理解的深度学习形式。它通过清晰的界面、较低的下载要求以及轻松地将信息提交到云服务而得到更好的采用。
英特尔在推动机器学习方面所起的作用
英特尔负责硬件和软件路线图以及框架更新的采用和改进。
硬件
Intel® Xeon Phi™ 处理器是当今最密集的计算解决方案,由于其高度并行的架构(图 17),是深度学习的最佳平台。它也与 Intel® Xeon® 处理器非常相似。为 Intel Xeon 处理器开发的所有内容都可以直接应用于 Xeon Phi,因为两者共享相同的计算模型。通过进一步集成内存子系统和互连,性能得到了显著提高。
易于编程、跨 Intel Xeon 和 Xeon Phi 处理器分摊编程的能力以及并行架构,为 Intel® Xeon Phi™ 处理器 72xx 系列带来了高性能和高生产力。
软件
跨越多个节点进行训练和推理的机器扩展是硬件的责任。每个节点的表现如何?Intel® Math Kernel Library (Intel® MKL) 是节点级优化的最重要的库。使用 Intel MKL,性能提升高达 24 倍(图 18)。
这种提升仅仅是使用 Intel® MKL 带来的。无需对 Intel MKL 进行重写代码。在多个节点上的性能提升会更大。所有流行的深度学习框架都将得到支持,并在多个节点上进行扩展。但无需等待;您现在就可以开始使用 Caffe* 和 Intel MKL。
英特尔还将发布一套深度学习工具包,提供用于加速深度学习解决方案的设计、训练和部署的工具。
摘要
人工智能的愿景和力量在于消除我们生活中的脑力劳动。机器学习将释放人工智能的真正力量。它是由数字数据爆炸和普遍连接触发的新型计算良性循环的关键赋能者。机器学习可以极大地扩展自动驾驶汽车、农业、健康和制造业等计算应用程序的 alcance。这些是简单的决策任务仍由人类完成的领域。随着机器学习和人工智能的最新进展,这些领域将得到改善、转型,并朝着更好的方向发展。
深度学习的计算需求需要紧急解决。我们必须进行规模化,将复杂模型的训练时间从数月和数周缩短到数天和数小时。机器学习计算基础设施必须兼顾性能和开发者的生产力。它必须利用云的效率。
分布式机器学习的扩展具有挑战性,因为它将数据和模型并行性以及节点间通信推向了可用极限。英特尔新的深度学习工具(即将整合 Nervana 的云堆栈)旨在隐藏/降低在资源受限的边缘设备上进行强力扩展训练时间和模型部署折衷的复杂性,同时不损害性能需求。
注释
- Jongsoo Park, Sheng Li, Wei Wen, Hai Li, Yiran Chen, Pradeep Dubey. "Holistic SparseCNN: Forging the Trident of Accuracy, Speed, and Size." http://arxiv.org/abs/1608.01409
- Song Han, Huizi Mao, William J. Dally. "Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding." http://arxiv.org/abs/1510.00149