PyTorch橫掃頂會,TensorFlow退守業界:機器學習框架一年變天
TensorFlow 2.0正式發布沒幾天,PyTorch 1.3今天也上線了。
一個瘋狂強調“易用性”,一個整出了移動端部署。老將和新秀都卯足了勁。
畢竟,機器學習框架的世界,局勢變化過于迅猛,稍不注意就會被搶了地盤。
一年前,TensorFlow還是各大頂會論文選擇的主流框架,如今頂會幾乎成了PyTorch的天下。
CVPR 2019,只提到PyTorch的論文有280篇,只提到TensorFlow的論文有125篇,但這還不是懸殊最大的一場會議。
有網友 (@programmerChilli) 說,雖然知道大批研究者逃離TF擁抱PT:
但我絕對想不到漲幅能到這種地步。
那么,PyTorch的優勢到底在哪里?
PyTorch一路凱歌,對TensorFlow經營多年的格局又有怎樣的沖擊。
這一次,一位來自康奈爾大學的少年Horace He,用一份詳盡的調查報告,對現狀進行了總結,也為潛在入門者提供了方向:
PyTorch制霸學界
報告開頭就提到:目前的大背景是,大量研究人員從TensorFlow轉投PyTorch。
但大家未必知道,這勢頭來得多猛烈。來看2018年與2019年的各大頂會對比吧:
△ 被擋住的ICML是32.5%
表格列出了CVPR、NAACL、ACL、ICLR、ICML這五大頂會上,僅提到PyTorch/僅提到TensorFlow的論文數量。
2018年,PyTorch五項數據全部低于TensorFlow。
2019年,PyTorch五個數字全部超越TensorFlow。
PyTorch每項數據的增幅,都在192%到450%之間,漲勢十分兇猛。
其中,以自然語言處理(NLP) 的頂會NAACL (450%) 和ACL (290%) 最為顯著;在視覺頂會CVPR上也有大幅增長 (240%) 。
相比之下,TensorFlow有三項數據下滑。其中NAACL數據下降幅度達到了38.2%,而這里正是PyTorch飛躍式增長的地方。
此消彼長,PyTorch只用了一年,便把弱勢變成了壓倒性優勢:
280:125 (CVPR) ,兩倍有余。
66:21 (ACL) ,三倍有余。
103:33 (NAACL) ,三倍有余。
在語言和視覺頂會上,PyTorch的主導地位最明顯。這跟上文提到的漲幅是吻合的。
如果還有人把PyTorch當做一個新秀,試圖在TensorFlow主導的世界里,劃出一片自己的地盤,那么數據告訴他們,已經不是這樣了。
雖然,看上去TensorFlow還有兩項數據在增長,但其實只有ICML的漲幅 (32.5%) ,還跟得上會議總錄取論文數的增長。
也就是說,在另外四場會議上,TensorFlow已經開始衰退了。
為何研究人員愛PyTorch?
一是簡單。它和NumPy比較像,風格很Python,能輕易和Python生態集成起來。
比如,你只要把一個pdb斷點扔進PyTorch模型里,它直接就能用了。
相比之下,在TensorFlow模型里面debug的話,便會復雜得多了。
二是API好。比起TensorFlow的API,大多數研究人員更偏愛PyTorch的API。PyTorch設計得更科學;而TensorFlow要在各種API之間切換,令人操作不便:
‘layers’ -> ‘slim’ -> ‘estimators’ -> ‘tf.keras’
三是性能。雖然PyTorch的動態圖 (Dynamic Graphs) 提供的優化空間比較小,但許多用戶都反饋說PyTorch的速度不亞于TensorFlow,甚至比對方還快。
雖然,沒有嚴格測試數據表明到底誰更快,但至少TensorFlow并沒有明顯的優勢。
這樣,再加上前兩點,足夠讓許多研究人員擁抱PyTorch了。
TensorFlow在研究領域會怎樣?
就算今后TensorFlow變得像PyTorch一樣友好,PyTorch的地盤也已經很大了。
這就是說,PyTorch的代碼實現更容易找到,人們也更有動力發表PyTorch的代碼給大家用,跟別人合作的話隊友也可能會傾向PyTorch。
所以,遷回TensorFlow 2.0這件事,大概率不會進展很快。
當然,谷歌和DeepMind內部研究還是會用TensorFlow。他們的研究成果,大概也給了一部分研究人員,繼續用TensorFlow的信心。
不過Horace He聽說,谷歌內部也有許多研究人員,渴望逃離TensorFlow了。
另一方面,PyTorch主導地位越來越強,谷歌研究人員可能和整個社區之間產生隔閡:他們很難在外部研究的基礎上搭建自己的應用,外面的研究人員也很難借鑒谷歌的代碼。
最后,TensorFlow 2.0能不能挽回一些研究人員,還需要時間來觀察。Eager Execution一定是個吸引人的點,而Keras API就不一定了。
TensorFlow守住工業界
雖然在各個開發者社區,“PyTorch真香”論聲勢浩大,現在又在頂會數據上實力壓倒TensorFlow,但其實,在工業界,TensorFlow仍具優勢。

比如,根據Medium博主Jeff Hale的統計結果,2019年,TensorFlow在線上招聘啟事中擁有1541個新增職位,而PyTorch有1437個。
從arXiv的論文數量來看,TensorFlow也仍然占據首位,只是領先優勢在縮小。

一方面,TensorFlow的誕生早于PyTorch,工業界對新鮮事物的追逐,不像學術界那樣熱切,使用TensorFlow已成行業慣性。
并且,許多企業的代碼都是基于TensorFlow搭建的,想要遷移到PyTorch上,并非易事。
另一方面,相比于PyTorch,TensorFlow本身就是為工業界量身打造的。
相比于研究實驗,工業界會有更多的限制和要求,比如:
· 不用Python。Python在服務器上運行時開銷太大,有些公司承受不來。
· 可移動性。移動二進制文件中沒法嵌入Python解釋器。
· 服務。無停機更新,模型間無縫切換,可預測時間的批處理,等等等等。
TensorFlow在這些方面顯然比PyTorch做得好得多。比如,訓練好模型,然后使用TF Lite進行部署,是目前最可靠的生產管道之一。
有網友舉了個例子:
TensorFlow能夠將模型導出到coreml Android模型中,也能很容易地將其轉移到GCP(谷歌云端平臺)環境等任何形式的生產環境中。

相比之下,PyTorch的部署有些讓人頭禿:模型無法導出到非Python環境,無法優化,無法在移動設備上運行(隨著PyTorch 1.3的發布,無法在移動端部署的問題已經得到解決)。
況且,TensorFlow還有Keras這個好伙伴呢。
不過,也有網友認為,PyTorch在工業界取得主導地位,只是時間問題。

畢竟在2018年的頂會上,TensorFlow還是主流呢。僅僅一年時間,王座就已易主。
△Medium博主Jeff Hale統計
“融合”趨勢
PyTorch勢頭猛烈,但TensorFlow也沒有坐以待斃。
一個有趣的現象是,現在,這兩個機器學習框架呈現出了“融合”的趨勢。
十一假期,TensorFlow 2.0正式登場,進一步整合TensorFlow和Keras,增強易用性,官方表示,這是一個快速、可擴展、可投入生產的靈活而強大的平臺。
Keras的作者François Chollet甚至說:“TensorFlow 2.0是一個來自未來的機器學習平臺,它改變了一切。”
在默認的eager execution模式下,TensorFlow 2.0能提供PyTorch eager模式下的大部分有點,比如易用性、可調試性等。
并且,針對TensorFlow的API過于復雜這個問題,2.0版本也提供了更易用的API。模型的訓練和serving都無縫集成在了基礎框架中。
PyTorch這邊,2018年底引入了JIT編譯器和“TorchScript”,增加圖形功能。
就在今天,PyTorch 1.3發布,新增移動端部署、量化和命名張量等功能。
機器學習框架未來的游戲規則會如何改變,還真令人期待呢。
FB谷歌雙料實習生
最后,介紹下這份詳細報告的作者:

Horace He,來自康奈爾大學,是2016年入學的本科生。
自從上了大學,他每個暑假都在大廠實習:2017年是Facebook實習軟件工程師,2018年是谷歌的實習軟件工程師,2019年在Facebook做PyTorch實習生。
另外,少年還是VSCodeVim (標星6.2k) 的主要貢獻者之一:
那么,TensorFlow和PyTorch,你會pick誰?