主要
人类的直觉和技术改进算法是至关重要的。然而,许多算法已达到一个阶段,人类专家没能进一步优化它们,导致日益增长的计算瓶颈。工作程序合成古典文学,跨越几十年,旨在生成正确的程序和/或优化程序使用代理延迟。这些包括点数的搜索技术4,5,6,7和随机搜索5,6,8,9,10以及最近的趋势在程序中使用深度学习的合成生成正确的程序11,12,13,14,15,16。使用深度强化学习(DRL),我们可以进一步通过生成正确和高性能算法通过优化实际测量延迟在CPU指令级别,通过更有效地搜索和考虑正确和快速的空间项目相比,以前的工作。
计算机科学的基本问题之一,是如何排序序列17,18,19,20.。这是在小学教全世界计算机科学课程21,22和无所不在地使用广泛的应用程序23,24,25。几十年的计算机科学研究都集中在发现和优化排序算法26,27,28。切实可行的解决方案的一个关键组件是一个小短序列的元素排序;这个算法被称为大数组排序时反复使用“分而治之”的方法29日。在这项工作中,我们专注于两种类型的小排序算法:(1)固定排序和(2)变量排序。一个固定长度的固定排序算法排序序列(例如,类3只能3)排序序列的长度,而变量排序算法可以排序的序列不同大小(例如,变量排序5可以排序序列从一到五元素)。
我们制定的问题,发现新的、高效的排序算法作为一种我们称之为AssemblyGame单人游戏。在这个游戏中,玩家选择一系列的低级CPU指令,我们称为汇编指令30.结合,产生一个新的、高效的排序算法。这是具有挑战性的玩家需要考虑汇编指令的组合空间产生一种算法既正确又快。的硬度AssemblyGame不仅来自搜索空间的大小,这是类似于极具挑战性游戏,比如国际象棋(10120年游戏)31日去(10700年游戏)32,但也从奖励函数的性质。一条不正确的指令在AssemblyGame可能使整个算法,使勘探在这个空间的游戏非常具有挑战性。
玩游戏时,我们引入AlphaDev,学习代理搜索训练是正确的和有效的算法。这个代理是由两个核心组件,即(1)学习算法和函数(2)表示。AlphaDev学习算法可以将DRL以及随机搜索优化算法AssemblyGame玩。主要学习算法在AlphaDev AlphaZero的延伸33著名DRL算法,神经网络的训练指导解决AssemblyGame搜索。表示函数是可互换的,捕获的底层结构组装程序。基于变压器主AlphaDev表示34。
使用AlphaDev,我们发现了固定和可变从头算法,都是新的和更有效的比人类先进的基准。固定排序解决方案排序3,4,5发现AlphaDev已经集成到标准排序函数在LLVM标准c++库3。使用这个库几百万用户包括大学和众多国际公司35。此外,我们分析新算法发现,比较AlphaDev随机搜索优化方法,并应用AlphaDev进一步域展示该方法的通用性。
将算法表示为低级的CPU指令
当编译算法机器代码从高级语言(如c++(例如,排序函数在无花果。1),该算法首先编译成汇编(图。1 b)。汇编程序然后将汇编程序转换成可执行的机器代码。在这项工作中,我们在汇编级优化算法30.。在一个典型的汇编程序,从内存的值复制到寄存器,寄存器之间操纵,然后写回内存。汇编指令的支持取决于处理器体系结构。这项工作的目的,我们关注的一个子集x86处理器体系结构支持的汇编指令使用AT&T语法36。每条指令的操作码的格式⟨操作数一个,操作数B⟩。一个指令是mov的例子 ,它被定义为将一个值从源(a) (B)目的地。进一步指令定义等比较(cmp ),有条件的(cmovX移动 )和(jX跳扩展数据表中可以找到) 1。在图中的例子。1 b,% eax, % ecx、% edx % edi对应于四种不同的注册地点和(%肢体重复性劳损症),4 (% rsi)对应于两个不同的内存位置。符号常量值2美元是一个占位符,它对应于向量的长度。我们使用术语汇编程序和组装算法互换工作。这是因为AlphaDev从头构建一个汇编程序,最初从一个无序的指令集,每次它AssemblyGame,定义一个新的、高效的算法。
DRL发现更快的算法
在本节中,我们制定优化算法在CPU指令级的强化学习(RL)的问题37,环境建模作为一个单机游戏,我们称之为AssemblyGame。每个州在这个游戏中被定义为一个向量年代t=⟨Pt,Zt⟩在哪里Pt表示该算法生成的游戏,到目前为止Zt代表内存和寄存器的状态执行当前算法后一组预定义的输入。见图。2在步伐t,玩家获得的当前状态年代t并执行一个动作一个t。这包括附加法律汇编指令(例如,mov < a、B >)当前算法生成的迄今为止。一个奖励rt收到,包括衡量算法的正确性和延迟。算法的正确性(图。2 b)需要输入一组N测试序列到当前的算法Pt生成N输出。这些输出与预期输出和正确性的奖励rt计算。延迟奖励可以通过(1)惩罚生成代理提高算法的长度(长度和延时是高度相关时),我们称之为算法长度奖励,或(2)测量的实际延时算法。游戏为有限数量的执行步骤,之后游戏终止。赢得比赛对应生成一个正确的,低延迟算法使用汇编指令。失去了游戏对应生成一个不正确的算法或正确但低效的算法。
我们将饰演AlphaDev这个单人游戏的代理。代理的主要学习算法是AlphaZero代理的延伸32和导游蒙特卡洛树搜索(mct)使用深层神经网络规划过程33,38。神经网络的输入年代t和输出是一个政策和价值的预测。政策的预测是一个分布在行动和价值函数是一个预测的累积回报R代理人应将从当前状态年代t。在比赛中,代理接收作为输入的当前状态年代t。代理然后执行一个特定程序和使用此选择下一个行动。然后使用生成的游戏更新网络的参数,启用代理去学习。
关键是AlphaDev表示39,40能够代表复杂的算法结构有效地探索太空的指令。为了达到这个目标,我们引入AlphaDev表示网络(扩展数据图。1)。这个网络包括两个组成部分,即(1)变压器编码器的网络,为代理商提供了一种表示算法结构,和(2)的CPU状态编码器网络,帮助代理预测算法如何影响的动态内存和寄存器。CPU状态编码器网络由一个多层感知器接收作为输入每个寄存器和内存位置的状态对于一个给定的输入。这些网络的每个输出映射进行组合收益率AlphaDev状态表示。
变压器编码器
变形金刚是自然文本编码器和最近与语言模型有很大的成功14,34,41。因此,这让我们适应汇编指令的标准变压器模型。我们开发和整合变压器编码器,适应MultiQuery变压器的编码器42,进入AlphaDev表示网络代表汇编指令。对应每个汇编指令的操作码和操作数转换为一个炎热的编码和连接到表单的原始输入序列。这是美联储通过多层变压器编码器,它映射到相应的嵌入向量(见扩展数据图。1 b插图)。
延迟价值函数
延迟是一个重要的奖赏信号,用于指导代理发现高性能算法。为了更好地估计延迟,我们实现了一个双重价值函数设置,即AlphaDev有两个值函数头:一个预测算法正确性和第二个预测算法延迟。延迟的头直接用于预测给定的延迟程序通过使用程序的实际计算延迟期间作为AlphaDev蒙特卡罗目标训练。这种双头方法取得更好成果比香草、单头值函数设置优化时真正的延迟。
结果
发现快速排序算法
我们从头开始训练AlphaDev代理生成一系列固定的排序和变量排序算法是正确的,比人类先进的基准实现更低的延迟。
固定的排序算法
我们考虑三个基本算法:3、4和5。人类最先进的标准对这些算法是排序网络43生成效率,条件无枝的汇编代码。这意味着所有指令执行顺序,没有分支。提高这些算法是具有挑战性的,因为他们已经高度优化。见表1,AlphaDev能够找到比人类的标准排序算法与更少的指令3和5和匹配的最先进的性能4。这些短的算法确实导致更低的延迟的长度和延时算法相关条件无枝的情况;请参阅附录B在补充信息为更多的细节。我们还探讨了扩展AlphaDev略大类型使用一个变体。我们设法拯救三个指令6,两条指令在7和一条指令在8,它提供了一个有前途的未来工作的基础。请参阅附录C补充信息概述的方法。
变量排序算法
我们考虑三个变量排序算法:VarSort3 VarSort4 VarSort5。人类的基准在每种情况下的定义是一个算法,对于一个给定的输入长度,调用相应的排序网络。在这种情况下,分支是必需的,这大大增加了问题的复杂性,代理需要(1)确定需要多少subalgorithms构造和(2)构建的主体主要并行算法。代理可能还需要从其他subalgorithms subalgorithms打电话。在这种情况下,优化导致长度显著缩短算法相比,人类的标准见表1。然而,由于引入了复杂性分支,延迟和长度并不总是相关的;看到补充信息为更多的细节。因此,我们实现了一个程序措施的实际延时程序通过第五百分位的延迟测量在100个不同的机器上,计算置信区间44和优化这个指标。看到方法为基准设置。当优化延迟,代理大幅提高,人类的基准在每种情况下见表1 b。
新算法的发现
解决方案由AlphaDev包括新的和令人兴奋的发现算法的发现导致更有效的性能。在固定设置,我们发现AlphaDev发现了两个有趣的指令序列,当网络应用于排序算法,该算法减少每次一个汇编指令。我们将每一个指令序列(1)AlphaDev互换移动和(2)AlphaDev分别复制移动。
AlphaDev交换移动
图3提出了一种最优排序网络为三个元素方法分类的概述网络)。我们将解释如何AlphaDev提高了圈网段。有许多变体中发现这种结构的排序不同大小的网络,和相同的论点适用于在每种情况下。圈出的部分网络(最后两个比较器)可以被视为一个需要输入序列的指令序列⟨A, B, C⟩和转换每个输入如表所示2(左)。然而,电线上比较器B和C之前这个操作符,因此输入序列B≤C的保证。这意味着它足以计算最小(A, B)作为第一个输出而不是分钟(A, B, C)如表所示2(右)。伪代码图之间的区别。3 b, c演示了如何AlphaDev互换保存一个指令每次移动应用。
AlphaDev复制移动
图3 d提供了一个排序网络配置,组成的三个比较器,应用在四线。这个配置在一个8排序网络和对应于经营者采取四个输入⟨A, B, C, D⟩,并将它们转换为四个输出见表2 b(左边)。可以表明,作为8,流入的输入操作符满足下列不等式:rm \ ({\ D{}} \通用电气\ min ({\ rm{一}},{\ rm {C}}) \)。这意味着,操作员可以通过应用改进AlphaDev此举被定义在表副本2 b(右边),导致一条指令不到原来的运营商。代码区别原始运营商和移动应用AlphaDev副本后代码可视化在无花果。3 e, f,分别。
新变量的排序算法
VarSort4算法发现AlphaDev尤其有趣。人类的流程图基准算法和AlphaDev图中可以看到。4 a、b,分别。人类的基准算法决定了输入向量的长度,然后调用相应的排序网络对元素进行排序。AlphaDev解决方案有一个完全不同的方法见图。4 b。如果输入向量的长度是严格大于2,然后3立即被称为,导致前三个元素排序。如果矢量大于三个元素,然后一个简化的那种类型4算法称为剩余的未分类的输入向量中的元素。正是这种简化程序的一部分,收益率显著提升算法的长度和延迟。
随机搜索优化方法
重要的是要理解RL相比其他方法的优势和局限性对程序优化。因此,我们实现了一个先进的随机superoptimization方法8,它适应了设置和使用它作为AlphaDev的学习算法。我们称这种变体为AlphaDev-S(见方法更多的细节)。我们运行这个算法至少有相同数量的资源和所AlphaDev。AlphaDev-S需要高昂的时间为延时优化直接延迟后需要计算每一个突变。因此,AlphaDev-S优化延迟代理,即长度和算法,然后,在培训结束时,我们搜索所有正确的程序由AlphaDev-S和基准每一个找到最低的延迟解决方案。一般来说,我们发现AlphaDev始终优于AlphaDev-S当从头学习没有以前的知识。此外,随着项目的大小增加,AlphaDev探索数量级减少项目(1200万项目在最坏的情况下)相比AlphaDev-S(31万亿项目在最坏的情况下)。这可能是因为AlphaDev能够更好地探索空间广度优先算法相比的随机搜索过程更容易卡到当地最适条件;看到方法概述的探索假说。此外,AlphaDev从来没有评估延迟在搜索,因为它使用的延迟值函数的预测,因此,只需要计算实际测量延迟生成程序的不到0.002%。当将以前的知识纳入AlphaDev-S,如温暖的开始学习算法的算法解决方案,AlphaDev-S是计算效率为3,4,5(无枝的组装算法),也会产生竞争的低延迟算法AlphaDev在每种情况下。然而,对于需要分支(if - else语句)的算法,算法的长度和延迟是不相关的,比AlphaDev-S AlphaDev发现更低的延迟的解决方案,即使温暖从这个算法,算法的解决方案。看到方法这些算法的深入分析。
泛化到额外的域
测试AlphaDev的普遍性,我们训练代理一组额外的域。这些包括协议缓冲区反序列化子程序称为VarInt,下面,和竞争的编码问题(请参阅附录D补充信息更多的细节)。竞争编码域表报告延迟性能1 b。
是谷歌的开源协议缓冲区数据格式用于序列化结构化数据45。这种格式是常用的性能或网络负载的情况下的主要问题。VarInt算法46是一个关键的组件在序列化和反序列化过程。我们训练AlphaDev代理变量排序优化VarInt反序列化功能正确性和测量延迟。正确性,我们奖励反序列化每个输入正确的代理。我们使用一组80输入和相应的输出,覆盖常见protobuf用例。AlphaDev学习一个优化VarInt反序列化功能和管理人类的表现明显优于基准单值输入。我们的代理发现一个模式解决方案,既缩短(表1)和三倍的速度比人类的基准(表1 b)。在这一过程中,代理也发现了一种新的VarInt分配移动AlphaDev学会两个操作组合到一个单指令导致延迟储蓄。请参阅附录D.1在补充信息整整这一举动的概述。这是一个强烈的迹象表明AlphaDev能够推广优化非平凡的,现实世界的算法。
Libc + +补丁
3,4,5排序算法在LLVM libc + +标准分类库被称为大很多次排序算法,因此图书馆的基本组件。我们逆向工程低级组装排序算法由AlphaDev发现3,4和5 C + +和发现,我们的类实现了改进的序列长度的5 70%,大约1.7%超过250000元素的序列。这些改进是uint32, uint64 ARMv8浮点数据类型,Skylake英特尔和AMD禅宗2 CPU架构;请参阅附录E中补充信息完整的性能表。性能上的改进,都是由于无枝的条件生成的装配AlphaDev以及新AlphaDev交换行动。长度为5,我们使用43算法AlphaDev发现的,因为它导致更有效的c++实现。在发送这些算法进行评审和正式被纳入libc + +标准分类库3。它是第一个在十多年来改变这些子例程。这也是第一次在图书馆这种任何组件已经取代了一个算法,自动发现使用强化学习。我们估计这些例程被称为每天数以万亿计的时间1,35,47。
讨论
从头AlphaDev发现新的、先进的排序算法,已被纳入LLVM c++库,使用的数以百万计的世界各地的开发人员和应用程序23,24,25。AlphaDev和随机搜索都是强大的算法。一个有趣的未来的研究方向是研究这些算法结合在一起实现这两种方法的优势互补。
重要的是要注意,AlphaDev可以,理论上,概括函数不需要详尽的验证的测试用例。例如,哈希函数48以及加密散列函数49定义功能正确性的哈希碰撞。因此,在这种情况下,AlphaDev可以优化减少碰撞以及延迟。AlphaDev还可以,理论上,优化复杂逻辑组件内的身体大,令人印象深刻的功能。我们希望AlphaDev可以提供有趣的见解和激发新方法在人工智能和项目综合社区。
方法
背景
AlphaZero
AlphaZero33是一个RL算法,利用其特定政策改进算子。它包括(1)一个表示网络f代表输出一个潜在的表示ht国家的年代t;和(2)一个预测网络fpred预测预期回报(值)\({\帽子{v}} _ {t} \)和政策(即在行为空间分布){\ \({\帽子π}}_ {t} \)从一个给定的潜伏状态。该算法使用真正的力学和奖励计划。MuZero38是一种基于模型的变体的AlphaZero相同的表征和预测网络,但也学习的动力学模型和预测回报,它用途规划。具体地说,它学会了一个动态网络f直流发电机预测未来潜在的状态\ ({{\ bf{\文本{h}}}} _ {t} ^ {k + 1} \)和奖励\({\帽子{r}} _ {t} ^ {k + 1} \)造成的过渡。注意,下标t表示在现实环境和步伐上标k在模型中代表了步伐。
到达一个新的国家,AlphaZero收益首先编码表示的国家变成一个潜在的表示网络。然后,真正的动力或动态网络(MuZero)以及预测网络fpred(ht)是用来模拟一些填写搜索树的轨迹,通过抽样状态转换。在每个节点,选择操作使用一个乐观策略称为预测树绑定上的信心32,为了平衡勘探(尝试新行为)和开发(发展进一步的子树的当前估计最好的行动)。这种策略开始按照预测的政策{\ \({\帽子π}}_ {t} \)紧密,逐步转向最大化预报值函数。最终,一个行动建议由根节点的概率抽样与特定期间访问数成正比。然后训练预测政策来匹配特定的访问统计政策,试图提炼搜索过程的政策,以便后续的迭代mct无视节点不会有前途。
排序网络
排序网络是非常高效的结构可以在现代CPU并行体系结构。因此他们往往为了实现更快的运行时性能,尤其是在小类,而流行和有效的基本情况插入排序等算法17,43,50。一个排序网络43包括两种类型的项目称为比较器(竖线)和电线(横线)(扩展数据图。2)。每个线从左到右值。当两线相交于一个比较器,两个电线上的值进行了比较。如果线底部的值小于面网的价值,然后导线之间的价值交换见扩展数据图。2 b。编程实现的排序网络由执行这些掉期特殊的双从输入序列的元素在一个特定的顺序。
行动修剪规则
我们裁剪操作空间通过删除一些程序不变性(例如,寄存器分配的顺序)和非法指令(例如,比较两个内存位置)。这有助于减少行动空间的大小,提高收敛速度。在我们的实验中,我们使用以下规则:
- (1)
内存位置总是以递增的顺序读取。
- (2)
寄存器分配增量秩序。
- (3)
我们不能比较或有条件地搬到一个内存位置(非法)。
- (4)
我们可以读和写每一个内存位置只有一次。
- (5)
我们不能使用non-initialized寄存器(非法)。
- (6)
不要连续执行指令进行比较。
训练
我们火车AlphaDev张量处理单元(TPU) v。3,总批处理大小为1024 / TPU的核心。我们使用最多16 TPU核100万次迭代和培训。在演员方面,游戏是在独立的TPU v。4,我们使用512的演员。在实践中,所有任务,培训需要,在最坏的情况下,2天收敛。
AlphaDev-S
重要的是要理解的优点和局限性RL相比其他可能的方法程序优化。因此,我们实现了一个先进的随机superoptimization方法8和把它融进AlphaDev学习算法来优化排序功能。我们称这个改编版本为AlphaDev-S。我们已经重新专门为排序优化领域。这包括实现算法运行与我们的装配环境,定义一个正确性和性能损失函数特定排序和运行广泛hyperparameter扫描识别最好的变体。函数用于AlphaDev-S成本c=正确性+α×性能,正确性对应计算不正确的输入序列元素的数量仍未排序的,长度奖励和性能对应算法α是一个体重交易两个成本函数。我们不能直接优化延迟,这大大减缓了学习算法学习不可行。应该注意的是,这个函数已经适应支持AlphaDev所使用的相同的汇编指令集以及删除相同的错误或违法行为。它还使用相同的程序正确性计算模块(图。2 b)计算的正确性。
AlphaDev-S然后执行的第一个提议一个转换程序存储在缓冲区(可能是空的或与一个已经初始化排序程序)。的正确性和性能术语然后使用程序正确性模块和算法计算长度,分别。如果成本是低于当前最好的成本,高概率的新计划被接受,否则将被拒绝。现在我们将讨论正确性成本函数和变换详细重量。
正确的成本
正确性成本函数,我们实现了三种类型的成本函数。第一个定义是正确放置物品的百分比:\ \(压裂{P P {C} _ {t}} {P} \)在哪里P是物品的总数和电脑吗t正确的放置物品在步伐t。第二个变体是方程的根。最终的成本函数根的区别\ \√{-{电脑}_ {t}} \)这就是产生最佳性能。
程序的转换
我们启用了几个程序转换如添加一个指令增加程序的大小(添加变换),交换两个指令(交换变换),随机改变一条指令的操作码(操作码变换),随机抽样选择指令的操作数(操作数转换)和随机样本一个操作码和相应的操作数(指令变换)。有可能影响这些转换的采样鼓励一些经常被抽样或多或少。我们为抽样权重优化变换通过运行一个广泛hyperparameter扫描。
调查研究AlphaDev变体
我们现在一组调查研究,有助于更好地理解DRL的优点和局限性和随机搜索学习算法用于AlphaDev。我们比较AlphaDev AlphaDev-S。我们实现了两种变体的AlphaDev-S:(1)冷启动(AlphaDev-S-CS)和(2)热启动(AlphaDev-S-WS)。AlphaDev-S-CS使用没有以前的信息,来生成一个项目从一个空的项目缓冲区。AlphaDev-S-WS缓冲温暖开始的正确排序程序(例如,最优排序网络汇编程序),编辑程序进一步优化它。我们比较AlphaDev的变异个体和变量排序算法设置。
因为AlphaDev总是从头学习没有以前的知识,直接比较是冷启动随机搜索版本:AlphaDev-S-CS。然而,随着初始算法程序有时可能是可用的,我们也比较AlphaDev温暖开始随机搜索版本:AlphaDev-S-WS。
应该注意的是,随机搜索变量不能直接优化延迟,这将使学习不可行,因为计算效率。因此,我们AlphaDev-S长度变量优化算法。培训结束时,我们将遍历生成的程序集AlphaDev-S跨不同长度和确定最低的项目延迟。
在每种情况下,随机搜索算法(AlphaDev-S)运行使用至少相同的计算资源和所AlphaDev。
固定的种类
我们首先检查固定的各种方法的性能排序算法。在这种情况下,所有算法的变体长度作为算法优化算法和延迟条件无枝的高度相关的设置(请参阅补充信息更多的细节)。
在冷启动设置,AlphaDev-S-CS无法找到最优项目在每种情况下的扩展数据表2。此外,AlphaDev-S-CS探索数量级比AlphaDev项目,扩展数据表所示2 b。在温暖的开始设置,AlphaDev-S温暖开始排序算法程序,并能够匹配的性能AlphaDev在每种情况下,扩展数据表所示2。它比AlphaDev计算效率更高,扩展数据表所示2摄氏度但探索数量级更多项目3和5,扩展数据表所示2 b。可以说,AlphaDev-S-WS具有实质性的优势在这个场景中,因为它提供一个初始的算法程序。我们将展示变量类型节,当算法变得更加复杂和分支介绍,温暖开始学习算法的算法程序是不够的,可以使它陷入非最优解决方案。
蛮力的方法
我们也使用了强力的方法证明不存在程序短于17日指令为3。我们必须列举大约1032项目,即使修剪启发式,花了超过3天来证明这一假设。4及以上这个方法是不可行的。
延迟基准测试套件
一个程序的长度是只代表一种算法的性能。当我们介绍分支结构,程序的长度和延迟是不相关的。因此,我们在实际机器上运行的程序和测量他们的延迟。微基准测试是非常具有挑战性的,鉴于许多噪声源,可能影响测量。尤其如此,当运行在机器那里可能会干扰其他进程共享。我们的方法是有一个单独的基准测试服务,复制在分开的机器上,这样我们就能很快在受控的环境中执行许多测量在不同条件下。系统的工作原理如下:
- (1)
RL代理流程1000测量机使用复制服务。
- (2)
为每一个测量,服务运行超过10000随机输入给定的排序算法(例如,对于那种3这是3×10000 = 30000随机整数)。
- (3)
我们测量的时间使用CPU性能计数器(CPU_CLK_UNHALTED.CORE)。
然后我们以第五百分位为我们最后的测量,因为我们假设大多数噪声源是片面的(例如,缓存错过,优先购买权等等)。我们在训练过程测量跨十台机器的计算效率。培训之后,我们的基准AlphaDev对基线的解决方案的解决方案,和过程测量在100台机器更多的准确性和降噪。对于每个基准测试,我们使用传播变为免费计算置信区间双侧置信区间对分位数表格的方法44。
变量类型
当优化直接延迟,AlphaDev优于AlphaDev-S-WS VarSort3, VarSort4和VarSort5扩展数据表中3。在每种情况下AlphaDev-S-CS未能找到一个解决方案。例VarSort4和VarSort5、程序长度和延迟(见不相关补充信息更多的细节)。这表明当程序长度不能用作性能,代理AlphaDev能够比AlphaDev-S找到更低的延迟的解决方案。这是即使在情况随机搜索温暖开始的算法程序。此外,AlphaDev收敛于最优解后探索最多12 m程序扩展数据表中看到3 b。这是数量级低于AlphaDev-S-CS AlphaDev-S-WS,分别在最坏的情况下(31万亿项目)。
探索假说
我们建议AlphaDev-S努力发现程序从头学习,被困在当地最佳状态当温暖的开始,因为它有限的勘探能力的随机搜索过程。扩展的数据图。3显示二维t随机邻居嵌入(t新力)预测51AlphaDev和AlphaDev-S组装算法发现VarSort5在各自的训练程序。用于投影的特性包括正确性、延迟、算法长度和直方图统计每算法使用的指令。扩展的数据图。3表明地区算法空间探索AlphaDev, AlphaDev-S-CS AlphaDev-S-WS,分别,而扩展数据图。3 b添加算法正确性上每个点的t新力投影的色彩显示每个发现算法的正确性,从错误的算法(紫色)纠正算法(黄色)。AlphaDev-S变异都涵盖了密集的圆形区域在他们最初的种子,这凸显了广度优先性质的随机搜索过程。这说明AlphaDev-S-CS无法浏览空间的不正确的算法正确合理的时间和发现算法当从头开始学习。类似的论点适用于AlphaDev-S-WS即,当从一个已经优化正确但是理想专家演示中,该算法偏向探索其附近和努力逃离这个局部极大值。相比之下,AlphaDev更加多样化的空间覆盖算法,为长期价值函数是一个指导信号发现新的和有趣的部分算法的空间。见扩展数据图。3 b,它能够逃避错误的算法的空间发现一个新的空间正确的算法,突出AlphaDev提供的勘探的优势。
相关工作
组合优化
有很多方法来优化装配程序,我们分为三组:列举的搜索、随机搜索和象征性5。
首先,列举的搜索技术包括强力程序枚举4,5,6使用象征性的定理证明以及隐式枚举52,53。这些方法搜索程序的空间找到一个解决方案基于一组预定义的程序,启发式和/或成本函数。这些方法难以跨大区域的程序空间,尤其是在这个项目的规模和复杂性增加。
第二,随机搜索技术规避全面枚举依靠抽样马尔可夫链蒙特卡罗抽样等机制5,6,8,9。拉杰夫Alur et al。5定义一个正确规范,提供了一个逻辑公式,使用符号的理论背景。我们的目标是找到一个实现表达式,逻辑公式定义规范是有效的。这个想法是为了迭代添加测试用例,然后搜索,扩大程序解决给定的测试用例。他们优化的正确性问题书黑客的喜悦54。Phitchaya Mangpo Phothilimthana et al。6介绍镜头算法基于计数的运行,随机和象征性的并行搜索,而依靠手工修剪规则。这个设置可以优化到21日指示,并不能优化延迟和分支的支持。另一个算法8基于马尔可夫链蒙特卡罗拒绝组装使用的采样和转换适用于项目损失函数是一个函数的正确性和性能。许多这些方法容易陷入局部最小值,也会挣扎,程序的大小和/或复杂性增加。此外,结合实际测量延迟到这些方法不可行或极其昂贵。
第三,象征性的搜索方法也可以实现优化组装程序。这些包括坐在解决者55解决,SMT5,6和混合整数规划(MIPs)56,57。然而,这些方法扩展问题。例如,经典的解决需要一个问题转化为一定的规范形式。它通常需要一个专家表示,解决者和大量的时间找到一个高效的配方。此外,对于任何新修改的问题,这是重复。经典动力学也很难并行化,因此,它是具有挑战性的利用更多的硬件加速求解过程。另一个象征性的搜索算法是Cholorphyll10实现一个多阶段的方法。它首先需要作为输入的源程序分区注释指定代码和数据驻留的地方。然后,布局合成器地图程序片段到物理核心计算成本降到最低。然后分成每个核程序代码片段和程序编译成机器代码片段。在这一点上,一个superoptimizer优化每一个碎片。
SIMD优化
各种方法58,59,60也被应用于排序函数,单指令,多数据(SIMD)61年设置。这个设置可以并行指令执行,但不支持目前在LLVM等流行的库libc + + std::类库。一个例子是,从Gilles Barthe等。7优化程序,提出了一种方法通过自动vectorizing循环和SIMD指令。他们这样做通过引入一个框架,用于验证转换程序的正确性和执行基于搜索过程使用转换说。他们的框架可以发现SIMD循环结构的九个指令在0.12年代,也对应于一个最低2×加速。
RL合成方法程序
也有一些研究使用RL程序优化。凯文·埃利斯et al。62年学习策略和价值函数编写和评估代码,以及执行蒙特Carlo-style在推理搜索策略。这项工作需要pretraining步骤,旨在生成正确的程序,满足一个预定义的规范。该方法成功地应用于计算机辅助设计和字符串编辑程序。超音速63年使用一个RL meta-optimizer选择不同RL架构,使用Multi-Armed强盗策略搜索找到状态表示,奖励功能和RL算法,对当前任务是最优的。这需要许多RL的跟踪算法和架构,应用状态空间的一部分。相比之下,我们的方法只注重培训一个RL结构,利用其特定的搜索和强大的国家表示。Shypula et al。64年创建一个监督装配数据集和用它来训练一个Transformer模型映射实现优化代码,其次是RL阶段为提高解决方案的质量。我们的方法不需要监督数据集或两个独立的培训和整合阶段,并优化端到端使用RL和搜索而不是一切。陈等人。65年定义自己的领域特定语言和执行输入输出程序更好地使用合成中间程序表示指导合成的例行公事。他们表明,这与RL可以合并,使用的设置鲁迪Bunel et al。66年和提高生成函数的正确性。他们不这样做,然而,优化程序长度或延迟。
输入-输出示例程序合成
大量的工作地址从投入产出对学习项目的问题。一种方法学习的神经网络直接输入输出匹配11,13,67年,68年。这种方法很难融入现有的库和可以努力推广前所未有的投入,虽然已经有一些令人鼓舞的进展用图表示69年。另一种方法是在程序执行一个搜索空间,指导下学习模型12,70年,71年,72年。例如,陈等人。70年使用模型,预测下一个程序令牌部分程序和输入-输出的基础上对。这有一些相似处搜索是如何引导我们的方法:学习政策之前在AlphaZero模型预测下一个记号,学习的基础上,结合部分程序,程序对输入的影响。然而,我们感兴趣的是找到正确的和有效的程序,这是我们实现通过进一步学习值函数逼近的预期延迟部分程序,并使用AlphaZero将这个值函数在搜索过程。
深度学习的代码生成
还有几个深度学习方法使用大型语言模型来生成代码。这些方法都有不同的使用从transpilation,代码重构和解释代码15使用自然语言生成人类竞争代码描述14。特定的工作旨在生成正确的代码,但不关注生成低延迟的解决方案。
事程序优化
有几个项目合成研究解决排序算法。例如,白色等。26使用RL学习排序功能。他们的工作使用几个启发式和领域特定语言产生一种排序算法称为强化编程。斯利瓦斯塔瓦等。27编码程序合成作为验证问题。具体地说,它们代表了一个合成的任务作为一个元组组成的函数表达式,域和卫队出现在合成程序和资源约束。这个想法是,给定一个预定的资源约束,他们的合成器产生程序符合预定义的规范,以确保正确性。他们把这个应用到发现归并排序和快速排序。杰森·安塞尔等。28需要作为输入预定义算法(例如,插入排序,归并排序和快速排序),然后决定什么时候使用它的自动调谐功能选择这些算法的执行。它是通过定义一个包含规则和转换语言决定算法选择和执行。
数据可用性
综合生成的数据用于训练系统是根据程序在文章中解释道。复制和交换的算法由AlphaDev发现运营商提出了在主纸。我们还发现AlphaDev大会发布的实现3 - 8以及VarSort3, 4和5在Github上https://github.com/deepmind/alphadev。我们包括详尽的测试,以确保每一个实现都是正确的。此外,附录G补充信息包含一个额外的列表,正确排序算法由AlphaDev发现3,4,5。性能的3,4,5算法在官方LLVM基准套件为三个不同的CPU架构以及花车,int32和int64数据类型是详细的在附录E补充信息。此外,AlphaDev类型3,4,5实现可以在LLVM libc + +标准分类库3。
代码的可用性
我们也发布了伪代码https://github.com/deepmind/alphadev包括环境,完整的演员和培训循环以及其特定核心算法。此外,我们JAX实现我们的政策,包括我们的实际价值和代表性网络,使架构去复制。最后,我们有一个配置文件包含hyperparameter定义要使用的代理。
引用
亚马逊。亚马逊S3-two兆对象,每秒110万个请求。AWShttps://aws.amazon.com/blogs/aws/amazon - s3对象-二万亿- 1100万- second/请求(2013)。
科尔曼、t·h·等。算法导论(麻省理工学院出版社,2022)。
sort3 Gelmi, m .引入无枝的排序函数,sort4 sort5。LLVM.orghttps://reviews.llvm.org/D118029(2022)。
邦萨尔,s &艾肯,a窥孔superoptimizers的自动生成。ACM SIGARCH第一版。拱门。新闻34,394 - 403 (2006)。
Alur, r . et al。Syntax-Guided合成(IEEE 2013)。
Phothilimthana, p . m . et al .扩大superoptimization。在Proc。21建筑国际会议上支持的编程语言和操作系统297 - 310 (ACM, 2016)。
Barthe, g . et al .从关系验证SIMD循环合成。在Proc. 18 ACM SIGPLAN研讨会上并行编程的原理和实践123 - 134 (ACM, 2013)。
Schkufza E。,年代h一个rma, R. & Aiken, A. Stochastic superoptimization.ACM SIGPLAN通知48,305 - 315 (2013)。
Bunel, r . et al。学习superoptimize项目。在Proc。学习国际会议上表示(ICLR, 2016)。
Phothilimthana, p . m . et al .叶绿素:synthesis-aided编译器的低功耗的空间架构。ACM SIGPLAN通知49,396 - 407 (2014)。
Vinyals, o . et al .语法作为一门外语。放置神经通知。Proc。系统。28,2773 - 2781 (2015)。
陈,X。,Liu, C. & Song, D. Towards synthesizing complex programs from input-output examples. InProc。学习国际会议上表示(ICLR, 2018)。
Devlin j . et al . Robustfill:神经项目学习在嘈杂的i / o。在Proc,机器学习国际会议990 - 998 (PMLR, 2017)。
李,y . et al .竞技水平与AlphaCode代码生成。科学378年,1092 - 1097 (2022)。
皮尔斯,h . et al。食品和其他大型语言模型能帮助我们修复安全漏洞吗?预印在https://arxiv.org/abs/2112.02125(2021)。
陈,m . et al .评估大型语言模型训练的代码。预印在https://arxiv.org/abs/2107.03374(2021)。
Bingmann, T。,Marianczuk, J. & Sanders, P. Engineering faster sorters for small sets of items.软件:Pract。擅长。51,965 - 1004 (2021)。
Levcopoulos, c & Petersson o . Splitsort:一个自适应排序算法。通知。Proc。。39,205 - 211 (1991)。
赫尔曼以及d R。,B一个der,D. A. & JáJá, J. A randomized parallel sorting algorithm with an experimental study.j . Distrib平行。第一版。521,(1998)。
古德里奇,m . t .随机shellsort:一个简单的排序算法。在Proc. 21年ACM-SIAM研讨会上离散算法1262 - 1277 (ACM, 2010)。
Mehlhorn, K。,年代一个nders, P. & Sanders, P.算法和数据结构:基本的工具箱卷,55。(Springer, 2008)。
Knebl, H。算法和数据结构(Springer, 2020)。
Karatzoglou,。,B一个ltrunas, L. & Shi, Y. Learning to rank for recommender systems. In第七届ACM会议Proc.推荐系统493 - 494 (ACM, 2013)。
杨,j . Y。,Zh一个ng, B. & Mao, Y. Study on Information Retrieval Sorting Algorithm in Network-BasedManufacturing Environment. In应用力学和材料484卷,183 - 186(反式科技出版社,2014)。
Krallmann, J。,年代chwiegelshohn, U. & Yahyapour, R. On the design and evaluation of job schedulingalgorithms. In车间作业调度策略进行并行处理17-42 (Springer, 1999)。
白色,美国K。,Martinez, T. & Rudolph, G. Generating a novel sort algorithm using Reinforcement Programming. InProc, IEEE国会进化计算1 - 8 (IEEE 2010)。
斯利瓦斯塔瓦,S。,Gulwani, S. & Foster, J. S. From program verification to program synthesis. InProc.第37届ACM SIGPLAN-SIGACT研讨会上编程语言的原则313 - 326 (ACM, 2010)。
安塞尔,j . et al . Petabricks:语言和编译器算法的选择。ACM Sigplan通知4438-49 (2009)。
d . r .史密斯分而治之算法的设计。科学。第一版。程序。537-58 (1985)。
欧文,k . r . et al。为基于英特尔处理器的计算机汇编语言(Prentice Hall, 2003)。
香农,c, e .第二十二。编程电脑下棋。伦敦,Edinb。都柏林费罗斯。玛格。j .科学。41.314,256 - 275 (1950)。
银,d . et al。掌握围棋和深层神经网络树搜索。自然529年,484 - 489 (2016)。
银,d . et al。一般的强化学习算法,象棋大师,shogi,经过self-play。科学362年,1140 - 1144 (2018)。
Vaswani, et al。注意是你所需要的。放置神经通知。Proc。系统。30.,5999 - 6009 (2017)。
LLVM。LLVM用户https://llvm.org/Users.html(LLVM, 2022)。
巴特利特,J。学习与组装程序271 - 273(然后,2021)。
萨顿r s & Barto a G。强化学习:介绍第二版(麻省理工学院出版社,2018)。
Schrittwieser, j . et al .掌握雅达利,象棋和shogi通过学习规划模型。自然588年,604 - 609 (2020)。
拉德,先付。,Ryabko, D. & Munos, R. Selecting the state-representation in reinforcement learning.放置神经通知。Proc。系统。24,2627 - 2635 (2011)。
钱,r . et al .时空对比学习视频表示。在Proc。IEEE / CVF计算机视觉与模式识别会议6964 - 6974 (IEEE 2021)。
布朗,t . et al . few-shot学习者语言模型。放置神经通知。Proc。系统。33,1877 - 1901 (2020)。
Shazeer:快速变压器解码:一个写头是你所需要的。预印在https://arxiv.org/abs/1911.02150(2019)。
Bundala, d & Zavodny j .最优排序网络。在Proc。国际会议的语言和自动机理论和应用程序236 - 247 (Springer, 2014)。
哈恩,g . j . &米克尔,w . Q。统计间隔:从业人员的指导92卷(2011年约翰·威利& Sons)。
谷歌。协议缓冲区,版本0.2.5;https://developers.google.com/protocol-buffers(2022)。
谷歌。0.2.5 VarInt协议缓冲区序列化和反序列化,版本;https://developers.google.com/protocol-buffers/docs/encoding(2022)。
Protvin, r & Levenberg j .为什么谷歌数十亿行代码存储在一个存储库中。Commun。ACM59,78 - 87 (2016)。
伯曼,et al . Multi-collision耐哈希函数和他们的应用程序。在Proc。年度国际会议上加密技术的理论和应用133 - 161 (Springer, 2018)。
Damgard i b .碰撞自由哈希函数和公钥签名方案。在加密技术的理论与应用研讨会203 - 216 (Springer, 1987)。
黄,m, Bitset (GitHub, 2021)。
Van der Maaten, l . &辛顿用t-SNE g .可视化数据。j·马赫。学习。Res。9.11,2579 - 2605 (2008)。
Gulwani、s等。合成的无路由循环程序。ACM SIGPLAN通知46.6,62 - 73 (2011)。
Sasnauskas r . et al .汤:合成superoptimizer。预印在https://arxiv.org/abs/1711.04422(2017)。
沃伦·h·S。黑客的喜悦(培生教育,2013)。
Hamadi Y。,Jabbour, S. & Sais, L. ManySAT: a parallel SAT solver.j .可满足性,布尔模型。第一版。6,245 - 262 (2010)。
沃尔西,洛杉矶混合整数规划。在威利计算机科学和工程的百科全书1 - 10(威利,2007)。
Nair诉等。利用神经网络求解混合整数规划。预印在https://arxiv.org/abs/2012.13349(2020)。
井上,h . et al . AA-sort:一个新的多核处理器SIMD并行排序算法。在Proc。并行体系结构和编译技术国际会议(2007年协议)189 - 198 (IEEE 2007)。
阴,z . et al。有效的并行排序avx - 512基于多核和许多核心架构。在Proc。IEEE 21高性能计算和通信国际会议168 - 176 (IEEE 2019)。
布兰奇,m . et al .矢量化和performance-portable快速排序。预印在https://arxiv.org/abs/2205.05982(2022)。
维基百科。单指令多数据https://en.m.wikipedia.org/wiki/SIMD(2022)。
埃利斯,k . et al .编写、执行评估:项目合成REPL。放置神经通知。Proc。系统。32,9137 - 9146 (2019)。
Wang h . et al .自动化强化学习建筑设计的代码优化。在Proc。31日ACM SIGPLAN国际会议上的编译器构造129 - 143 (ACM, 2022)。
Shypula, a·g·等。学习superoptimize真实的项目。预印在https://arxiv.org/abs/2109.13498(2022)。
陈,X。,Liu, C. & Song, D. Execution-guided neural program synthesis. InProc。学习国际会议上表示(ICLR, 2018)。
Bunel, r . et al。利用语法和强化学习神经程序合成。在Proc。学习国际会议上表示(ICLR, 2018)。
爱,r &戈德堡,y向string-to-tree神经机器翻译。在Proc。55计算语言学协会的年度会议132 - 140 (ACL, 2017)。
盾,l . & Lapata m .语言与神经逻辑形式的关注。在Proc。第54计算语言学协会的年度会议33-43 (ACL, 2016)。
Ibarz, b . et al。一个多面手的神经算法学习者。在Proc。图学习会议198卷,2:1-2:23 (PMLR, 2022)。
陈,X。,年代ong, D. & Tian, Y. Latent execution for neural program synthesis beyond domain-specific languages.放置神经通知。Proc。系统。34,22196 - 22208 (2021)。
Parisotto、大肠等。Neuro-symbolic程序合成。预印在https://arxiv.org/abs/1611.01855(2016)。
埃利斯,K。,年代olar-Lezama, A. & Tenenbaum, J. Sampling for Bayesian program learning.放置神经通知。Proc。系统。29日,1297 - 1305 (2016)。
确认
我们感谢p Kurylowicz:安德森和z Ahmed援助协调研究;l·迪翁和n . klaus耐心地回顾我们LLVM代码;d·戈夫,n . Vaish d Kutenin和a . Fawzi有用的建议项目的期间。我们还要感谢我们的同事在DeepMind他们的鼓励和支持。
作者信息
作者和联系
贡献
D.J.M.,一个。Michi A.Z.构思想法和领导研究。一个。Michi, D.J.M.,A.Z.,M.G.,硕士,C.P.,E.L.,年代。I. and A.Mandhane developed the neural network architecture and training. J.-B.L., C.P., M.G., D.J.M. and E.L. developed the baseline. M.G., A.Z., D.J.M., M.H., A.A., T.K. and K.Millikin analysed the generated algorithms and helped with the sort patch. D.J.M., A.Michi, A.Z., S.G., S.E., J.B., R.T., C.G. and K.Milan, managed the research. A.Michi, M.G. and M.S. led the technical platform. A.Mandhane, T.H., Y.L., J.S., T.C., M.B., P.K., M.R., D.S., O.V. and D.H. contributed technical advice and ideas. D.J.M. and A.Z. conceived the project. D.J.M., C.P., E.L., A.Michi, M.G., A.Z., P.K. and M.S. wrote the paper.
相应的作者
道德声明
相互竞争的利益
D.J.M.,一个。Michi, A.Z.,M.G.,硕士,C.P.,E.L.,S.I.,一个。Mandhane, P.K.,核磁共振:和O.V. are planning to file a patent application relating to subject matter contained in this paper in the name of DeepMind Technologies Limited. The remaining authors declare no competing interests.
同行评审
同行审查的信息
自然谢谢郑王,另一个匿名的,审稿人(s)为他们的贡献的同行评审工作。
额外的信息
出版商的注意施普林格自然保持中立在发表关于司法主权地图和所属机构。
扩展数据数据和表
扩展数据图1 AlphaDev表示网络体系结构。
(一)AlphaDev表示网络由一个变压器编码器网络接收作为输入组装算法生成的迄今为止。它还包含一个CPU状态编码器网络接收作为输入内存和寄存器的当前状态。确切的架构和hyperparameters可以发现的补充信息附录A。(b)在输入指令变压器编码器网络之前,每个程序指令的操作码和操作数转换为一个炎热的编码和连接。变压器编码器产生的编码输入到网络。
图2一个排序网络扩展数据43。
(一)水平线叫做电线和垂直线称为比较器。(b)最初一个无序的序列值输入排序网络左边。在两个不同阶段电线遇到一个比较器。如果该值比较器的顶部比底部的值小的比较器,数字开关电线。最优排序网络地方比较器在特定位置,任何未排序的序列值使用最小数量的比较器。
扩展数据图3假设使用AlphaDev改进的探索。
(一)一个2 d t-SNE51投影显示的区域探索AlphaDev AlphaDev-S相比(蓝色)。(b)相同的2 d t-SNE投影在(a)算法正确性叠加到每个点从错误的程序(紫色)正确的程序(黄色)。在图中可以看到,AlphaDev-S努力走出当地最适条件而AlphaDev能够探索空间的不正确的程序空间的正确的程序。
补充信息
权利和权限
开放获取本文是基于知识共享署名4.0国际许可,允许使用、共享、适应、分布和繁殖在任何媒介或格式,只要你给予适当的信贷原始作者(年代)和来源,提供一个链接到创作共用许可证,并指出如果变化。本文中的图片或其他第三方材料都包含在本文的创作共用许可证,除非另有说明在一个信用额度的材料。如果材料不包括在本文的创作共用许可证和用途是不允许按法定规定或超过允许的使用,您将需要获得直接从版权所有者的许可。查看本许可证的副本,访问http://creativecommons.org/licenses/by/4.0/。
关于这篇文章
引用这篇文章
Mankowitz, D.J.学生,。,Zhernov, A.et al。快速排序算法发现利用强化学习。自然618年,257 - 263 (2023)。https://doi.org/10.1038/s41586 - 023 - 06004 - 9
收到了:
接受:
发表:
发行日期:
DOI:https://doi.org/10.1038/s41586 - 023 - 06004 - 9
本文引用的
DeepMind AI创建算法排序数据的速度比那些由人
自然(2023)