接下来让我简单解释这个迭代问题。我将在几分钟内完成。我刚才所介绍的都在这个图上了。这个是经典的映射/简化原理,希望你们都已经知道。MapReduce会输入数据,通过并行地执行一个映射步骤,多线程多服务器地进行计算,然后执行一个简化步骤,然后不断重复。这个做法成本很高,因此Spark的原理是把每个阶段的输出存储起来,形成缓存,这样就不需要总是存到磁盘。 这想法听起来容易,不过要做成一个可以规模化拓展的系统需要很多人大量的工作,所以Spark后有什么大动作? 过去几个月我们都在进行一个新项目,这项目并不是通过研究系统的学生完成的。我的两名学生主要负责这项目,之后他们也能研究系统了,他们是Philipp Moritz 和 Robert Nishihara,他们也和我同事Ion Stoica合作。Ion是系统领域的专家,我们把这系统命名为Ray,一月份将会公布beta版本,希望大家可以开始使用。简单说明一下为什么我们想要做这项目——我们对这项目感兴趣主要是因为我们是机器学习的研究员,机器学习中许多问题远不止于数据,其中非常多问题与研究、优化和线性代数相关,Spark在这些方面非常低效,尤其是在和线性代数方面,MPS比其他系统运行快很多,不过没有人喜欢使用,在上面非常难编程,它们也不适用于现在通用的并行硬件。这些是我们希望解决的问题,我们希望能够在单机和集群上运行同样的代码,这是考虑因素之一。 同样,我们也不想在分布式上修改代码,我们希望系统可以支持大量小任务,这意味着不同任务间更多的数据共享。因此,我们不再使用左边的这个经典映射/简化模型,这个更像是数据流模型,当他们接收到所有需要的信息后,任务即可执行。这模式中不存在同步屏障,这非常重要,要实现这想法需要在任务排程上做很多工作,我们在排程上下了很大功夫,这做法明显有很多优点,如果你尝试把神经网络放到Spark上,同步屏障问题会非常让人头疼,你只能执行一部分任务,然后等所有其他任务执行完毕才可以到下一层。在这个系统上,实际上就是数据流架构在蓝色的节点完成后,红色的节点即可执行,在整个网络中逐步执行任务,这例子是在Python上完成的。目标是对Python代码进行非常少的改动就可以转换为分布式。在这代码上,每隔一定step size执行运算,返回结果以不同的step size并行运算。这基本上就是机器学习的经典做法。 看这个新的命令array.remote,这指令了系统去利用分布式环境启动排程器,在后端运行所有的机器学习。我们从系统架构方面看一下,运行中产生了本地对象和全局变量,对应了本地和全局的排程器,以及所有相关因素的关系,这是整个架构的基本原理。 基本上,这是已经存在的机器学习分布式Python版本,这系统已经开发完毕了,在很多标准上远快于Spark。这就是下一代的大数据处理工具,实验室的另一个项目与模型服务有关。在很多情况下,我们建立了很大的模型,输入了海量数据,一切都变得太大后,就难以获得系统的实时回应,因此,我们需要能够同时运行大模型,以及快速运行与大模型相关的小模型的系统,我们可以在边缘上快速对小模型迭代,然后慢慢地把信息转移回大模型。 某程度上这类似人脑的运作,我们每天产生少量记忆,形成短期记忆,然后转移到长期记忆里,这个系统可以解决很多这类型的问题,我们需要以简化的本地模型作出快速决策,然后逐步整合到大模型中。 我快要结束演说了,这个话题就差不多了,我们需要注意一下这个架构,这里面有一边是学习板块,建立大模型,然后是我们称为的推理板块,这版块可以基于当前较小的时间尺度调整模型。这个话题就这样吧! 回到主题上,在过去10年,我的工作和发表成果主要和抽象的数学问题相关。如果你对理论问题感兴趣,你该感到兴奋!这是个充满新理论问题的领域,非同步、分布式、流式数据等等,都和行为系统相关,大量的理论性问题。你还需要控制统计误差,对于理论研究员来说这是新问题,我们可以真正地建立系统,获取数据,尝试各种处理、实现模型。这是从所未有的合作方式。 再次感谢邀请我到这里来演讲! (责任编辑:本港台直播) |