到底发生什么事情呢?原来,用Hadoop进行并行计算的时候,其原理为把计算任务分解为若干子任务,然后在不同机器上运行不同的子任务,当每一个子任务都完成后再通过所有子任务之间的一次握手通信,宣告这次并行计算的结束。
Hadoop起源于1945年的冯·诺依曼架构,该架构也是现代计算机的原型,包括中央处理器、记忆存储器、输入和输出等,通过硬件和软件实现简洁的桥接,而不用对每个晶体管和电子管做局部编程。在20世纪60年代就已经有人看到冯·诺依曼的局限,当有更大的任务或者速度有更高要求,需要让很多台机器一起执行同一个任务,于是就有了早期的并行计算系统。
后来,莱斯利·兰伯特(LeslieLamport)创造了BSP桥接模型(1980~1990s),通过简单抽象把计算和通信分成了两个不重合的项,每个项只完成各自的计算或通信任务。Hadoop(2000s)就是这一思路的优秀代表,它可以用不同的机器以并行方式执行子任务,子任务完成后再通过握手通信完成计算。
Hadoop是当前流行的并行计算架构
Hadoop现在已经成为主流的运算平台,对传统计算程序像数据库、统计数据归纳等都相当有效。BSP桥接模型的一个最近突破就是Spark(2010s),它与Hadoop的区别在于,Hadoop用硬盘作为存储单元而Spark用内存作为存储单元,但二者的通信原理是一样的。
于是,在Hadoop机制下,整个并行计算的瓶颈出现在机群里最慢的那台机器。而在实际情况中,总会出现最慢的一台机器。因为整个机群是共享计算资源,同期还有其它计算任务跑在机器上争抢计算资源,此外甚至机房的温度不均匀也会影响机器的速度。
装了Hadoop的千台机器很好地支持Facebook当时其他的业务,包括搜索业务和存储业务。为什么到了人工智能业务就不行了呢?原因是人工智能计算有它的独特性,人工智能是迭代式反复读取数据和刷新模型的方式,与传统计算模式有很大的不同,这是人工智能发展遇到的又一瓶颈。
从人工智能角度来讲,需要完成大型的计算任务,光有好的数学模型或算法还不够,还需要强力计算引擎支持,而且这个计算引擎跟原来的不一样。这就是当时邢波在Facebook机群上运行人工智能程序,每一次迭代接近结束进入下一个迭代时,总会出现已经完成99%还有1%的计算没有完成并且拖延一个星期的情况。
人工智能采用了渐进迭代方式,迭代速度和迭代效率与数学方程难度有关。在大数据和复杂任务情况下,每一次计算中心都要把大数据遍历刷一遍,1000次迭代就要刷1000遍。如果深度学习模型有几十亿参数,意味着每次迭代都要把所有参数刷新一遍。而当数据和模型同时放大时,这个任务就变得无比困难。
传统计算架构下的BSP通信协议,就是先计算再通信、再计算再通信,这是实现计算一致性基本保障之一。理论上假设这样的代价为零,但在工程实际系统中这并不是一个零代价的工程,各种问题使得机群不同步,要花很多时间等待计算的一致性。
邢波通过自己在Facebook的经历,发现人工智能运算和传统计算非常不一样,传统计算由指令集构成,执行指令目的就是执行程序,执行的过程中不能出错。这是传统执行计算任务经典特征,所有操作系统都是围绕着这个目的来优化,包括容错性和通信有效性等。
人工智能算法就像爬山,中间可以出错,只要能到达山顶。
人工智能的运算也是由指令集构成,但执行指令集的执行只是一个过程而不是目的,目的是优化算法。就像爬山一样,目的是爬到山顶。传统计算体系是严格设定登山路线,一步也不能出错,但人工智能则可以在中间出错,只要能到山顶。
2012年,邢波及其同事设计了一种新的参数服务器模型,这个框架下的核心概念,就是人工智能的计算任务不再像传统计算任务那样以精准性为前提,而是像执行救火任务的机群那样,其任务为“灭火”,至于如何达到火场只是一个手段。而且“扑火机群”还需要以机群为整体给上级一个简单的指挥界面,具体飞行细节则由飞行员们自行协调,这是人工智能的新观点。
基于这样一个目标,邢波及其同事开发了新的桥接模型——SSP有限异步模型。在有限异步模型下,运行机器服从中央指挥,但每个“战队”都有局限性自由度,总体目的是打赢仗。传统并行计算,需要很精准的协调;而完全异步模型下,每个机器各自为政,大部分不能协调实现共同目标。于是,邢波选择了第三条路线:有限异步模型。
邢波用有限异步桥接原理去构建参数服务器的编程界面,是一个分享内存的大规模编程界面,程序运行速度和精度都有了巨大的提升。而且这个系统并不是为某一个特定人工智能计算而设计的,更是一个公用的计算平台模型,在设计时考虑了整个人工智能程序的普遍共性。这个系统也有非常灵活的容错及通讯管理机制,最后的结果就是系统功效的巨大提升。
2013年,邢波研究小组取得了另一个突破。当训练巨大模型的时候,需要把模型分解到不同机器上,每个机器上完成一个子任务,子任务间必须有效通信,才能保证整体任务不失败。于是就设计了一个动态调度器Strads,其原理像拉小提琴十个手指一样,虽然很快速且每个手指执行异步异时的动作,但最终是为了同一首小提琴曲。
最后结果不仅可以保障大型模型程序在很细颗粒度下的正确性,有时候还能实现令人吃惊的加速收敛曲线效果,这是传统的完全同步运行程序无法达到的结果。
【本文由投资界合作伙伴钛媒体授权发布,本平台仅提供信息存储服务。】如有任何疑问,请联系(editor@zero2ipo.com.cn)投资界处理。