* Preface * Update * Update editors.md * Delete Pic_Templates_and_Samples.pptx * Update index.md * Update index.md * Update index.md
10 KiB
序言
缘起
我在2020年来到了爱丁堡大学信息学院,爱丁堡大学是AI研究的发源地之一,很多学生慕名而来学习机器学习技术。因此,我们拥有许多出色的AI课程(自然语言处理,计算机视觉,计算神经学等),同时也拥有一系列关于计算机系统的基础课程(操作系统,编程语言,编译器,计算机体系架构等)。但是当我在教学的过程中问起学生:机器学习是如何利用计算机系统来做到计算加速和大规模部署的?许多学生都会报来疑惑的眼神。而这也促使我思考在爱丁堡大学乃至于其他世界顶尖大学的教学大纲里,我们是不是缺乏了一门课程来衔接机器学习技术和计算机系统知识。
我第一反应是寻找一门已有的课程来借鉴。当其时,加州伯克利大学的AI Systems较为知名。这门课描述了机器学习系统的不同研究方向,内容以研读论文为主。可惜的是,许多论文已经无法经受住时间的检验。更重要的是:这门课缺乏对于知识的整体梳理,形成完整的知识体系架构。学习完这个课程,学生并没有明确的思路可以从头搭建起来一个机器学习框架。而将目光投向其他地方,华盛顿大学曾短期开过Deep Learning Systems课程,这门课程讲述了机器学习程序的编译过程,其受限于服务TVM的目的,对于机器学习系统缺乏完整的解读。另外,斯坦福大学的Machine Learning Systems Design因为课程设计人是数据库背景,因此课程专注数据清洗,数据管理,数据标注等数据专题。
当时觉得比较合适的是微软亚洲研究院的AI Systems。这门课程在研读论文的同时,一定程度上讲述了AI框架背后的设计理念。但是当我准备将其教授给本科生的时候,我发现这门课对于机器学习系统核心设计理念讲解很浅,同时也要求学生具有大量的背景知识,实际上更适合给博士生授课。抛开内容不谈,上述的全部课程共同的核心问题是:它们给学生的阅读材料都是高深,零散甚至过时的论文,而不是一本全面,注重基础,语言通熟易懂的面向本科生和工程师的教科书,这给机器学习系统相关知识的传播造成了极大的困难。
回首2020年的世界,我们已经拥有了优秀的操作系统,数据库,分布式系统等基础性教材。在机器学习领域,我们也拥有了一系列机器学习算法的教材。然而,无论是英语世界还是中文世界,我竟找不到任何一本系统性讲述机器学习系统的教材。而这本教材的缺乏,让许多公司和高校实验室不得不花费大量的人力和物力从头培养学生和工程师对于机器学习基础架构的认识,这已经制约了高校培养出符合业界,学界和时代发展的人才了!因此,我开始思考:我们学界和业界是不是需要一本机器学习系统的教科书了呢?
开端
带着写书的构想,我开始和身边的朋友沟通。几乎全部人都非常认可这本书的巨大价值,但是现实的情况是:没有人愿意做这么一件吃力不讨好的事情。我当时的博士后导师也劝我:我现在处在助理教授的关键阶段,追求高影响力的学术论文是当务之急,写一本书要耗费3-4年的精力,最后可能也无法面世。而当我和同行交流时也发现:人们更愿意改进世面上已经有的教科书,做有迹可循的事情,而不是摸着石头过河,做从无到有的事情。特别是对于机器学习系统这个快速发展,依然在试错的领域,能不能写出一本能够经受住时间检验的书也是一个巨大的未知数。
我因此不得不将这个想法暂时藏在了心里了数月,直到一次探亲回国和朋友聊天。这个朋友就是MindSpore的架构师金雪锋。和雪锋的相识是在疫情前的最后一个圣诞节左右,雪锋来伦敦访问,他正在领导MindSpore的开发(当时1.0还没有发布)。而在世界的另一端,我在2018年也和好友一起试图从头搭建一个AI框架,虽然最终资源不足,无疾而终,不过许多的思考成就了我之后发表的多篇AI系统论文。和雪锋聊起来,我们都对AI框架开发之难深有同感。我们共同的感慨就是:找到懂AI框架开发的人太难了。现今的学生们都一心学习机器学习算法,很多学生对于底层的运作原理理解很粗浅。而当他们在真实世界中应用机器学习意识到系统的重要性,想去学习的时候,却没有了在学校中最充沛的学习时间。我因此对雪锋苦笑到:我是准备写一本机器学习系统教材的,但是可能还要等个3-4年。雪锋这时候说:我也有这个想法啊,你要是写的话,我能帮助到你吗?
雪锋这句话其实点醒了我。传统的书籍写作,往往是依赖于1-2个教授将学科十余年的发展慢慢总结,整理出书。这种模式类似于传统软件开发的瀑布流方式。可是,科技的世界已经变了!软件的发展从传统的瀑布流进化到如今的开源,敏捷开发。而书籍的写作为什么还要停留在传统方式呢?MXNet团队构建开源社区来编写的专注于深度学习算法的书籍《Deep Dive into Deep Learning》就是一个很好的例子啊。我因此马上找到当年一起创立TensorLayer开源社区的小伙伴北京大学的董豪,我们一拍即合,说干就干。雪锋也很高兴我和董豪愿意开始做这件事,也邀请了他的同事干志良进来帮助我们。我们终于开始书籍的写作了!
经过几轮的讨论,我们将书籍的名字定为《机器学习系统:设计和实现》。我们希望这本书能教给学生经受住时间检验的机器学习系统设计原理,同时也提供大量的系统实现经验分享,让他们将来工作,科研中遇到实际问题知道该如何分析和解决。
社区的构建
考虑到机器学习系统本身就是一个依然在发展,试错,并且频繁孕育细分领域的学科。我从一开始就在思考:如何设计一个高度可扩展(Scalable)的社区架构来保证这本书的可持续发展呢?因为我是专注于大规模软件系统的老师,我决定借鉴几个分布式系统的设计要点来构建社区:
-
预防单点瓶颈:现代分布式系统往往采用控制层和数据层分离的设计来避免单点故障和瓶颈。那么我们在设计高度可扩展的写作社区的时候,也要如此。因此,我们设计了如下分布式机制:编辑(类似于分布式系统的Leader)决定花最大的时间来寻找每个章节最优秀,主动,负责任的章节负责人(Local leader)。而章节负责人可以进一步寻找其他作者(Follower)共同协作。而章节负责人和章节作者进行密切的沟通,按照给定时间节点,全速异步推进。而编辑和章节负责人设定了每隔1周的讨论来同步(Synchronise)写作的进展,确保并行完成的章节质量能够持续符合编辑和社区的整体预期。
-
迭代式改进:深度学习的优化算法随机梯度下降本质上是在复杂问题中利用局部梯度进行海量迭代,最终找到优秀的局部最优解。我因此利用了同样的思路来设计书籍质量的迭代提高。我们首先在Overleaf上写作好书籍的初版(类似于初始参数,Initial Weights)。接下来,我们进一步将书籍的内容做成标准的Git代码仓库(Book as code)。建立机制鼓励开源社区和广大读者开启Issue和PR,频繁改进书籍(相当于梯度,Gradients),而我们设置好完善的书籍构建工具,持续集成工具,贡献者讨论会,标准化的Issue和PR合并流程等等,就可以让书籍的质量持续提高实现随机梯度下降(Stochastic Gradient Descent)一样的最终最优性。
-
高可用性:我们要有7x24小时在线的平台,让书籍可以在全球任何时区,任何语言平台下都能参与开发,倾听社区的反馈。因此我们将Git仓库放置在Github上,并准备之后在Gittee做好镜像。这样,我们就搭建了一套高可用的写作平台了。
-
内容中立:一个分布式系统要能长久运行,其中的每一个节点我们要同等对待,遇到故障才能用统一的办法来进行故障恢复。考虑到书籍写作中的故障(设计无法经受时间检验,写作人中途不得不退出等等)可以来源于方方面面,我们让不同背景的参与者共同完成每一个章节,确保写出中立,客观,包容各类型观点的书籍内容,并且写作不会因为故障而中断。
现状和未来
机制一旦建立好,写作就自动化地跑起来了,同行人也越来越多,我带过的学生袁秀龙、丁子涵、符尧也很用心参与,董豪邀请了鹏城实验室的韩佳容和赖铖,志良邀请了许多MindSpore的小伙伴进来贡献,许多资深的AI框架的设计者也和我们在各个渠道展开讨论,提供了非常多宝贵的写作建议。另外,学界的教授(Peter Pietzuch老师,陈雷老师等)也持续给我们内容提供详细的反馈。
充分发动了“分布式系统”的力量后,书籍的内容得以持续高质量的合并了进来。当我们开源了书籍以后,书籍的受众快速增长,GitHub上的关注度增长让我们受宠若惊。在社区的推动下,书籍的中文版,英文版,阿拉伯语版都已经开始推进。这么多年来,我第一次意识到我在分布式系统和机器学习里面学习到的知识,在解决现实复杂问题的时候是如此的有用!
很多时候,当我们面对未知而巨大的困难,个人的力量真的渺小。而和朋友,社区一起,就变成了强大的力量,让我们鼓起勇气,走出了最关键的第一步!希望我的一些思考,能给其他复杂问题的求解带来一些小小的启发。
最后,我们非常欢迎新成员的加入来帮助书籍提升质量,扩展内容。感兴趣的读者可以通过书籍的GitHub社区:https://github.com/openmlsys/ 联系到我们,我们非常期待和大家一起努力,写出世界上第一本机器学习系统的书籍!
麦络
写于英国爱丁堡
2022年5月4日