第1版前言
为什么会有这本书
随着智能产业的飞速发展,社会迫切需要大量高水平的人工智能人才。因此,我国近千所高校的计算机学院和信息学院都在培养人工智能方向的人才,而且我国已经有上百所高校开始设立专门的人工智能专业。可以说,我国人工智能高等教育的大幕正在徐徐拉开。今天,教育界对人工智能人才培养的决策,将会对历史产生深远的影响。因此,我们应当慎重思考一个关键问题:人工智能专业的高等教育需要培养什么样的人才?
有一种看法认为:人工智能专业只需要教学生如何开发智能应用和编写智能算法,至于运行这些应用和算法的计算系统,则不是教育的重点。这种看法,类似于汽车专业只需要教学生如何组装车辆,而不需要让学生理解发动机的机理;又类似于计算机专业只需要教学生如何写App,而不需要让学生理解CPU和操作系统的机理。重应用、轻系统的风气,有可能使我国人工智能基础研究和产业发展处于“头重脚轻”的失衡状态。
与此形成鲜明对比的是,我们的国际同行对于智能计算系统的重视程度远远超过普通人的想象。仅以谷歌公司为例。众所周知,谷歌拥有全世界最大规模、最高水平、最全产品的智能应用和算法研究团队。仅谷歌一个公司就发表了2019年国际机器学习会议(ICML)近20%的论文,和整个中国相当。然而,当我们真正认真审视谷歌时就会发现,谷歌并不只是一个算法公司,它更是一个系统公司。谷歌的董事长J.Hennessy是国际最知名的计算机系统结构研究者,图灵奖得主;谷歌人工智能研究的总领导者J.Dean(每次谷歌I/O大会都是他代表谷歌介绍全公司的智能研究进展)是计算机系统研究者,著名的MapReduce分布式计算系统就出自他之手。谷歌在人工智能领域最令人瞩目的三个贡献——机器学习编程框架TensorFlow,战胜人类围棋世界冠军李世石的AlphaGo,以及谷歌自研的智能芯片TPU——也和系统有关,而非单纯的算法。
因此,人工智能专业的高等教育,应当培养人工智能系统或者子系统的研究者、设计者和制造者。只有实现这个目标,高校培养的人才才能源源不断地全面支撑我国人工智能的产业和研究。为了实现这个目标,人工智能专业的课程体系,不仅仅应当包括机器学习算法、视听觉应用等课程,还应当包括一定的硬件和系统类的课程。
事实上,国内有很多前辈和专家也意识到了这个问题。很多国内高校并不是主观上不想给学生开设面向人工智能专业的系统类课程,而是开设这样的课程有一些客观困难不容易克服。毕竟智能计算系统是一个新兴的交叉方向,所涉及的知识非常新,找不到现成的课程可以参考。事实上,即便是国际顶尖高校,过去也没有太多这方面的教学经验(例如,斯坦福大学2015年曾请我去讲授这个方向的短期课程)。另外,讲授智能计算系统课程所需要的背景知识也非常广泛,涉及算法、结构、芯片、编程等方方面面,能对这些知识都有全面涉猎的老师确实不多。
但是,在所有的困难中,大家一致认为,最关键的困难就在于没有现成的教材。教材是课程的基础,要上好一门课,没有合适的教材是不可能的。据我们了解,目前国际上也没有一本能全面覆盖人工智能计算系统(尤其是当代机器学习计算系统)新进展的教材。因为我们实验室在研究上涉及智能计算系统的各个方面,又在中国科学院大学、北京大学、北京航空航天大学等院校有讲授智能计算系统课程的经验,所以很多老师问我们,是否能编写一本内容较新、较全面的教材。于是,我们参考过去讲课的录音录像,整理形成了这本《智能计算系统》。希望本书能抛砖引玉,为高校开设面向人工智能专业的系统类课程提供微小的助力,为我国培养人工智能人才起到一点推动作用。
智能计算系统课程的价值
个人认为,智能计算系统课程对于学生、教师、高校都具有重要的价值,能产生深远的影响。
对于学生来说,学习智能计算系统课程有助于形成系统能力和系统思维。系统能力可以帮助学生在就业市场中拥有更强的竞争力。在不久的将来,全国上百所开设人工智能专业的高校每年将培养出上万名学过智能算法的学生。到那时,如果一个学生只会算法调参,而对整个系统的耗时、耗电毫无感觉,不具备在实际系统上部署算法的能力,那他找到好工作的难度会较大。而智能计算系统课程的学习,就能让学生真正理解人工智能到底是怎样运转的(包括一个人工智能算法到底如何调用编程框架,编程框架怎么和操作系统打交道,编程框架里的算子又是怎样在芯片上运行起来),就能使学生拥有亲手构建出复杂的系统或者子系统的能力。很自然地,学生就更容易在就业的竞争中脱颖而出。我曾经在网上看到一个段子:“会用TensorFlow每年挣20万元人民币,会写TensorFlow每年挣20万美元。”这个段子其实还是有一定的现实依据的。
而系统思维,则对于提高学生的科研能力有帮助。缺乏系统思维的学生很容易陷入精度的牛角尖中,把科学研究当成体育比赛来搞(别人做了97%的精度,我就要做98%;别人做了98%,我就要做99%),最后研究道路越走越窄。事实上,从系统角度看,评价智能的标准远不止精度一个维度。速度、能效、成本等都是很重要的维度,无论在哪一个维度上做出突破,都是非常有价值的研究。因此,近年来深度学习领域一些非常有影响力的工作如稀疏化、低位宽等,都是在提升整个智能计算系统的速度和能效上做文章,而不是只盯着精度不放。所以说,学习智能计算系统课程,能让学生形成系统思维,在科研道路上拥有更宽广的舞台。
对于教学科研人员来说,讲授智能计算系统课程,对于自己的科研能力也可能有很大的帮助。我自己担任任课教师时就发现,科研人员把一门课教好,自己的收获可能比学生还大。这也就是《礼记·学记》所说的“教学相长”。因为做科研只能让人对一个方向中的某些具体知识点很熟,而教学则在某种意义上逼着教师要对整个方向有全面的理解,这样反过来又能让科研的思路更开阔。智能计算系统课程覆盖面比较广,教好这门课受益尤其大,能使教师的知识面从软到硬更加全面。
对于高校管理人员来讲,系统研究已经成为人工智能发展的热点,在学科布局中应予以充分重视。2019年,一些国际顶尖高校和企业(如斯坦福大学、卡内基·梅隆大学、加州大学伯克利分校、麻省理工学院、谷歌、脸书、英特尔、微软等)的数十位知名研究者(包括图灵奖得主Y.LeCun、美国科学院院士M.Jordan、美国工程院院士B.Dally、美国工程院院士J.Dean等)联合发布了一份白皮书——“SysML:The New Frontier of Machine Learning Systems”,展望了机器学习计算系统软硬件技术的未来发展。这充分体现出,在国际上无论是学术界还是工业界,都对智能计算系统高度关注。在这样的新兴热门方向尽早布局并培育一批教师,无疑对提升高校乃至我国在国际学术界的影响力有巨大帮助。
智能计算系统课程的内容
对于教学比较熟悉的教师可能会问:“智能计算系统这门课程涉及面太广,知识点太多,在一门课内学完是否难度太大?”是的,智能计算系统课程涉及算法、芯片、编程等方方面面,每个方面展开来都可以是自成体系的一门课。所有枝枝蔓蔓要在一门课、一个学期里学完是不可能的。因此,我们在设计智能计算系统这门课程时采用了两个原则:应用驱动,全栈贯通。课程以一个应用为牵引,在软硬件技术栈的各个层次,聚焦于完成这个应用所需要的知识。这样不仅能使教师在一个学期内把智能计算系统课程教完,还有以下两个好处。
第一,一门好的工程学科的课程应当是学以致用的。尤其是智能计算系统这样的课程,如果上完之后只学会了一些理论知识,那教学效果一定不理想。应用驱动让学生学完了课程,就能把课程知识在实践中用起来。第二,帮助学生形成系统性理解。过去计算机专业课程设计有个问题,就是条块分割明显,比如操作系统和计算机体系结构是割裂的,操作系统对计算机体系结构提出了什么要求,计算机体系结构对操作系统有哪些支持,没有一门课把这些串起来,打通学生知识的“任督二脉”。智能计算系统作为高年级本科生(或研究生)课程,通过应用的牵引,能帮助学生把过去所有的人工智能软硬件知识都串起来,形成整体理解。
具体来说,智能计算系统课程以图像风格迁移(例如,把一张实景照片转换成梵高风格的画)这一具体应用为牵引,对整个智能计算系统软硬件技术栈进行介绍。为此,本书的第1章将对人工智能、智能计算系统进行概述,同时介绍风格迁移这一贯穿全书的驱动范例。
接下来,课程讲述完成这个应用所必需的神经网络和深度学习算法知识。对于图像风格迁移不涉及的算法知识,课程就不做过度展开。这样最多用6学时就能够把算法部分讲完。上述内容将在本书的第2、3章做介绍。
智能算法要在智能芯片上运行起来,还需要编程框架这一系统软件的支持。对上,编程框架可降低程序员编写具体智能应用的难度;对下,编程框架将智能算法拆分成一些具体算子,并将算子分配到智能芯片(或者CPU)上运行。编程框架是很复杂的系统软件。但是实现图像风格迁移所需要的编程框架知识相对有限(比如说,TensorFlow编程框架中有上千个算子,但是风格迁移只涉及其中不到十分之一)。这样教师用约6学时就可以教授学生如何使用主流的编程框架,以及编程框架内在的运行机理。上述内容将在本书的第4、5章做介绍。
编程框架再往下是智能芯片。由于传统CPU远远不能满足智能计算飞速增长的速度和能效需求,智能计算系统的算力需要由专门的深度学习处理器提供。开发一款能处理各种视频识别、语音识别、广告推荐、自然语言理解任务的工业级深度学习处理器,需要成百上千名有经验的工程师数十个月的努力。但是,在这门课里,我们只需要考虑有限目标,即如何针对图像风格迁移这一具体应用来设计深度学习处理器,包括设计思想、设计方法、具体结构等。当然,为了让学生能了解业界前沿动态,本书也会介绍真正的工业级深度学习处理器的大致结构。这样,教师用约6学时就可以让学生比较系统地掌握深度学习处理器的基础知识。上述内容将在本书的第6、7章做介绍。
深度学习处理器的指令集和结构与传统的通用CPU有较大区别。为了方便程序员充分发挥深度学习处理器的计算能力,需要有新的高级智能编程语言。因此,本书的第8章将介绍一种智能编程语言(BCL语言)。这种编程语言考虑了如何提升程序员编写智能算法的生产效率,也考虑了如何利用深度学习处理器的结构特点。本书在这一章除了介绍如何用BCL语言开发出图像风格迁移所需的基本算子,还提供了系统级开发和优化实践。这一部分内容大约需要3学时。
智能计算系统课程的最终目标是让学生融会贯通地理解智能计算系统的完整软硬件技术栈。如果只是单纯学习上述章节的内容,可能学生掌握的还是一些割裂的知识点,必须要有一个实验,把这些知识点串起来,打通“任督二脉”。因此,本书的第9章具体介绍了一个实验,即如何开发一个能完成图像风格迁移任务的简单智能计算系统。理论上说,学生把这个实验做好,就应该能对整个课程的知识体系有一定的全局理解。完成这个实验所需要的学时数和学生的基础有较大的关系,可能要根据各个高校的实际情况来决定。此外,如果课程体系允许,我们建议专门开设一门智能计算系统实验课。我们专门编写的《智能计算系统实验教程》将于2020年出版,这本书提供更全面、丰富的实验,为专门的智能计算系统实验课提供支撑。
在设计上述课程内容时,我们主要考虑的是中国科学院大学的学生情况。我们在其他兄弟院校讲授这门课程时发现,各个学校的前置课程和学生基础不太一样,教师可以根据自身情况对各个部分的学时做灵活调整。比如,如果学生之前学过人工智能或者机器学习基础课,第2、3章算法部分的课时数可缩短。再比如,如果学生没有学过计算机体系结构或者计算机组成原理,那么第6、7章深度学习处理器部分可以讲慢一点,增加一些课时。详细的课程大纲、讲义、录像等参见智能计算系统课程主页http://novel.ict.ac.cn/aics/。
书中标*的章节或习题,供有志于从事智能计算系统研究的读者选读或选做。
本书的写作
这本书的出版,凝聚着中国科学院计算技术研究所智能处理器研究中心以及中国科学院软件研究所智能软件研究中心很多老师和学生的心血。其中,我负责整理第1章,李玲研究员负责整理第2、3章,李威副研究员负责整理第4、9章,郭崎研究员负责整理第5、8章,杜子东副研究员负责整理第6章,周徐达助理研究员负责整理第7章。我和李玲研究员负责全书的统稿。杜子东副研究员负责本书的习题。此外,李震助理研究员、韩栋助理研究员,以及韦洁、潘朝凤、曾惜、于涌、王秉睿、张磊、郝一帆、刘恩赫、何皓源、高钰峰、宋新开、杜伟健等也参与了本书的部分工作。杜伟健、张振兴和宋新开对本书习题做出了贡献。方舟、曾惜、张振兴、李普泽和陈斌昌等负责本书多幅图的绘制。张曦珊副研究员、张蕊助理研究员,以及吴逍雨、承书尧、汪瑜、谭懿峻等参与了本书的校对。同时,我们特别感谢西北工业大学的周兴社教授和南开大学的李涛教授对智能计算系统的课程建设和教材编写提供的宝贵意见。由于我们学识水平有限,书中一定还有错漏之处,恳请读者多多批评指正。如有任何意见和建议,欢迎发邮件至aics@ict.ac.cn。
本书的写作受到了国家重点研发计划、国家自然科学基金、“核高基”科技重大专项、中科院先导专项、中科院弘光专项、中科院前沿科学重点项目、中科院标准化研究项目、北京市自然科学基金、北京智源人工智能研究院和腾讯科学探索奖的支持。此外,机械工业出版社的编辑给予了我们大量的帮助。在此一并表示诚挚的谢意。
中国科学院计算技术研究所
陈云霁