Categories
程式開發

對話阿里巴巴賈揚清:如何成為一個優秀的AI架構師?


【大咖說】是 InfoQ 的視頻直播欄目,每週【大咖說】直播都會邀請一位技術圈大咖為大家分享他的職業規劃和成長故事,幫助技術人拓展思維、提高視野。 【大咖說】在經歷一段時間的調整之後,今天重磅回歸啦!本期我們邀請了阿里巴巴技術副總裁賈揚清老師,和大家聊聊AI架構的自我修養。以下是賈揚清老師直播時全部演講內容。

大家好,我叫賈揚清,現在擔任阿里巴巴技術副總裁,負責人工智能平台跟大數據平台的建設,之前在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。