对话阿里巴巴贾扬清:如何成为一名优秀的 AI 架构师?
簡介: 近期,我們邀請了阿里巴巴技術副總裁、阿里巴巴計算平臺事業部總經理、 AICon 全球人工智能與機器學習技術大會深度合作伙伴賈揚清光臨 InfoQ 直播間,和近 7000 名用戶分享了作為一名 AI 架構師的自我修養的話題。
大家好,我叫賈揚清,現在擔任阿里巴巴技術副總裁,負責人工智能平臺跟大數據平臺的建設,之前在 Facebook 和 Google 任職期間,負責人工智能相關的事務,大家都知道近兩年人工智能非常火爆,AI 技術、人才的需求量和不菲的薪資,使得很多程序員都想進入這個行業。如何才能成為一名優秀的 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。
總結
以上是生活随笔為你收集整理的对话阿里巴巴贾扬清:如何成为一名优秀的 AI 架构师?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020 云原生 7 大趋势预测
- 下一篇: 阿里云RDS vs 自建MySQL,这篇