另外一种比较肮脏的结果,我不同步了,让自己跑,对程序收敛性和正确性没有任何保障。我们采取的方法是走一个中间路线,做一个半同步,让机器在有限的窗口里做局部的运算,局部的参数值做一个运算,不跟其它东西通讯,当这个窗口被突破的时候,我就必须停下来等,每一个到达窗口的时间是随机,最后结果现成都可以在最大使用上做窗口运算,我们关心这样的东西显然变得更快,就像非同步的东西,能不能保证正确性,结果是这样的,因为我们是有限的非同步或者半同步,你可以 产生一个证明,产生的收敛结果跟同步结果是一样的。我目前知道第一个对于操作系统做一个理论证明正确性的结果,这个系统有一定的理论价值甚至是一个好的应用价值。
然后它的编程界面是相当普通的界面,你把不同的机器学习算法,像话题模型、矩阵分割或者是像显性或者逻辑回归都表示成参数服务器这样的表示,用这样一个很简单的高级语言来进行操作。结果如何呢?我们发现在不同的程序上面我们都获得了比这个同步或者是完全非同步的方法更好更快和更佳的收敛结果。
再讲模型并行,在数学上有一个更强烈的所谓的协调性的要求,这块我想用一个显性回归做一个简单的阐述。通常我们做显性回归需要估计参数,这个参数矢量是很高维的,100亿维,在普通存储机器里面放不下,或者放下以后用串行的方法来算很慢,所以你需要并行,那乱放行不行?最后发觉不行。在数学上获得这样一个形式,当你随机取两个参数,当你动用了其中一个参数,另一个参数,它的值和前面那个值相关,所以有一前一后要求,当你把这两个东西做并行,相关性就被破坏,而且无法收敛,这两个相关度在数据上有关系所以可以做定量计算,所以当两个参数非常相关我们放在同一个机器上面,这是相当昂贵的操作,划出一个节点图我们对每一个参数对做这样的预估,100亿维是很大的图,是不可操作的。
我们在这两种选择里面纯粹图分割或者随机分割采取中间路线,我们可以想像参数里边并不是所有参数都是同样重要,有些东西重要,有些东西不重要,有些东西快收敛了,我们采用一种方法对参数进行大致评估,只对重要的东西进行处理,这是基于结构的并行化叫SAP,也可以用简单的编程界面。这是一个操作,从某一个方程里面取样,取一部分重要参数,对它结构进行分析,把它们向各个机器上做分布。
在第二个迭代里面,有可能结构会出现变化,可以再重新做这一步,这是用户之间的选择。分布策略有很多可能性,刚才说优先度的考量,哪些参数重要哪些参数不重要,你也可以做模块化考量,把参数分成几个块,也可以做有保障的同步。
实验结果,你做了良好动态并行实现很快良性收敛,不然就是不收敛或很慢的收敛,我们也有实验证明,不光在均值在方差上都有很好的收敛的保障。时间正好让我讲完了科学原理,我们也见到的结果,在不同算法上得到了很大的提升。我最后用几张图总结一下,现在大规模机器学习平台整个环境,这是相当挑战但是相当让人激动的领域,有很多家在玩,我显然是个黑马。
现在在讲大数据大模型你要是没有几十个亿的基数就不用再谈的。看看最近达到了什么结果,你用一万台机器达到一百亿参数,做了话题模型的估计,你会看到其它的数据、神经网络或者对于话题模型都达到了类似的量级,大家目标我的机器越来越多,把模型可以做得越来越大,这是一个趋势,有所投入有所收获,你希望把效率进一步提高,这是我们汇报的结果,我们在最近做了话题模型和矩阵分解和卷机神经网络,看到他们的大小都已经超过了现在目前在文献里边所汇报最大的结果,但是所使用的机器比现在的机器少一个数量级
我们跟微软做了一个合作,他们有24台高端机器,这是10的12次方参数的 话题模型,有一百万个话题,每一个话题有一百万个词,这是目前所知道最大的话题模型,比非常有名的腾讯的那个东西还要大了大概50到100,我们用的机器比他们少。
对于平台设计既考虑了系统学习,和机器学习你会得到很好的收获,我们也是开源项目,至于目前的观察可以说,不光可以达到很大量,基本上等价于现在最好的系统。讲话前,刚刚收到学生最新送来的结果,很让我们惊讶,还有一个组知道了我们的系统,用这个系统跟Spark和Hadoop做了独立比较,我很高兴看到值降到最低。我想用这个结果来结束我的讲座,最后大家可能会希望知道,到底Petuum系统到了什么程度,我们愿景既包含软件和底层软件的支持,目前在Hadoop生态系统一个分子,你们可以把它下载以后做自己的开发,也可以使用我们的软件,这个项目我最后要感谢我的同事和学生在这两年里面的支持,也感谢各位的关注,谢谢!