JeffDean又用深度学习搞事情:此次要颠覆整个计算机系统结构设计

策划编辑 | Natalie
做者 | Milad Hashemi 等
编译 | Rays
编辑 | Emily
AI 前线导读:上个月,Jeff Dean、Michael I.Jordan、李飞飞、LeCun 等大牛发起的系统机器学习会议 SysML 2018 在斯坦福闭幕。这是一个专门针对系统和机器学习交叉研究领域的会议,目的是弥补当前关于 AI/ML 的讨论大多偏向算法和应用而关于底层的基础设施却少有讨论形成的缺口。

在会议主题演讲中,Jeff Dean提到了去年谷歌发布的研究论文《用 ML 模型替代数据库索引结构》(The Case for Learned Index Structures,去年在技术圈引发轰动, 详见 AI 前线首发报道),其关键点就是用计算换内存。将来基于摩尔定律的 CPU 在本质上将不复存在,利用神经网络取代分支重索引结构,数据库就能够从硬件发展趋势中受益。Jeff Dean 认为,这表明了一个很是有前景且十分有趣的方向: 传统系统开发中,使用 ML 的视角,就能发现不少新的应用。除了数据库,ML 还能使用在系统的哪些方面?Jeff Dean 表示,一个很大的机会是启发式方法,计算机系统里大量应用启发式方法,所以,ML 在用到启发式方法的地方都有机会带来改变。

今天 AI 前线为你们带来的是《用 ML 模型替代数据库索引结构》研究的续篇,这一次谷歌研究人员尝试用深度学习解决冯·诺依曼结构内存性能瓶颈,并取得了必定成果。Jeff Dean 在推特评论表示,将来在计算机系统的众多领域,相似研究工做将不断增多。

该论文是将神经网络应用于计算机结构设计中的一项开创性工做。如何将机器学习应用于计算机硬件结构领域,目前依然鲜有研究。这篇论文展现了深度学习在解决冯·诺依曼架构计算机内存性能瓶颈问题中的应用。论文关注的是学习内存访问模式这一关键问题,意在构建一种准确高效的内存预期器。研究提出将预期策略视为 NLP 中的 n-gram 模型,并使用 RNN 模型彻底替代基于表的传统预取。在基准测试集上的实验代表,基于神经网络的模型在预测内存访问模式上可稳定地给出更优的准确率和召回率。

更多干货内容请关注微信公众号“AI 前线”,(ID:ai-front)


如下内容为AI前线根据论文编译整理而成:算法

在计算机结构的设计中,不少问题涉及使用预测和启发式规则,内存预取就是其中的一个经典问题。内存预取将指令和数据在被微处理器实际使用前,预先置于存取速度更快的内存中。由于在冯·诺伊曼结构计算机中,微处理器的运算速度要比内存访问速度高出数个数量级,所以内存预取是一个关键的瓶颈问题,也被称为“内存墙”(Memory Wall)。有统计代表,计算机中 50% 的计算周期是在等待数据加载到内存中。为解决内存墙的问题,微处理器使用了层次结构的内存,即在结构上采用多级缓存设计,让规模更小可是访问速度更快的缓存更接近于处理器。为下降内存读取的延迟,须要预测什么时候以及哪些数据应预取到缓存中。所以,提升性能的一个关键问题,是如何给出有效的内存访问模式预测。数据库

在现代处理器中,使用了一些预测方法。不少预测器是基于记录表实现的。记录表是一种内存数组结构,记录了将来事件与以往历史信息的关联性。可是相比起传统的单机工做负载,现代数据中心的工做负载规模呈现指数级的增加,这对内存访问模式预测提出了严峻挑战。预测的准确性会随预测表规模的增大而显著降低。简单地扩展预测表的规模,需在硬件实现上付出很大的代价。数组

神经网络技术已在 NLP 和文本理解取得了很好的效果,它为解决序列预测问题提供了一种强大的技术。例如,在 SPARC T4 处理器中,已经部署了一种简单的感知机,实现对分支处理指令的预测。可是,对于微处理器架构设计而言,如何有效地引入序列学习算法依然是一个开放的问题。缓存

本文的研究考虑在微处理架构中引入基于序列的神经网络模型,意在解决内存墙所提出挑战,将序列学习应用到内存预取这一难题上。内存预取问题,在本质上能够当作是一种回归问题。可是该问题的输出空间很大,而且很是稀疏,使用标准的回归模型难以给出好的效果。本文做者们考虑使用一些图像和语言生成上的最新研究成果,例如 PixelRNN 和 Wavenet。这些研究成果对搜索空间作离散化,使得内存预取模型更近似于神经语言模型,并依此做为构建神经网络内存预取器的出发点。本文研究所提出的神经网络模型,能够成功地建模问题的输出空间,实现一种神经网络内存预取,并给出了显著优于现有传统硬件预取器的性能。此外,论文中使用的 RNN 能够根据应用的内存访问轨迹辨别应用的底层语义信息,给出的结果更具可解释性。微信

背景知识
内存预取器(Prefetcher)

内存预取器是一种计算机硬件结构,它使用历史内存访问记录预测未来的内存访问模式。现有的内存预取器大致上可分为两类。一类称为“步长预取器”(stride prefetcher),另外一类称为“关联预取器”(correlation prefetcher)。现代处理器中一般使用的是步长预取器,序列中固定采用稳定的、可重复的地址差值(即序列中相邻两个内存地址间的差值)。例如,给定一个内存访问模式(0,4,8,12),每次访问的地址差值为 4,那么预取器能够由此预测此后的地址访问模式为(16,20,24)。网络

关联预取器可预测地址差值不固定的重复模式。它使用了一个大的记录表,保持过往的内存访问历史信息。相比于步长预取器,关联预取器能够更好地预测非规则变化的模式。典型的管理预取器包括 Markov 预取器、GHB 预取器,以及一些使用大规模内存中结构的最新研究预取器。关联预取器须要具有一张大规模的记录表,该表的实现代价大,所以一般并未实如今多核处理器中。数据结构

递归神经网络(RNN)

深度学习适用于不少的序列预测问题,例如语言识别和天然语言处理。其中,RNN 可对长距离依赖建模。LSTM 做为一种广为使用的 RNN 变体,经过以加法方式而非乘法方式传播内部状态,解决了标准 RNN 的训练问题。LSTM 由隐含状态、元胞状态、输入门、输出门和记忆门组成,分别表示了须要存储的信息,以及在下一个时间步(timestep)中传播的信息。给定时间步和输入,LSTN 的状态可使用以下过程计算:架构

  1. 计算输入门、输出门和记忆门并发

  2. 更新胞元状态机器学习

  3. 计算 LSTM 隐含状态(输出)

其中,表示当前的输入和前一个隐含状态的级联(concatenation),表示点乘操做(element-wise multiplication),是 Sigmoid 非线性函数。上面给出的过程表示了单个 LSTM 层的处理形式,是该层的权重,是误差。LSTM 层能够进行堆叠,在时间步 N 的 LSTM 层的输出,能够做为另外一个 LSTM 层的输入,这相似于前向回馈神经网络中的多层结构。这使得模型在使用相对较少额外参数的状况下,增大了灵活性。

问题定义
将预取做为预测问题

预取能够当作是对将来内存访问模式的预测过程。若是数据并不在缓存中(即缓存未命中),预期器须要根据历史访问状况,到主存中去获取数据。每条内存地址由内存操做指令(load/store)生成。内存操做指令是计算机指令集中的一个子集,实现对计算机系统中具备地址内存的操做。

不少硬件厂商建议在作出预期决策时使用两个特征。一个是截至目前缓存未命中的地址序列,另外一个是指令地址序列,也称为程序计数器(Program counter,PC),即关联到生成每条缓存未命中地址的指令。

每条 PC 能够惟一标识一条指令,指令是对给定代码文件中的特定函数编译生成的。PC 序列可告知模型应用代码的控制流模式,而缓存未命中地址序列可告知模型须要下一步预期的地址状况。在现代计算机系统中,上述特性均使用 64 位整数表示。

初始模型能够在每一个时间步使用两个输入特征,即在步生成的缓存未命中地址,以及由 PC 预测的 N+1 步缓存未命中状况。可是其中存在一个问题,应用的地址空间是很是稀疏的。对于此问题的训练数据而言,缓存未命中的空间复杂度为量级,其中只有的缓存未命中地址出如今的物理地址空间中。图 1 显示了使用标准 SPEC CPU2006 基准测试集 omnetpp 时的缓存状况,红色点表示了缓存未命中地址。这一空间范围宽泛,具备重度多模态本质,这对传统的时序回归模型提出了挑战。例如,虽然神经网络很是适用于正则化输入,可是对这样的数据作正则化时,有限精度的浮点数表示将致使显著的信息丢失。该问题影响了对输入层和输出层的建模。在本文中,做者对此给出了解决方法。

图 1 数据集 omnetpp 上的缓存未命中状况。图中多尺度地展现了稀疏访问模式。

将预取做为分类问题

在本文做者提出的解决方法中,考虑将整个地址空间视为一个离散的大规模词汇表,并对词汇表执行分类操做。这相似于 NLP 中对随后出现的字符或单词的预测问题。可是,该空间是极度稀疏的,而且其中部分地址比其它地址更频繁地访问。对于 RNN 模型,是能够管理这样规模的有效词汇表的。此外,相比于单模态回归技术,经过生成多模态输出,模型处理能够变得更加灵活。在图像处理和语音生成领域中,已有一些研究成功地将输出输出做为预测问题而非回归问题。

可是,预期问题存在着种可能的 softmax 目标,所以须要给出一种量化(quantization)模式。更重要的是,预取必须彻底准确才能发挥做用。对于一般的 64 个字节状况应该如此,对于一般是 4096 个字节的页面也应如此。在页面层级上的预测,将会给出中可能的目标。为避免对超过个值应用 softmax,一些研究提出应用非线性量化模式将空间降维到 256 类。可是这些解决方法这并不适用于本文中的问题。由于这些方法下降了地址的分辨率,使得预取没法得到所需的高精度。

因为动态边界效应,例如地址空间布局随机化(ASLR)问题,同一程序的多轮运行可能会访问不一样的原始地址。可是,同一程序对于一个给定的布局将给出一致的行为。由此,一种可行的策略是预测地址差值,而非直接预测地址自己。如表 1 所示,地址差值的可能出现状况,要比地址的可能出现状况呈空间指数级别下降。

表 1 程序追踪数据集统计状况,“M”表示“百万”

模型描述

论文给出了两种基于 LSTM 的预取模型。第一种模型称为“嵌入 LSTM”模型,它相似于标准的语言模型。第二种模型利用内存访问空间的结构去下降词汇表的规模,下降了模型占用的内存量。

嵌入 LSTM 模型

该模型限制输出词汇表的规模,仅建模最频繁出现的地址间隔。根据表 1,要得到最优 50% 的准确性,所需的词汇表规模仅为量级乃至更小。这样规模的词汇表彻底处于标准语言模型可解决的能力范围内。基于此,论文提出的第一种模型对输出词汇表规模作了限制,选用了其中 50000 个最频繁出现的惟一地址差值。对于输入词汇表,模型考虑在词汇表中出现了至少 10 次的全部地址差值。要进一步扩展词汇表,不管在统计学仍是计数上都是有挑战的。这些挑战能够采用层次 softmax 类方法解决,有待进一步研究。

嵌入 LSTM 的结构如图 2 所示。模型将输入和输出地址差值以分类表示(即独热编码)。在时间步,分别嵌入输入和,并将嵌入词汇级联起来,构成两层 LSTM 的输入。进而,LSTM 对地址差值词汇作分类,而且选取个最高几率地址差值,用于预取。分类方法可直接给出预测几率,这对传统硬件是另外一个优势。

图 2 嵌入 LSTM 模型结构。其中和分别表示嵌入函数

实际实现中,预取器会返回多个预测值,所以须要从中作出权衡。虽然更多的预测值增长了缓存命中下一个时间步的可能性,可是有可能会从缓存中移除其它一些有用的项。论文选取在每一个时间步预取 LSTM 的头部 10 个预测值。这里还有其它一些可能的作法,例如使用使用 beam-search 预测以后个时间步,或是经过直接学习先于 LSTM 的一次前向操做给出对到时间步的预测。

嵌入 LSTM 模型存在一些局限性。首先,大型的词汇表增长了模型的计算复杂度和存储量。其次,截取部分词汇表无疑为模型准确性设置了一个上限。最后,不易处理一下罕见发生的地址差值,由于这些差值不多在训练集中出现。该问题在 NLP 领域称为“罕见词汇问题”。

聚类与 LSTM 的组合模型

假定大多数地址间感兴趣操做发生在本地地址空间中。例如,结构体和数组的数据结构一般使用持续的数据块存储,并会被指令重复访问。论文在模型设计中引入了上述理念,对本地上下文作细致建模。与之不一样的是,在嵌入 LSTM 模型中不只考虑了本地上下文,并且引入了全局上下文。

经过查看更窄区域的地址空间,能够发现其中的确存在着丰富的本地上下文。为此,论文从 omnetpp 中取出了部分地址集,并使用 K-Means 聚类为 6 个不一样的区域。图 3 中展现了其中的两个聚类。

图 3 展现了基准测试数据集 omnetpp 的六个 K-Means 聚类中的两个聚类。内存访问按照生成访问的 PC 分别标记颜色。

为达到对本地地址空间区域建模的相对准确性,论文对原始地址空间进行 K-Means 聚类,将数据分区为多个聚类,并对计算每一个聚类内的地址差值。图 4a 是对上例的可视化。该方法具备一个显著的优势,就是聚类内的地址差值集要显著地小于全局词汇表中的差值,这缓解了嵌入 LSTM 模型中存在的一些问题。

为进一步下降模型的规模,论文使用了多任务 LSTM 对全部距离建模,即对每一个聚类独立使用一个 LSTM 建模。聚类 ID 也添加为模型的特性,这为每一个 LSTM 提供了一组不一样的误差。

将地址空间分区为更小的区域,意味着每一个聚类内地址组使用的幅度量级大致上相同。所以,所生成的地址差值能够有效地正则化为适用于 LSTM 的真实输入值,再也不须要维护一个大型的嵌入矩阵,进而进一步下降了模型的规模。更重要的是,下一个地址差值预测的问题可做为一个分类问题,而回归模型在现实中一般不够精确。

该模型解决了一些嵌入 LSTM 中存在的问题。预处理步骤(即对地址空间的聚类)是模型中须要权衡考虑的一个因素。此外,该模型只对本地上下文建模,也能够对程序访问的不一样地址空间区域进行动态建模。

图 4 组合聚类和 LSTM 模型的结构,以及数据处理

实验

一个有效的内存预取器,应该具有对缓存未命中状况的准确预测能力。所以,论文的实验主要针对如何测定预取器的有效性。

实验数据的收集

实验中所使用的数据主要是程序的动态追踪数据,其中包含程序计算的一个内存地址序列。追踪数据使用动态工具 Pin 捕获。该工具附着在进程上,并以文件形式给出被测量应用访问内存的“PC,虚地址”元组。原始访问追踪数据主要包含了堆栈访问等命中内存的方法。对于研究中关注的预测缓存未命中状况,实验中使用了一个模拟 Intel Broadwell 微处理器的模拟器,获取缓存未命中状况。

实验程序使用的是对内存作密集访问的 SPEC CPU2006 应用。该基准测试集用于算机系统的性能作彻底评估。可是,与现代数据中心工做负载相比,SPEC CPU2006 依然是一个小规模的工做集。所以在论文的实验中,还添加了 Google 的 Web 搜索工做负载。

实验中将内存访问数据集分为训练集和测试集,其中 70% 用于训练,30% 用于测试。在每一个数据集上独立训练每一个 LSTM。嵌入 LSTM 使用 ADAM 训练,聚类 LSTM 使用 Adagrad 训练。使用的超参数参见原文附录。

实验测试的度量包括准确率和召回率。在实验中,对每一个模型作出 10 次预测。若是在头部 10 次预测中给出了彻底正确的地址差值,就认为生成了一次准确预测。

模型对比状况

实验将基于 LSTM 的预取器与两种硬件预取器进行了对比。第一种是标准流预取器。为保持机器学习预取器与传统预取器的一致性,实验中模拟了支持多至 10 个并发流的硬件结构。第二种是 GHB PC/DC 预期器。这是一种关联预取器,它使用了两个表。一个表用于存储 PC,并将所存储的 PC 做为执行第二个表的指针。第二个表存储了地址差值的历史信息。在每次访问时,GHB 预取器跳转到第二个表,预取历史记录的地址差值。关联预取器对于复杂内存访问模式表现很好,具备比流预取器更低的召回率。

图 5 给出了不一样预取器在各类基准测试数据集上的对比状况。尽管流预取器因为其动态词汇表特性能够得到最高的召回率,可是 LSTM 模型总体表现更好,尤为是准确率。

图 5 传统预取器和 LSTM 预取器的准确率和召回率对比图。其中,“Geomean”表示几何平均值

经过对比嵌入 LSTM 模型和聚类与 LSTM 的组合模型,能够看到两种模型间的准确率不相上下。后者趋向于给出更好的召回率。固然,组合更多的模型将会给出更好的结果,这有待将来的工做去探索。

对比 PC 的预测状况

该实验从嵌入 LSTM 模型的输入中分别移除或 PC。实验设计意在肯定在不一样输入模组中所包含的相对信息内容。

实验结果如图 6 所示。从图中能够看出,PC 和地址差值中包含有大量预测信息。地址差值序列中的预测信息能够提升准确率,而 PC 序列有助于提升召回率。

图 6 不一样输入模组的嵌入 LSTM 模型,准确率和召回率的对比图

解释程序的语义

相比于基于查找表的预期器,模式学习模型的一个主要优势是能够经过审视模型获取数据的内涵。图 7 展现了级联串在 mcf 上嵌入状况的 t-SNE 可视化。

图 7 级联串在 mcf 上嵌入状况的 t-SNE 可视化,图中按指令展现为不一样的颜色

图中的一个聚类是由一组具备统一代码的重复指令组成,这是因为编译器对循环体展开所致使。还有一个聚类仅由指针解除引用(pointer dereference)组成,这是因为程序遍历连接列表所致使的。在 omnetpp 中,对数据结构的插入和移除操做映射为同一个聚类,而数据比较操做则映射在不一样聚类中。例子所使用的代码参见原文附录。

结论及进一步工做

对应用程序行为的学习和预测,可在解决计算机架构中的控制和数据并发问题中发挥重要做用。传统方法是使用基于表的预测器,可是当扩展到数据密集不规则工做负载时,实现此类方法的代价过大。

本文介绍了二者基于神经网络的预取模型,它们给出了比基于表的传统方法显著高的准确率和召回率。在实验中,论文对模型作离线训练并在线测试,使用准确率和召回率评估了模型。实验代表,论文提出的预取器模型能够改进缓存未命中的分布。固然,还有其它一些在不增长预取器的计算和内存负担条件下改进预期器的方法。在进一步的研究中,能够考虑基于内存命中和未命中数据训练模型,可是这将显著改变数据集的分布和规模。

时效性也是研究预期其中一个考虑的重要因素。对于 RNN 预取器而言,预期过早会致使处理器未使用缓存数据,预取过迟会则对性能影响甚微,由于延迟访问内存的代价已经付出。一个简单的启发式规则是采用相似于流预期器的行为,预先对多个时间步作出预测,而非仅是下一个时间步。

最后一点,对应用性能的影响能够评估 RNN 预取器的有效性。在理想状况下,RNN 将会直接优化应用性能。一个考虑是,使用强化学习技术做为动态环境中 RNN 的训练方法。

固然,内存预取并不是计算机系统中惟一须要给出预测执行的领域。只要涉及分支行为,就须要作出预测。分支算法用于重定向控制流的地址,高速缓存替换算法在须要作出替换决定时预测从高速缓存的最佳替换处。若是采用机器学习系统代替传统微体系结构中的启发式规则,能够经过对此类系统审视,更好地理解系统的行为。论文中的 t-SNE 实验仅给出了一些表面上的观察,展现了内存访问模式是程序行为的一种表示。这代表,利用最新研究的 RNN 系统,为计算机系统结构研究提供了大量的机会。

查看论文原文:

https://arxiv.org/pdf/1803.02329.pdf


更多干货内容,可关注AI前线,ID:ai-front,后台回复「AI」、「TF」、「大数据」可得到《AI前线》系列PDF迷你书和技能图谱。

相关文章
相关标签/搜索