真正跟贾扬清近距离接触后笔者发现,这位被很多人称为“AI 架构大神”的 80 后青年科学家,更像一位温柔且平易近人的邻家“学霸”,虽然技能全面碾压但丝毫没有架子。加入阿里以来,贾扬清一直忙于了解集团覆盖范围极广的各项产品和业务,近两个月才开始在一些重要活动上以新身份亮相。他在访谈中直言,阿里非常大、方向非常多,短短几个月还未能全部了解完。虽然离职时多家媒体均报道贾扬清的 base 地是阿里硅谷研究院,但由于团队基本都在国内,贾扬清加入阿里后在杭州待的时间更多。新的身份给他带来了很多挑战,忙到没时间理发、一个月倒三次时差、参加活动大半天没吃上饭。但身为阿里集团副总裁的同时,贾扬清依然是典型的技术人,在聊到他最熟悉的 AI 技术和平台时会因为兴奋而语速加快。
在这次访谈中,贾扬清向我们透露了他加入阿里的原因,并对他目前在阿里主要负责的工作做了详细说明,他不仅回顾了过去 6 年 AI 框架领域发生的变化,也分享了自己对于 AI 领域现状的观察和对未来发展的思考。结合自己的经验,贾扬清也给出了一些针对 AI 方向选择和个人职业发展的建议,对于 AI 从业者来说有不少可借鉴之处。
从 Facebook 到阿里巴巴
被内部称为“阿里计算平台掌门人”的贾扬清目前直接领导阿里云智能计算平台事业部,而计算平台事业部同时负责大数据和人工智能两大平台,其中大数据方面包括 Flink、Spark 以及从阿里自己做起来的 MaxCompute 大数据平台,人工智能平台则包括底层资源管理、中间层 AI 框架开发等一系列工作。
相比原来在 Facebook 所负责的 AI 框架和 AI 平台相关工作,贾扬清现在在阿里所负责的工作范围更加宽泛。用贾扬清自己的话说,原来在 Facebook 他更多是大数据的用户,只是在 AI 训练的时候需要大数据平台提供支持;而在阿里计算平台事业部,他需要同时支持人工智能和大数据这两块。在贾扬清看来,阿里云智能计算平台事业部是全球少数的几个把大数据和人工智能放在一起的部门,但他认为大数据和人工智能本身就是紧密结合的,因此这两块放在一个事业部做非常有道理。
过去几年深度学习得以快速发展,很大程度上要归功于数据,而今天的人工智能在一定程度上其实可以说是“数据智能”,即 AI 需要大量的数据才能够提炼出来我们所谓的模型。于是,大规模人工智能可以归纳为两种计算模式,第一个是“智能计算”,就像 AI 工程师熟知的训练、模型迭代等,另外一个是“数据计算”,就是怎么样把大量的数据灌到人工智能训练和推理的链路里面。“数据计算”是大数据一直以来擅长的事情,把这两个计算结合到一块的时候,大量的数据处理跟高性能的数据链路,再加上现在人工智能的算法、高性能计算等一系列技术,才能把整个的解决方案给做出来。从这个角度来说,贾扬清认为人工智能跟大数据是天生结合在一起的。
除了技术范围不同,从 Facebook 到阿里巴巴也给贾扬清带来了另一个新挑战,那就是岗位角色的变化。早期还是研究员的时候,贾扬清只需要关注技术,后来升任 Facebook AI 架构总监后他转型技术管理,到现在成为计算平台事业部总裁,贾扬清需要管理技术、产品和业务,后两者对于他来说是更大的挑战,但也是很有意思的挑战。贾扬清告诉记者:“就像开源要商业化落地一样,技术最后也需要经过产品和商业的锤炼,这是一定程度上我来阿里的原因。另外,云原生接下来是整个 IT 产业大势所趋的方向,在云上,技术肯定会有新一轮的进化,这个时候对于我来说是接受新挑战的一个非常好的时机。”
与阿里一起将开源进行到底
除了上文提到的 Title,贾扬清如今也同时支持阿里巴巴的一系列开源工作,因此他在这次开发者大会上所做的演讲主要也是围绕开源这个话题来展开。对于开发者社区工作,贾扬清有非常大的热情,他希望自己加入阿里之后能够更好地推动国内开源的发展。
在采访中,贾扬清向我们详细介绍了阿里巴巴接下来在开源层面的几个重点策略。阿里巴巴希望在以下三个方面做比较完整的梳理并和社区合作推进:
- 底层操作系统,阿里有飞天操作系统底座,同时也应用过很多像 Linux 这样本身就开源的系统,前段时间阿里就刚刚发布了自己的 Alibaba Cloud Linux 2 OS,接下来阿里会考虑如何将自己在这方面的能力以最优的方式贡献给社区。另外一块是再往上层的云原生,这一层可以广义地叫做操作系统,在一定程度上跟应用比较相关,比如 AI 平台、大数据平台,在上云的情况下可以认为他们也是大规模云原生的操作系统底座。接下来阿里在 K8s 等云原生系统上也会深入跟一些开源组织合作,加强 Flink、Spark 等开源大数据产品的输出。
- 前端,相比底层系统的开发模式,前端更偏向设计和交互,蚂蚁金服的 AntDesign 是其中做得非常好的一个代表项目,在前端领域非常受欢迎。
- 工具层也是阿里巴巴一直以来非常感兴趣的一个方向,比如怎么用开源的项目和解决方案,来帮助开源的开发做得更有效率,这其中又包括测试部署工具,源代码管理工具,项目交流平台,等等。这一块国外社区相对来说做得更好,因此未来如何在国内推动建立更好的工程师交流平台和文化,也是阿里巴巴开源层面关注的重点。
在贾扬清看来,应用开源项目的时候,跟社区的紧密程度往往决定了整个应用的成败。过去业界常常出现一种情况,每个公司都对开源社区版本有所谓的改动,最后社区的能力和公司的能力分别发展,很难融合回去。但今天大家已经从过去的经验教训中学到了与社区对接更好的方法。以计算平台事业部当前投入大量精力运营的实时计算引擎 Apache Flink 项目为例,一方面,公司会深入参与到一些功能的开发和优化当中,另一方面,大家会把软件上的能力和系统架构上的思路都贡献到开源社区,避免每个人把开源拿到公司内部自己又改一通这种做法,进而推动开源项目更好地发展。对于公司来说的话,反过来也能够更加有效地利用开源最新的成果。
除了集团层面的开源策略,对 Apache Flink 开源社区,贾扬清也透露了接下来的一些规划。
目前 Flink 对于流计算的使用场景已经支持得非常好了,接下来阿里依然会从用户的需求出发,继续对 Flink 做优化和改进。同时,阿里会继续开展 Flink Forward 大会这样的活动,通过这些活动和开发者互动,向大家传达 Flink 接下来的 Roadmap 等;另外也希望通过这种方式和社区对接,来获得更多的关于 Flink 接下去应该怎么走的系统设计,包括 Roadmap 上的一些输入。贾扬清表示,对一个比较健康的开源项目来说,自己的系统设计跟用户需求的输入这两方面都是必不可少的。 所以很多开源项目都会有一个对应的开发者大会作为跟开发者互动的媒介,Flink 也不会例外。
AI 技术的现状和未来
Caffe 是“之前的代表作”
作为 AI 架构大神,很多人知道贾扬清是因为他写的 AI 框架 Caffe,但那也已经是 6 年前的事情了。在聊到 Caffe 这个代表作时,贾扬清特意停下来强调,“是 之前的代表作”。因为 6 年前还没有框架可以满足需求,所以贾扬清为了解决论文研究中遇到的问题自己开发了 Caffe。贾扬清认为,那个时候还是相对比较刀耕火种的时代,大家更多只是出一些科研论文,对于工程上软件框架怎么做、怎么适配都比较早期。但随着深度学习的兴起和发展,工业界的输入越来越多,如今像 TensorFlow、PyTorch 等主流 AI 框架在解决图像、自然语言处理、语音等一系列建模问题时,已经比当年做得好很多,现阶段主流框架要解决的问题比 6 年前贾扬清自己研发 Caffe 框架时想要解决的问题也更大了。
贾扬清将 Caffe、Theano、Torch 定义为上一代 AI 框架,这些早期框架带有很强的学术界的烙印,做的更多的是针对科研方向的一些尝试。而如今的第二代 AI 框架如 TensorFlow、PyTorch 已经把框架的概念扩得更宽,不光只是做深度学习的神经网络建模,更多的是怎么设计一个通用的科学计算引擎,同时探索编译器、软硬件协同设计和更复杂的建模的上层框架等方向。“6 年前所说的框架在今天看来,可能只是整个软件栈里面很窄的一部分。”
Caffe 推出之初,贾扬清希望它能成为“机器学习和深度学习领域的 Hadoop”,现在回过头来再看当时定下的目标,贾扬清觉得其中有一些巧合特别有意思。当初定下这个目标,是希望 Caffe 能够像 Hadoop 一样广泛普及,没想到后来二者真的在发展路线上经历了类似的情况。从大数据的角度来说,今天大数据已经从 Hadoop 进化到 Spark、Flink 这样更为复杂的引擎。当年 Hadoop 主要的计算模式就是 MapReduce,而如今的 Spark、Flink 都使用了更复杂的做法。比如 Spark 使用 Directed Acyclic Graph(DAG)对 RDD 的关系进行建模,描述了 RDD 的依赖关系,它的计算模型比 MapReduce 更加灵活。Caffe 跟现在的新一代框架相比也有类似的情况,Caffe 等之前的框架的设计非常针对神经网络,它的系统设计中有一个叫 Network 的概念,然后里头还有一个 Layer 的概念,做前向和后向计算,比较固化,有点像 MapReduce 一样。而今天的主流框架如 TensorFlow、PyTorch、Caffe2 等,使用的是更加通用的计算图模型。可以说 AI 框架和大数据框架经历了类似的发展历程,都有一个从第一代向第二代往前进化的情况。
AI 框架应该关注重复造轮子之外的挑战
在早前阿里一次内部演讲中,贾扬清表达了这样一个观点,他认为“AI 框架的同质化说明技术的挑战在其他更广泛的方向”。对于做出如此判断的理由,贾扬清向 InfoQ 记者做了更详细的说明。
贾扬清将当前 AI 框架的用途归结为最重要的两点,一是支持在框架之上简单灵活地建模,也可以叫做开发的灵活性;另一点是实现更高效的计算,因为一旦把 AI 算法应用到工程上,基础架构的效率会变得非常重要,比如推荐系统可能要跑在几万台甚至几十万台机器上,性能优化就必须做好。当前大多数框架都在朝这两个方向努力,包括 TensorFlow 2.0 加入了 Eager Mode 和 PyTorch 1.0 将旧版本的 PyTorch 和 Caffe 合并,都是在逐渐解决前面提到的这两个问题,补齐自己的短板。其实目前已有的框架都在互相学习和借鉴,大家要解决的问题已经开始逐渐变得清晰和明朗化,大家的设计也在朝着同一个方向走。“这个时候,从一定程度上来说,重新造一个轮子到底有多大的意义呢?这是 AI 工程师需要深入考虑的问题。”
更深地说,几年前,大家说到 AI 的时候有点将 AI 等同于 AI 框架这样的情况,但到了今天,整个 AI 工程的解决方案做出来,其实框架是里面很薄的一部分。贾扬清认为 AI 框架就好像计算机编程语言,比如 C++ 是一个比较好用的语言,但光有它是不够的,框架真正能体现价值的原因,在于它有非常好的生态,而且有非常多的科学计算和外部服务等。所以从框架开始,往上跟往下都有非常多新的战场或者说更多的领域需要我们关注。
往下可能包括系统上的创新,比如怎么做高性能计算、怎么做软硬件协同设计等;往上做的话,框架本身可能没有做太多大规模训练、模型迭代等工作的完整工具链。因此阿里现在关注的第一个是拥抱框架,第二是把 AI 整个链路做出来,比如前段时间阿里开源了一个 MNN 引擎,它可以让我们更好地在手机端、嵌入式端运行模型。另外,阿里还有一个开源项目叫 XDL,XDL 的一个想法是怎么构建大规模稀疏化的推荐系统,稀疏化建模是很多通用框架上非常缺的一层:在基本的框架上面,需要有一个高层的抽象,或者是更加跟业务相关的工具平台来解决这个问题。为什么大规模稀疏的系统有用呢?因为所有的推荐系统都是跟它有关系的,比如说阿里巴巴怎么样来做推荐,用户在不同的新闻网站上面感兴趣的新闻是什么,都涉及到稀疏数据,所以这一块光有通用计算框架解决不了,AI 端到端的工程需要在整个栈上发力。
软硬件协同设计
在贾扬清看来,AI 编译器是接下来比较有趣并且非常重要的一个研究方向。首先,深度学习框架之前往往需要手写各种算子的实现,如果有一个新硬件版本出来,这些函数往往需要重新优化;其次,做优化的时候,这些手写函数到底是不是最优的,即使是专家,是否能穷尽所有可能的办法找到性能最优解,都是不一定的。而像 XLA、TVM 这样的 AI 编译器就是在解决这些问题。
AI 编译器属于软硬件协同设计的范畴,旨在最大化芯片能力。当前新的芯片产品层出不穷,我们原来这种来一个硬件在上面手写设计软件的模式已经开始逐渐的跟不上了。现在的应用越来越复杂,结构也越来越复杂,我们也不知道手写的设计是不是最优的,这个时候就开始要考虑怎么做 AI Guided Compilation 或 Performance Guided Compilation,把硬件的能力跟软件的灵活性更好地结合在一起。以 TVM 这个项目为例,它可以在运行时的时候,通过计算模式跟硬件特征来设计或者生成最优的运行代码。这些都是软硬件协同设计正在探索的方向,已经变成比框架更有意义的方向,无论从科研还是应用上来说都是如此。
但软硬件协同设计要做好难度很大,需要对体系结构有丰富经验的人才行,这样的工程师很少而且培养也非常困难。如果我们能够将体系结构建模成一个可优化的问题,那么机器学习就可以派上用场了。
AI 与计算机系统架构
Jeff Dean 等人从 2018 年 3 月开始发起 SysML 会议,聚焦于机器学习 / 深度学习相关的硬件基础设施和计算机系统。那么 AI 到底能够给计算机系统架构带来哪些新的机会?贾扬清认为可以从两个方面来看。
Jeff Dean 在提到 SysML 的时候,其实提过这样一个概念,就是 Machine Learning for Systems and Systems for Machine Learning。今天我们做的更多的是 System for MachineLearning,指的是当机器学习有这样一个需求的时候,我们怎么去构建一个系统来满足它的需求。另一方面,在计算机系统构建的过程中,我们还可以考虑怎么通过机器学习的方法跟数据驱动的方法来优化和设计系统,解决原来系统设计对人的经验的依赖问题,这是 MachineLearning for System 可以解决的事情,不过目前这方面还处于相对比较早期的探索阶段,也是人工智能接下来还需要突破的瓶颈之一。
AI 商业化落地
工业界落地是贾扬清现阶段重点关注的另一个方向。与初入 AI 领域的时候相比,贾扬清认为现在 AI 领域最大的一个变化就是工业界对于 AI 的应用需求和算法输入变得越来越多了。最早在 2000 年初的时候,业内大家会有一个感觉:机器学习在 80% 的时候能够以 80% 的准确率解决 80% 的问题。这其实意味着它没有跨过可以实际商用的门槛。但到了现在,深度学习在不同领域取得了相当亮眼的成果,很多算法的准确度提升到了可以落地应用的阈值之上,如此一来工业界开始大量地使用算法,反过来又推动算法进一步发展,越来越多工业界的场景需求被反馈到科研上,同时也使 AI 研发人群数量有了一个非常大的增长。
但与此同时,人工智能在实际落地的时候依然存在行业壁垒。如何把人工智能的通用性做好,使 AI+ 行业能够真正地推动下去,这在贾扬清看来是人工智能领域目前面临的另外一个瓶颈。
从科研的角度来说,人工智能领域也存在不少待解决的问题,比如智能的本质到底是什么,我们现在更多在做的还是预测问题,那么怎么做因果关系和因果推理,怎么做可解释的人工智能,等等。
如何选择 AI 研究方向?
最近知乎上有一个问题非常火爆,题主的问题是“当前(2019 年)机器学习中有哪些研究方向特别的坑?有哪些小方向实用性很差或者很难做?或者有哪些小方向是只有圈子内的人能发?”我们把这个问题也抛给了贾扬清,请他来回答。不过扬清大神表示预测未来太不靠谱,当初他刚开始搞机器学习的时候大家都认为神经网络肯定没戏,“所以这事谁也说不清楚。但有一点是比较肯定的:不要再写老框架了,而是要看看新的方向。”
贾扬清直言,如果现在再去写个 Caffe 框架就没意思了,但如果你是想看到 TensorFlow 和 PyTorch 的长处和短处,并写出一个不管是编程语言还是系统角度跟他们有差异化优点的更好的框架,还是可以做。总之就是:不要 Follow,而要想些新的问题。 比如谷歌最近有一个叫做 JAX 的项目就非常受欢迎,首先它能够非常自然地跟 Python 结合到一起,同时应用底层编译器的能力来做优化,这些是科研上很有意思的新方向。虽然贾扬清不认为 JAX 会马上替换掉 TensorFlow,也不认为它一定能解决所有问题,但它确实是一个很好的探索方向,就像 2008 年的 Theano、2013 年的 Caffe 一样,是值得一看的新东西。
另外,贾扬清也表示最近看到偏网络调参的论文有点多,他认为通过手工调参使性能得到一点提升这样的研究价值正在逐渐下降。研究人员更应该去关注是否有更好的方法论来实现自动网络调优。也就是说“越偏手工的科研方向是越低价值的方向,越能够提炼出通用的方法论并用到大规模系统上的研究可能更加有意思。”
也谈大数据计算平台
当前深度学习其实还是非常依赖大数据量,随着互联网和终端设备的快速发展,产生的数据不仅量大而且变化也非常快,那么如何快速将最新的数据输入进来、处理并生成更为精准的算法模型?这给 AI 基础设施,包括大数据计算平台,提出了新的要求。
早前像 Hadoop 这样的系统是将计算、存储都放在一起,后来业内开始更多提倡计算与存储分离,便于实现弹性的扩缩容。当时说计算跟存储分离,更多在说的是存储跟大数据计算,而今天我们又有了新的计算,就是 AI 训练带来的异构计算。贾扬清将对应的新系统称为存储、数据计算和科学计算三者分离:存储主要解决分布式存储大量数据、稳定性、Throughput 这一系列的问题;数据计算解决怎么做数据的预处理、数据的清洗、数据的变换这一类问题;科学计算解决怎么利用硬件的性能来快速解决大量数学表达式的运算和计算模式问题。这样一个系统,怎么进行模块化设计,怎么将不同模块有机地联合起来,这是对于大数据系统设计提出的新挑战。
对于大数据计算平台未来需要重点发力的方向,贾扬清认为主要是如何进一步对接场景、提高效率以及优化用户体验等。他表示,大数据计算现在主要有四个场景,第一个是传统的批计算,第二个是像 Flink 这样的流计算,第三个是怎么做秒级甚至毫秒级的交互式查询,第四个是怎么把大数据链路跟 AI 打通,来做大规模的智能模型的训练和部署。
流计算这几年越来越受重视,Flink 一直主打流批统一,对此,贾扬清也有自己的看法。
批和流在大数据领域面对的场景还是很不一样的,我的观点是,批和流这两个场景是根据底层的系统设计自然出现的,不同的引擎有些擅长批,有些擅长流,Flink 在流上面就是无出其右的,做批流统一是为了给用户提供更加完整的体验。
现在大家经常讨论批和流统一的问题,其实是因为有比较实际的背景。大家更多场景是以流计算为主,有时候需要有一些批计算的应用,但不需要太高的效率。这个时候如果完全整个换一套引擎,开销太大,这时候引擎就要考虑怎么去补齐短板,为应用提供一个端到端的体验,不需要在计算过程中因为不同需求把所有数据都挪一遍。在批流统一上,我认为 Flink 还是会继续加强自己在流计算上面领先的地位,同时对于批计算、交互式查询做补齐,使用户在一个以流为主、相对比较综合的场景下,就能够很快地构建自己的解决方案。
现在我们看见越来越多的流计算、交互式计算这两个应用场景出现。至于未来是以流计算为主还是以批计算为主,我个人觉得接下来很长一段时间这两类计算还是会同时存在,而且针对不同的场景优化其实还是比较独特的,很难用一套来解决所有的问题。
给 AI 从业者的建议
作为 AI 科学家中的佼佼者,贾扬清在短短几年里完成了从工程师、研究人员到技术管理者的蜕变,在职业发展生涯的不同阶段,大神也会面临不同的挑战。在采访的最后一小段时间,贾扬清跟我们分享了他从自己的职业发展生涯总结的几点小经验,希望对大家有所帮助。
持续学习,多和同行交流
AI 技术发展日新月异,对于开发者、工程师来说,最头疼的可能是每天都会不断涌现出新的技术、新的框架、新的算法模型等,一不留神可能自己掌握的知识就过时了,而且这也使研究方向的选择变得越来越困难(有多难、能否出新的成果、有没有别人做过了等都要考虑)。
贾扬清强调,AI 领域的工程师一定要主动吸收学习新的信息和技术成果,持续进行知识迭代。像 HackerNews、Reddit 的 Machine Learning 板块等都是很好的信息渠道。现在也有很多媒体在推动 AI 领域前沿一些新想法、新成果和新的科研方向的传播,这也是一件很好的事情。
至于研究方向的选择,贾扬清认为两条原则就够了,一个是兴趣,另一个是多和同行交流。
让自己成为技术多面手
正如前面提到观点,在贾扬清看来,现在 AI 框架已经不再是 AI 工程师的桎梏了,AI 工程师的岗位职责也会相应的发生一些变化,未来大家需要把自己的关注点更多地放在跟实际应用场景相结合上。接下来最大的机遇是怎么把 AI 真正落地,对于工程师来说,他就需要从单纯只做 AI 转变成具备全栈能力,包括怎么对接 IoT 设备、怎么把 AI 能力做到汽车上去等。工程师除了要加强自己的 AI 能力以外,也要把自己的技术能力培养得更加多面手一些。
贾扬清坦言,在一定程度上,其实“AI 工程师”这个称谓有点被滥用了,更多还是因为 AI 比较热而催生出来的角色。
“其实今天没有只是做 Java 的 Java 工程师,因为 Java 只是一个工具,AI 其实也只是一个工具,更重要的还是你拿它来做什么。就像每个工程师都得会编程,或者说每个工程师都得会基本的一些工程能力,AI 也是一项基本的工程能力。”
对于普通开发者,不管是哪个领域的的开者,未来都可以学一学 AI 的应用,不一定需要学到知道怎么构建 AI 框架这个程度,只需要学会怎么把 AI 当成 Excel、Java 这样的工具来用,这是增强自己能力的一个比较有意思的方向。对于专门做 AI 的工程师或者科研人员来说,更多的还是需要在自己的领域深挖。
从一线开发到管理者:学会后退一步,成就他人
贾扬清刚刚从一线开发转到管理岗位的第一年,依旧埋头写代码,产出的代码量在组里头不是第一就是第二,但这使他在对团队的支持和培养方面的投入捉襟见肘。对于一线开发这或许是个不错的表现,但对于一个管理人员来说就未必了。因为作为管理者,他并没能给团队的成长提供足够多的价值。人的精力是有限的,哪怕他当时工作时间从上午九点到晚上十二点,甚至更晚,也无法做到兼顾写代码和支持团队。
这一年发生的事情对贾扬清的触动很大,他后来才意识到作为管理者真正需要做的是帮助团队其他人最大化自己的能力,而不是说像单纯搞技术开发的时候那样自己一个人往前冲就可以了。管理者要学会自己往后退一步,提供必要的指导和赋能,相信别人并为他们创造空间,让一线的同学能够得到更多的锻炼,心态得从自己钻技术转变为支持团队 Scale 技术。
原文链接
本文为云栖社区原创内容,未经允许不得转载。