Caffe作者賈揚清:AI,從大資料演進到高效能運算

Robinly發表於2019-03-05

本期Robin.ly矽谷交流活動邀請到Caffe作者賈揚清博士與大家分享從Caffe到PyTorch的AI基礎架構演進以及AI時代軟體開發的趨勢和挑戰。他在現場與Robin.ly創始人Alex Ren對於Caffe和PyTorch的開發及軟硬體協同設計進行了精彩的訪談對話,並回答了現場觀眾的問題。

Caffe作者賈揚清:AI,從大資料演進到高效能運算

以下為採訪實錄和問題摘要:

「 從Caffe 到 PyTorch 」

Alex: 最早的時候聽說Caffe是你的一個side project,不是你論文的主要內容。當時開發Caffe的初衷是什麼?中間經歷過什麼過程,可以給大家講一下嗎?

Yangqing: 主要的原因也是因為AI research,以前researcher寫code,像Matlab之類的,很難reproduce。在2011年,2012年的時候大家還沒有太強的reproduceable research的這樣的想法,所以在AlexNet的paper出來之後呢,大家都沒辦法有一個比較reliable的平臺,來實現它的結果。當時我們在Berkeley希望用Caffe來推動獨立研究,所以當時內部開始試圖來呈現它的結果,相當是一個於side results。整個過程大概做了兩個月。

Alex: 後來到了Facebook之後繼續做Caffe你有遇到什麼新的問題嗎?

Yangqing: Caffe因為已經六年多了,所以當時有很多歷史遺留問題。最開始做Caffe的時候大家都是照著computer vision的模式來做的,所以很多design都是在CV方面比較make sense,在NLP等其他地方都相對比較難一些。當時整個modular design還沒有太清楚。Facebook在15年的時候其實很多產品裡都還在用Caffe的runtime來部署,但是後來整個flexibility都會有些問題,所以這也是我們後來寫Caffe2跟PyTorch的原因。

Alex: 前段時間你們宣佈了PyTorch1.0的釋出,我記得Caffe主要是做production的,而PyTorch主要是research這個階段,當你把它們合併在一起的時候,是希望解決什麼問題呢?

Yangqing: 這個我們目前也是一個比較explorative的方向,我覺得整個行業大家都在往這個方向走。比如TensorFlow在TF2.0的announcement裡面提到了eager mode,或者說是imperative mode。最大的一個挑戰基本上是research和production,這兩個 fundamentally是兩個不太一樣的priority。Research需要flexibility,一切都應該可以調;而Production是要performance的時候,最後總是會需要有一些相對比較flexible的地方。所以很多時候都是看具體的實際應用然後來consciously make some compromises。就比如說像計算機視覺,包括像推薦系統這種實在是太大規模,even 1% or 2% accuracy matters,在這種情況下我們會需要犧牲一些flexibility,來更加註重在performance上邊。像一些新的應用比如說像自然語言處理機器翻譯等,可能對於resource的要求沒有那麼高。我們可以sacrifice比如說10%的performance,對於model iteration的要求比較高,所以這個就更加偏向於research這邊。

Caffe作者賈揚清:AI,從大資料演進到高效能運算

「 軟硬體協同設計 」

Alex: 上次我跟你聊,你說到你比較關注硬體方面的發展。我想知道你的角度是什麼,是software hardware co-design嗎?

Yangqing: 更加偏向於software hardware co-design吧。CPU和GPU它的好處不光是在硬體上,而且是在軟體上。最可怕的事情是什麼呢?就是我們知道它很好,但是最後大家發現沒人能在上邊寫程式,‘cause it’s too opaque。NVIDIA非常成功的原因是因為,我可以隨便找一個人,花半天的時間,他就可以開始寫CUDA code,只要他懂C++,我就能讓他寫CUDA code。NVIDIA,從04年CUDA出來以後到今天,NVIDIA把它整個software layer做的如此之好,使得它的入門門檻很低。如果我突然來一個FPGA,沒有一個月的時間,沒人能在上邊寫程式,所以說新的硬體最大的一個挑戰不光是在硬體上,而且是在軟體上。這也是為什麼我對軟硬體協同設計很感興趣。

Alex: 也就是說它搭建了一個eco-system,給developer們有更方便的方法去用,對吧?

Yangqing: 對!

「 計算機領域的文化 」

Alex: Facebook也是少有的做比較頂尖的AI research的一個公司,你在裡邊帶領AI infrastructure這塊的一些研究。我知道Facebook,Google這樣的公司有個特點,就是它有很多大牛都在一起工作。而很多別的公司經常有這種一山不能容二虎這種現象。我不知道你在這方面有什麼體會,有什麼心得可以分享?是什麼樣的文化使得Facebook在research這方面有個cutting-edge research的結果?

Yangqing: 我覺得更多的算是計算機領域的文化吧,比如說大家最近經常能夠聽到的訊息比如像金融這個領域目前逐漸的越來越難吸引到頂尖的人才。一定的原因就是因為整個領域太封閉了,誰都不知道其他人在做什麼。那麼這個時候就有很簡單的一個事,就是我們有句老話說的,叫獨木難支嘛,如果一個領域大家都在鑽著自己做自己的事情的話,有很多collective wisdom就很難被激發出來。而計算機這個領域的話,大家很多的想法,第一是說開源,第二是open research,第三是非常頻繁的交流。有很多的平臺本身就是,像我們用的Reddit啊,Hacker news都是一個很好的平臺,包括Robin.ly等等,所以我覺得整個這樣的一個文化使大家可以更快的把這個蛋糕做大,等到蛋糕做大了之後,誰都能從中獲益。

Caffe作者賈揚清:AI,從大資料演進到高效能運算

Alex: 謝謝你提到了我們!你提到了Reddit,我看到了你Reddit上有篇評論,裡邊提了一個詞叫unframework,因為當時是Caffe 2.0的時候你提的,能給我們解釋一下是什麼意思嗎?

YangqingUnframework基本上是說以前大家在做AI的software的時候一個framework什麼都有。當時六年前大家說Caffe,Torch跟Theano,就是一個framework,你在裡頭或者外頭想做什麼也很難。現在比如說,像我們有不同的硬體出來,有TPU,有visualization等等,逐漸有點類似於一個單元的 operation system,我做完一個operation system的時候不是說所有的事都完成就可以在上面裝app和extension了。發展到今天,framework是一個很小的部分,外面有很多其他各種元件譬如說硬體,visualization等等。舉個例子說PyTorch目前我們在跟Google合作來做一個Tensorboard,a very nice visualization tool for AI,它就是不光限制在一個framework,而是build different components,get components clip,用各種各樣的方式plug起來。

 「 管理團隊的軟技能 」

Alex: 你當初也是典型的engineering research出來的,現在去lead的組織,有很多工程師。你覺得在這個過程中soft skills你有些什麼收穫,給大家有什麼建議?

Yangqing: 這方面可能一個人做事情和一群人做事情還是有一些區別的。第一個是我們所謂叫innovator’s dilemma:一開始大家會覺得這個team做的太慢了,這事兒我一個人能夠兩個小時就能搞定的。為什麼這個team一天還沒搞定。大家有時候怎麼樣來properly set expectation,因為自己一個人的bandwidth是有限的,怎麼樣來幫助整個team能夠合作把這個事情往前推。可能在單個的事情上efficiency不好但是在整個大的全組project上能夠更加accelerate一些;第二個是怎麼樣grow people,就是create space for people to make mistakes,怎麼樣能讓大家來逐漸take ownership。第三個是管理層面提到的give away your Legos,就是focus在別人需要你的地方而不是自己做的最好的地方。我覺得在做technical management或者technical leadership的這塊兒其實還是挺有意思的。

Alex: 接下來歡迎場下同學提問!

Caffe作者賈揚清:AI,從大資料演進到高效能運算

 「 從資料到決策的新趨勢 」

Q1: 這兩年我們看到了一個趨勢,從classification regression要做reasoning,然後要去做reinforcement learning,要去做decision making,在這個趨勢你有什麼看法呢?因為從我們的直覺上來說這個是跟過去相反的趨勢,但是實際上我們看到如果不這麼做的話,直接用probabilistic的方法遇到了很多問題,所以想問您對這個趨勢怎麼看,這是個大趨勢嗎?他將來怎麼樣發展會對現在Deep Learning社群有什麼樣的幫助?

Yangqing: 我覺得這應該是一個挺大的趨勢,在很多領域都有體現。比如說像六七年前我在做PhD的時候我們做probabilistic graphical model,第一個是,資料進來之後我們可以把它建模成一個大的joint probability,但是graphical model關注的是怎麼樣來interpret不同資料,或者不同dimension之間的relationship,causality等等。所以一方面是計算或者歸納,一方面是怎麼從statistic當中提取一些logic或者一些rule來,因為就像你剛才提到的,因為我們純用statistical或者現在的deep learning的方法的話,我們很難從中提煉出一些knowledge,what is the guiding principle for us to design new models?前面幾年像Alex提出來之後大家覺得這樣有一個principle來設計CNN,而我們在這個方向上已經走的差不多了,然後接下來就是what is the new principle for us to design even better models?Maybe it’s AutoML,or maybe it’s kind of new principles.  所以從現有的這些資料當中提煉出logic,提煉出知識來是一個挺重要的東西。

 「 計算機語言的選擇 」

Q2: 前段時間有一個語言叫Julia橫空出世,號稱集百家之長,所以我想問問你對這個語言有什麼看法,有沒有打算基於Julia這個語言建立一個framework。

Yangqing: 我們其實嘗試過很多各種各樣的語言,所以說我不太好評論。Julia的好處是它對於low level language migration非常好,比如大家如果用Python的話,可能你在Python裡寫for loop, performance非常差。Julia對這個low level language binding的performance一直都是挺不錯的。我們考慮過很多的language,包括我們自己Facebook以前有Torch,Torch是基於Lua的,我們最後發現了一點:it’s not about the language itself,it’s about the eco-system。很多人都說Python是一個很爛的語言,但是它有社群,它的整個的eco-system非常好,如果我要裝Python,我有Anaconda;如果我要用Python visualization,我有Matplotlib;如果我要有numerical computation我有NumPy和SciPy,如果我要做影像處理,我有Scikit-image。 所以說最後我們發現這個eco-system很重要,當年Luatorch遇到的很大的一個瓶頸是沒有人知道怎麼寫Lua。大家都很懶,我也很懶,我不想為了學一個新語言而學一個新語言,whatever works for me。所以說這個時候Python作為一個很不錯的compromise,似乎是目前整個industry大家比較common的選擇。

 「 資料收集與處理 」

Q3: 我們知道deep learning是非常data hungry的,我在想在設計AI infrastructure的時候有沒有考慮在一定level上比較general的direction可以把data collection這件事情也整合進來?


Yangqing: 在大公司可能這個不是一個問題,data is kind of naturally coming in,但是在很多應用的時候的確我們也發現data的pipeline需要很緊密的integrate到compute系統。主要的兩塊第一個是how to actually process data,就是怎麼樣用傳統的MapReduce或者說現在的online approach來feed data into training algorithms,特別是high performance的環境下我們發現不光計算是個瓶頸data也是一個瓶頸。如果我們在GPU上做計算的話,GPU能算得如此之快經常導致大家的data input跟不上。另外一塊就是怎麼樣做data versioning跟data management。我們發現模型train完了之後holdout上的data,validation上的data performance非常好,上線之後就發現不行,最後發現validation data搞錯了,跟training data有overlap等等。所以說,怎麼樣讓我們很容易的detect這樣一些問題呢,可以更好的做data management,這個其實在infrastracture這邊的saving會很大。

Q4: 你覺得在設計AI infrastructure的時候如果想把data考慮進去的話應該怎麼做呢?

Yangqing: 傳統的data infrastructure一直以來在很多公司都是一個挺大的organization,有非常成熟的像Hadoop,Google的Big Table這樣一些解決方案。基本上data infra這邊大家考慮的問題也是兩個,第一個是serving,像web serving,第二個是batch processing,像MapReduce。比如像Berkeley前面幾年我們一直在做的Spark的這個專案也是Spark ML一直以來比較偏向於batch processing MapReduce這樣一個方向。而現在突然這個SGD (Stochastic gradient descent)的training方法來了之後大家發現以前這種batch processing的想法已經行不通了。所以像Berkeley的最近的Ray,Clipper這些project就會更加偏向於更加現代一些的SGD的某些computation pattern。這方面沒有一個太好的解決方案。

Q5: 你剛才說到資料的問題,其實很大的問題是像你說的,資料其實一直在變,這個tracking其實跟big data的stack是很不一樣的。Big data 很強調immutability,它要是不變的我們才可以做很多事情。現在你的資料不停在變,label在變,然後新的資料進來,這個versioning現在是一個big mess。我們看了很多solution也都找不到很好的一種,我想聽聽你有沒有什麼想法?

Yangqing: 對,不光是data version,而且model versioning也有問題。即使是同一個data,我們在上邊跑兩次training,出來結果都不一樣。我們在Facebook做testing的時候,有時候就算是兩個matrix application,你把threading換一下,從4個詞變成8個詞結果就不一樣。非常deep的neural network你從最開始有這些小的變化到最後的一個輸出,基本上有很多時候都是沒法guarantee binary wise compatibility的。CPU跟GPU之間幾乎不能,大概像ResNet這樣一個模型,最後的輸出可能會有1%到2%的fluctuation都是正常的。所以說對這種testing environment或者說怎麼樣來interpret  ‘Correctness’,大家目前還不太清楚。最大的一個investment在Facebook這邊是怎麼樣做更好的experimentation management,可能沒法解決這些問題,但是我們可以解決對於任意experiment來說,我們可以記錄as much information as possible,在哪個commit上面run的這個,在哪個版本的data上跑的,使得我們在manually做inspection的時候能夠有更多的information。

 「 工具的使用 」

Q6: 前面介紹提到說從research到production,一個方面是工具上的不同,另外一方面其實是research過程中,比如你用Jupyter Notebook,你會做很多的小的code的片段,但真的上production你需要一整塊的、經過unit test的軟體工程整個進入系統。這個之間其實還是有一個工具上的不同,想聽聽看Facebook有什麼樣的解決方案。

Yangqing: 我先說工具的這個問題吧,工具的話其實我們也發現Jupyter Notebook最大的問題是什麼呢,就是說跑實驗的時候才能跑這些個,最後發現,再跑一遍跑不出來了。所以我們現在內部有一個類似於Notebook這樣的environment但是更多的就是用來純做research,更多的時候工具這邊大家都是set expectation,就是說this is the place where you maximize your ideas but it’s not guaranteed to ship into products,at all。所以最後在做product的時候大家還是會需要enforce一些quality test相關的東西。更多的是從experience的角度來說,使得大家更加像一些,比如research用Matlab,product用C++,這怎麼寫?如果research用的Python,只不過是我用的是Notebook,然後product用的是Python,只不過是一個.py file,這個時候migration就相對更加容易一些。所以我們在PyTorch跟Caffe2這邊非常重視怎麼樣來unify experiences,包括比如說像Twython跟Scripton也是,they look similar,保證你真的回頭要transfer的時候你可以吧Twython改成Scripton就完了,沒有太多的像從Matlab到C++的這樣一個變化了。

「 PyTorch 與 TensorFlow

Q7:PyTorch是一個使用者很多的一個系統,還有一些使用者比較多的系統就是TensorFlow,背後都有一個很大的community,有很大的公司在支援,但是其實你剛才也提到了就是TensorFlow也出了這個eager mode大家需求也都一樣,都有這個research developability或者interactivity這方面的需求,deployment都有scalability或者performance這方面的需求。那最後有沒有這兩個系統或者說市面上所有系統合併到一起的可能,從business的角度來說什麼樣的條件會造成這種合併。 

Yangqing: 我問你這樣一個小問題。我們在用uber,gmail,或者calendar的時候,我們會擔心是在Android上面,還是iOS上面嗎?就是說根本上到最後 product這邊, as long as we have a platform for us to run models, it's probably gonna be not different. 對於uber來說,它可能並不擔心iOS或者Android,假如說他們能合併,那這是一個最省事兒的事兒,那將來他們就不用寫app寫兩套了。但是it's not a deal breaker。 然後從framework的角度來說,我覺得一方面大家開玩笑說 There's a war on frameworks, 對吧?從當年相對比較academic的Caffe 跟Torch 跟Theano 這三家,到現在Google的TensorFlow,Amazon的MXnet,Facebook的PyTorch,Microsoft的CNTK等等,到最後大家發現這些idea都會逐漸converge起來。所以我個人不會太擔心最後 which framework wins on framework, or which framework migrates which framework. 最後的idea都差不多。

Caffe作者賈揚清:AI,從大資料演進到高效能運算

 「 軟硬體結合的挑戰」

Q9: 你提到軟硬體一定要結合,才能發展。那你現在覺得從production eco-system 上看,有哪些地方軟硬體結合做的還不是很好?

Yangqing:  目前在production應用上,軟硬體結合的只有CPU和GPU,大家都還在一個探索階段。CPU 跟 GPU 差不多都已經足夠well known了。最大的挑戰可能是怎麼樣來manage heterogeneous computation,因為在做prediction service的時候,傳統CPU這邊的話,整個架構都很homogeneous。我可以在production logic thread上來做computation也沒什麼問題。然後一旦走向GPU,或者accelerator之後,就會需要有更加desegregated service。比如prediction/computation stack是一個pool,然後production logic會是另一個pool。那麼在這樣的一個setting上面,怎麼樣把中間整個connection結合起來,是不是network bandwidth會變成一個新的bottleneck。整個latency或者怎麼樣來manage computation pool 然後capacity怎麼樣最後balancing。 這些傳統的問題都會重新emerge起來。這方面還是需要一些early analysis。

 「 10年後博士研究的玩法 」

Q8: 現在這些framework,這些工具非常的成熟完善,這必然是件好事。但從另一個角度來講他對computer vision researcher和graduate student的impact是非常不同的。比如說五年前/八年前你可以design自己的feature,做一個minimization variation whatever graphical model你可以發paper,這個玩法和現在必然不同,現在你要train model,你要自己想辦法做一些新的architecture或者其它一些比較有竅門的東西才能發paper。那比如說十年之後你再去Berkeley讀一個computer vision PhD從頭開始的話,這個玩法是什麼?

Yangqing:大家還有另外的一個相關的comment就是說目前這個整個做deep learning training需要的資源越來越多,學校到底怎麼辦對吧,誰也沒有一萬個GPU來train AutoML model,那這個AutoML research怎麼做呢?比如說像12年的時候大家都覺得Google的infinite resource,大家deep learning怎麼做?最後Alex做的方法就是2個GPU,我當時在Google實習,對我們來說還挺surprising的,其實computation resource isn’t the winning factor。學術界的一個好處是,you have to be efficient。我現在個人是在工業界,工業界有的時候大家被這些resource給寵壞了,學術界其實一直都還是source of the new information and new ideas。很多時候可能模型並不一定需要太大,但硬懟performance或者硬懟container resource大家在grad student這個地方就別做了。然後能夠做的方向就是how we actually just look at the current models and then do new ideas。Berkeley去年做了很有意思的一個paper叫CycleGAN,怎麼樣在generative advisory network上面做一些新的工作。這些方面可能不需要太多的resource,包括是一兩個CPU就差不多夠了。所以可能再讀PhD的話可能做法還是差不多的,就是看看最近新的idea在什麼方向,然後更多的是iterate on ideas,  not iterate on systems。

Alex: 我們今天的問答就到底為止,很榮幸今天能請到賈博士來和我們分享他在Facebook的工作,對AI的看法,對未來行業的想法。謝謝賈博士今天的分享!

Caffe作者賈揚清:AI,從大資料演進到高效能運算

相關文章