• 对话阿里巴巴贾扬清:如何成为一名优秀的AI架构师?


    https://mp.weixin.qq.com/s/2jL6D29Z4C0WPaF7xJxmxQ

    大家好,我叫贾扬清,现在担任阿里巴巴技术副总裁,负责人工智能平台跟大数据平台的建设,之前在 Facebook 和 Google 任职期间,负责人工智能相关的事务,大家都知道近两年人工智能非常火爆,A 技术、人才的需求量和不菲的薪资,使得很多程序员都想进入这个行业。如何才能成为一名优秀的 AI 架构师呢?相信大家心中都会有所疑惑。

     人工智能行业突然爆火,同时对架构师的需求量也突然变大了,这是为什么?

    我觉得这是一个挺有意思的情况,人工智能这个领域 20 年前甚至更早时候就已经存在了,但一直处于不温不火的状态。最近几年人工智能突然流行起来的原因,主要是因为深度学习这一块的算法上出现了一个非常大的创新。20 年前,人工智能算法中机器学习大部分的基础理论就已经存在了,比如 1989 年出来的神经网络。当时遇到了一个问题,物理世界是一个非常纷繁复杂的场景,比如说计算机视觉、语音等等,但是当时能够做到的效果相对比较有限,当时仅能做到 80% 的识别正确率。

    即仅可以做出来 demo,但是很难实际落地。从 2012 年 AlexNet 开始,软件和硬件以及算法的发展都更加成熟,使得很多算法等相关技术可以真正起到效果。拿计算机视觉举例,2012 年 AlexNet 刚刚出来的时候,在 1000 类物体类别当中,随机的猜 5 次,它的正确率会在百分之十几左右。到了 2014 年,在做 GoogLeNet 的时候,GoogLeNet 的正确率已经超越了人类识别的正确率,基于这种情况,这些算法就可以在实际应用当中落地了。

    计算机视觉能够非常好地让计算机看见人所能看见的东西,语音识别能够让计算机听懂人所能够听懂的东西,自然语言处理和机器翻译,在现代非常多的场景里几乎可以替代人类翻译,此时应用的宽度就突然有了非常大的提升。另外,因为一些新的非常有意思的算法的出现,使得大众对于人工智能有了一波新的认识,大家不再把它单纯地当做是在实验室当中玩一玩,做 demo 的一些工具,而是把它实际应用在像安防、智能、互联网的业务当中。

    此时就催生出一系列对于人工智能专家和人工智能工程师的需求。

     AI 架构师是人工智能行业最稀缺的人才,我们应该怎么理解这个问题?

    AI 架构师这个角色是在最近几年里逐渐衍生出来的,因为没有 AI 的工程,也就没有 AI 架构师的角色。

    从 2012 年以后,刚开始,我们发现对于 AI 工程化实际落地有一个很大的需求,但是当时在这个领域中比较熟悉新 AI 算法的人都在一线,比如做科研的研究生,这一系列的 AI 框架的作者,类似 Caffe、MXNet 、Theano、PyTorch 等,机器学习框架都是在学校里。相较于现在,经历了非常大的变化。

    这些研究生们担任起了算法工程师、架构工程师,以及很多底层的优化服务搭建、前端等多面手的角色。第一波人工智能的应用和落地,多半都是以实验室到科研的路径,用老话来说就是通过产学研一体化出来的人才。后来发现实际在落地时有非常多复杂的场景,不是说拿一个 CNN 能跑就行了,而是需要思考怎样把它放到一个更长的链路里,举个例子,我们要在淘宝做商品识别,它的前面需要接数据,后面需要接业务,那么此时就会有工作的分层。最典型的一类工作就是算法工程师,现在还有非常多偏科研的、偏算法研究的工程师在不断地设计新的算法。此时我们发现有很多的需求需要有一个底层的平台来支撑算法的迭代。很早之前,在做算法时,方法比较简单,要做什么算法,就设计什么底层的框架。如果大家还记得,当时基本上做计算机视觉,可能大家都会用 Caffe,如果要做自然语言处理等等,大家都会用 PyTorch,那些工具,今天想起来都是非常原始的。

    但是当时,它解决了我们一部分垂直领域的问题。在前面几年的发展当中,我们发现这些 AI 的工程,越来越多的有共性的东西出现,无论是计算机视觉、语音,还是自然语言处理,或者大家可能不是太熟悉的,类似推荐系统等这样大规模的系统,它底层的部分计算和它底层的部分工程的模式都是比较像的,高性能的计算、大规模的分布式计算与数据的连接等等,逐渐地,不同的公司有相同的一个需求,需要构建一个 AI 的横向的平台,这个平台一方面向上了解算法,另一方面向下要对接不同的大规模的系统架构,就是异构计算,类似 CPU、GPU 以及最近几年非常流行的芯片等。

    那么此时,设计这个系统的架构师,有时会用 AI 架构师来描述它,但基本上这是一个又懂系统又懂算法,同时能够构建这样大规模的体系,并能够和业务结合起来的工程师的角色,也就是说其实 AI 架构师是一个综合性比较强的角色,AI 架构师可以说是互联网公司里面比较成熟的岗位了。

    其实我觉得就架构师这个词语,有时我们用的会比较宽泛一些,比如系统架构师,在做系统方面的东西,解决方案架构师,很可能更多的时候会在做面向业务场景的活,最后推出一个云的解决方案。还有云的架构师,在公司上云时,会提供一些上云的解决方案。那么,从 AI 架构师的角度来说,我觉得最有特点的是在 AI 的算法快速迭代的今天,能把多个综合的技能给结合起来。

    我们经常开玩笑说,最开始做 AI 框架的这一群人,做 AI 系统的这一群人,最开始全是读 PHD 的,即读 AI 的算法。然后在整个行业都在从传统的行业或是传统的工程,转向做 AI 的时候,有那么一群做 AI 框架和系统的人,在 AI 实验室里逆着潮流回去做架构,这个是我觉得今天在我们提到 AI 架构师这样一个角色的时候,非常需要的技能,就是他得懂这个算法到底在做什么东西,这样才能够相应的做出来 AI 算法和比较相关的一些系统架构来。

     想要成为一名优秀的 AI 架构师,需要怎么去做?需要具备哪些知识?

    我举一个例子,因为我现在带大数据平台跟 AI 平台这两块,那么我就拿大数据跟 AI 做一个小的比较,在座的可能有一些接触过大数据,有些接触过 AI,也都比较熟悉。那么我就来描述一下,大数据工程师看系统的时候,跟 AI 工程师看系统的时候,大家的想法分别是怎么样?

    大数据这个领域,都是从数据库的数据分析等一路走过来,大家有一个非常标准的一层叫做 SQL,不同的引擎可能 SQL 有一些小变化,但是总的来说我们说像 select、join 等这样一些简单的 SQL 原语都是比较像的。SQL 这块,他做的一个系统的设计是怎么样的呢?今天我们说一个应用大数据的工程师,在使用大数据时,他会说,我只管 SQL,然后我说 SQL 要在一个大规模的集成里面做执行,那 SQL 要怎样来切分?怎样进行 plan,怎么样在不同的机器执行,什么时候拉起一个机器,什么时候把这个机器返回回去?这个都是大数据的系统,比如像 Hadoop、Spark,包括像 Flink,我们阿里巴巴自己的流式计算大数据引擎。那么,在这个情况下系统的设计,就是在 SQL 原语这样的一个高层的语言下面做自动化的调度、调优等,所以简而言之就是,你给我一个任务,别的都不用管,这是大数据领域的状态。

    AI 今天没有那么完整或者没有那么详细的一个接口,我们在做很多 AI 应用时,算法工程师会遇到这样一个情况,需要把数据,比如图像,像语音数据等读进来,然后需要通过一个比较强编程的方式来设计一个模型,这个模型在训练的时候需要控制,比如 4 个机器,这 4 个机器上面有 32 个 GPU,那么当我们来做一个 data parallel,我会来控制这 4 个机器上面的模型是放哪的,它的交互是怎么样的等等,对于 AI 工程师和应用的工程师来说,它并不是说有一个 SQL 训练神经网络,别的全交给系统来做,他会对系统有更高的 visibility,那么此时,在构建一个 AI 的系统和在构建一个大数据的系统时,其实是不太一样的。今天我们看见在 AI 的应用当中,很多工程师会喜欢使用 notebook 这样的一个环境,就是说在浏览器上面拉起一个一个浏览器的界面,像以前用 Matlab、Mathematic 等交互式编程的方式来做。

    非常轻量级大数据的应用和 AI 的应用,它在系统设计上面是很不一样的。我们看见非常有意思的一个情况是,大数据跟 AI 是一个相互依存的关系,因为如果要训练一个 AI 的算法,我们就会非常强烈的依赖于数据量,数据量越大,我们训练出来的模型质量越好。那么大数据这个领域,一些简单的数据分析的工作,比如说像统计量、每天的销售额、每天的销售量等,这样一些简单的分析,越来越多的也会向智能化的方向发展。

    怎么样在数据场景当中做预测、做决策?大数据在逐渐向智能的方向发展时,出现了一个很有意思的情况,大数据工程师来做一个 AI 的平台,或者说 AI 架构师来做一个大数据的平台,这个时候大家的想法是不太一样的,为什么?做数据库的会觉得不要管机器,做 AI 的会觉得一定要把机器给算法工程师显示出来,但是两边是可以互相借力的。这样一些架构设计等等,会非常强烈地跟上层的应用场景结合在一起。

    这个是我觉得今天作为一个 AI 架构师需要具备的一个技能。比如说 6 年前我们在做一个系统架构时,基本上就是单机训练,差不多就可以了,单模型训练单机的推理 GPU 就可以了,今天我们会遇到分布式训练这样一个模式,在推理时,我们不仅是一个单模型,可能是一个多模型的联合的推理,那么它对于我们实际架构的一些设计都会提出更高的要求。这个是我们今天看到的 AI 架构师需要有的一个能力。

     什么样的公司需要 AI 架构师这个岗位?

    这个我觉得其实和很多 IT 的基础设施的变化也是有关系的。比如像 10 年前 20 年前,大家要搭建一个互联网公司的话,首先得有能够搭机房的能力,甚至于当年我们在实验室读 PHD 的时候,实验室得有一堆机器来做科研。

    那个时候基本上实验室里面都会有那么一个同学专门负责搭机器,一般是搞系统搞的比较猛的同学来搭机器,我当年在伯克利的时候是我们实验室的管理员,非常痛苦,一堆机器放在那,进去机房的时候脑袋都能响,然后我还要管这个实验室的账号等等,这一系列的东西当年是需要做的。今天的话很多的应用,比如说像在北美那边,如果要做一个创业公司,就直接在 AWS 上面弄就行,买点机器就直接可以轻量级的上来了。在国内,也很简单,上阿里云就行了。现在,对于最底层的搭机器的能力,我们就有一个比较简单的方式来解决了。从 AI 架构师的角度来说就是,今天我们是不是需要有人来搭建 GPU 的集群,来做基本的管控等,大家可以通过云上的能力来解决。

    再往上我们应该怎么做,任何一个公司都需要有一个懂系统的人,为什么?如今 GPU 很贵,假如我买了 1000 块 GPU 放在那,利用率怎么样?跑的效率怎么样?上面的算法和 CPU 是不是匹配?这一系列的都还是需要跟算法接得很近的,有那么一层工程师在做。所以架构师这个角色也不是说一言以蔽之的,全是在端到端的,把整个东西都搭起来。今天我们说到 AI 工程师,可能需要 AI 系统工程师懂一些算法,AI 算法工程师也要懂一些系统。

    在这样的环境下,我觉得任何一个公司都会需要有算法跟工程都懂一点这样的一个同学,最底层装机器的事情,交给云这样一个底座去做就可以了。但是,上层比如说我们要做算法、算法和系统的结合等这一系列事情的时候,都会需要具备这样的知识,我觉得并不一定是要去专门学架构师这样一个角色,而更多的是说有哪些技能我们要来学会。

     AI 架构整个发展前景是怎么样的呢?

    我觉得就 AI 架构师来说,和一般的程序员的发展路径可能没有太大的区别。但是我其实想提特别有意思的一点就是,最近几年我们在整个计算机领域看到的一个大趋势是这样的,大家想一想我们在十几年前二十年前没有 AI 这样一个概念的时候,我们做系统写程序是怎么写的?我们基本上是手写规则,比如说要做一个图书查询,所有的规则都是手写的 if-then-else,如今算法开始变得智能化了,很多像是图像识别、机器翻译等,都开始要求不仅有底层的系统,还要有上层的算法,这个算法是和数据结合起来,最后来实现上面的应用。

    所以我们以前是说只写代码,后来我们要在代码上面写算法,用算法在上面再进行一个业务的建模等。然后我们就会有这样一个概念,会想说之前我们是怎么处理代码的?首先我们写代码要有一个 IDE,我们在 Windows 上开发有 Visual Studio,在安卓上开发有 Android Studio,在苹果上面有 Xcode,如果写 Java 有 Eclipse 等等,那么今天数据和算法结合起来的时候,我们应该怎样来处理?

    新的 IDE 在什么地方?我们编程的环境,随着这样的一些应用是不是有什么变化?我们会发现今天其实作为工程师的我们自己在做 AI 的时候,都会遇到这样一个情况,就是我们需要有一个更加 explicit 更加显式的一个方式来管理我们的代码、数据、实验和算法。在 Facebook 的时候碰到一个特别逗的事儿,我去公司会比较早,我的同事们很多时候在做比如说像手机端的图片识别等等这样的应用,我们桌上散落着一堆的手机,我有一个同事,有一天我看见她桌上放了一个手机,后面贴了一个贴纸,上面写着,it worked yesterday。昨天还工作得好好的,今天过来,不知道怎么着,好像数据换了一下,效果就出不来了。丢代码是当年咱们都感觉过的非常痛的一个经历,今天东西更容易丢,我们的数据集是怎么样的?我们的算法我们的模型到底是怎么样的?模型训练的时候参数是怎么样的?这一系列的东西丢了,真的找不回来,有时会想试图跑一跑一个月之前的一个模型,有时突然发现反正总有些东西不太对劲,跑不出来。

    所以以前我们是说管代码,那么今天我们需要把代码、模型、数据,把我们实验的所有参数流程什么的都尽量记下来。在自我学习自我提升的时候,如果我们想看一看我们在系统上面,在算法上面有什么提升,都是特别需要的,就像是我们管代码一样,我们以前 git log history 是怎么样的?看看自己写代码的时候,当年的想法是怎样的,跟如今在模型等领域都是比较像的一个模式,这是一块。

    第二块,我们从一个更加有前瞻性的角度看,今天很多的模型开始越来越多的自动化了。但是我们运行模型的这些 AI 框架和一些 AI 系统还是手写,我们会逐渐的发现我们自己以前用手工来做决策的一些系统,越来越多的也会嵌入到 AI 的一些算法,也会逐渐的把一些 AI 的算法迁入进来。如果我没记错的话,两年前,我们有一个叫 System ML 的一个 conference,当时 Google 的大神 Jeff Dean 他提了这样的一个概念,他说 system for AI, and AI for system, 大家都知道我们要做 AI 的算法时,需要有一个系统来支持它。这样的概念就是说以前我们在构建大规模系统的时候,非常多的东西都是基于手工这样一个决策来做的。但是今天我们在运行这样一些 AI 的模型和系统的时候,假如说像阿里巴巴、像淘宝那么大的一个环境,我们的模型运行的这样的一些统计数字等,本身它自己就是大量的数据,它可以帮助我们在系统设计的时候,通过数据,在系统下一步构建的时候,更加自动化的来优化。

    AutoML 是一个例子,AI 编译器也是一个非常明显的例子,我们可以通过 AI 系统运行的状态来看,背后应该怎么样进一步的自动化地来调优我们的系统。说一句比较大胆的话,5 年之后我们会发现绝大多数的计算机系统,比如像数据库、大数据,甚至像 CDN、容器、调度等等这一系列的东西,以前那些手工的决策,很多时候都会被我们 AI 自动化的一些算法模型所取代,那么作为一个系统架构师或 AI 架构师,我觉得最值得学的一个事情是算法,它是怎么样把我们的算法嵌入到我们系统设计里来的。这个模型可能没有那么复杂,我们很多时候一说 AI 就被深度学习人工神经网络吓到了,但是机器学习这个领域有一些非常古老,但是又非常有意思的一些模型,比如说像比较简单的线性回归和决策树这样的一些模型,我们可以想想它怎么样来嵌入到我们的系统里头来?很多时候模型的复杂度并不是最关键的,从一个手工的优化或者是手工设计的模式,到一个基于数据的模式之间会有一个比较大的转变,这是我们架构师可以经常来考虑的一个问题。

     如果想成为一名阿里的 AI 架构师,需要具备哪些技能?

    我觉得比较难确切描述,就像刚才聊到的,其实 AI 架构师经常会面对 AI、工程这样的一些场景、应用等等,什么都得懂一点。包括我刚才看到有一个同学问本科生能不能做 AI,Alex 当年做出 AlexNet 的时候,他就是研一的状态,所以我觉得本科生绝对能做 AI。

    我觉得我们在寻找的工程师所需的技能是怎么样的?第一,是要有很好的好奇心,对于最近的这样一些算法,比如说 AlexNet 的出来,这是一个非常多变化的领域,比如 BERT 出来非常短的一个时间,最近有非常多的像 ALBERT 等等这样一些变化,所以最需要的一个能力是好奇心以及能够快速学习新的算法跟新的应用的一个能力。

    其次是对于系统的熟悉程度,也许你并不是一个编译器的专家或数据库的专家,但是能够非常快速的学习这些传统计算机领域当中核心的技术和核心的一些技术点。第三,我觉得其实我们特别需要的一个技能是把算法和实际的业务流程结合起来的能力,或者说这样的兴趣。咱们以前在学校的时候经常有像数学建模大赛等等这样的一些领域,我们会发现数学建模大赛其实一方面是说要做建模,但另一方面是我们要把业务的问题或者实际应用的问题抽象成数学的问题,很多人都能解这个问题,但是真的把它从一个应用的问题抽象成数学问题,这一步其实非常的难。

    刚才也有很多同学提到说,怎样来做 AI 的落地等等这方面,对我们来说,懂应用、懂建模的同学,是我们非常缺的也是非常欢迎的这样的一个 Job Profile。

  • 相关阅读:
    图的深度遍历
    判断森林中有多少棵树
    基于邻接矩阵的广度优先搜索
    第三届程序设计知识竞赛网络赛
    大数相乘
    a+b=x,ab=y
    poj3278
    不敢死队
    单链表中重复元素删除
    poj2506
  • 原文地址:https://www.cnblogs.com/dhcn/p/12459249.html
Copyright © 2020-2023  润新知