對於廣大深度學習行業從業者而言,熟練掌握一種或多種深度學習框架,是日常煉丹的必備技能之一。深度學習框架市場經歷了早期的混亂之後,逐漸形成了以 TensorFlow 和 PyTorch 兩家獨大的市場格局。
2019年各深度學習框架的綜合得分對比
從上圖可以看到,雖然過去一年之中PyTorch 發展勢頭迅猛,但 TensorFlow 仍然牢牢佔據市場頭名。隨著2.0版本將 Keras 作為前端框架進行集成,TensorFlow 在未來相當長一段時間內都會作為老大哥而存在。
回顧過去兩年 TensorFlow 和 PyTorch 的發展特點來看,TensorFlow 雖然由於各種原因在丟失一些市場份額,但在工業界落地中仍然是當仁不讓的選擇。但在學術論文和研究領域,PyTorch 卻逐漸佔據主導地位。
就國內而言,這兩年深度學習市場的一個顯著特徵是,國產深度學習框架開始多了起來。百度的飛槳、曠視的天元、清華的計圖以及華為的MindSpore等。在世界範圍內深度學習框架競爭趨於穩定的情況下,國產框架能在這兩年集中爆發,不得不說是一個令人欣慰的現象。
我們通過實際數據來看一下。下圖顯示了在近些年的研究頂會中,僅僅使用了 PyTorch 框架進行研究的論文數和使用了 TensorFlow 或 PyTorch 的論文總數的比例。如圖所示,每條曲線(代表不同的會議)都向上傾斜(意味著 PyTorch 的佔比越來越高),而且在 2019 年的每個主要的會議中,大多數的論文都採用 PyTorch 實現。
會議的圖例
如果你需要更多的證據來說明 PyTorch 在研究社區中獲得關注的速度有多快,請看下面關於 PyTorch 和 TensorFlow 使用情況的原始統計圖。
在 2018 年,PyTorch 在深度學習框架中的佔比還很小。而現在,PyTorch 已成佔據壓倒性比重的多數。據統計:69% 的 CVPR 論文、75% 以上的 NAACL 和 ACL 論文,以及 50% 以上的 ICLR 和 ICML 論文都選擇使用 PyTorch。PyTorch 在視覺和語言類的會議上(分別以 2:1 和 3:1 的比例超過了 TensorFlow)被使用的頻繁度最為明顯,而且 PyTorch 在ICLR 和ICML 等通用機器學習會議上也比 TensorFlow 更受歡迎。
雖然有些人認為 PyTorch 仍然是一個處於萌芽期的框架,試圖在 TensorFlow 主導的世界中開闢出一片市場,但真實的數據卻說明事實並非如此。除了在 ICML 上,其它學術會議中使用 TensorFlow 的論文的增長率甚至還趕不上整體論文數量的增長率。在 NAACL、ICLR 和 ACL 上,今年使用 TensorFlow 的論文數量實際上比去年還少。這麼看來,TensorFlow 確實需要對未來發展緊張起來。
即使 TensorFlow 在功能方面與 PyTorch 的水平差不多,但是 PyTorch 已經擁有了研究社區中的大多數用戶。這意味著我們更容易找到 PyTorch 版本的算法實現,而作者也會更有動力發布 PyTorch版本的代碼(這樣人們就會使用它),而你的合作者們很可能也更喜歡 PyTorch。因此,如果將代碼移植回 TensorFlow 2.0 平臺,這將會是一個很漫長的過程(如果真的這麼做了)。
TensorFlow 在 Google/DeepMind 內部總會有一批固定的用戶,但我不知道 Google 最終是否會放開這一點。即使是現在,很多 Google 想要招募的研究人員已經在不同程度上更加青睞 PyTorch 了。我也聽到了一些抱怨,很多 Google 內部的研究人員希望使用 TensorFlow 以外的框架。
此外,PyTorch 的統治地位可能會開始切斷 Google 研究人員與其它研究社區之間的聯繫。不僅 Google的研究人員將更加難以在他人研究的基礎上構建自己的工作,而且外部的研究人員也不太可能基於 Google 發布的代碼開展工作。
TensorFlow 2.0 是否能夠為 TensorFlow 挽回一部分研究人員用戶還有待觀察。儘管它的動態圖模式(TensorFlow 2.0 的動態圖模式)一定很吸引人,但是 Keras 的 API 就並非如此了。
雖然 PyTorch 現在在研究領域佔據主導地位,但是我們快速分析一下工業界的情況就會發現,在工業界 TensorFlow 仍然是主流的框架。例如,2018 年到 2019 年的數據顯示,在公開招聘網站上,涉及 TensorFlow 的新招聘信息有 1541 個,而涉及 PyTorch 最新招聘信息則是 1437 個;知名科技媒體「Medium」上有 3230 篇關於 TensorFlow 的新文章,而關於 PyTorch 的新文章只有 1200 篇;在 GitHub 上,用 TensorFlow 編寫的項目獲得了 13700 顆星,而用 PyTorch 編寫的項目只獲得了 7200 顆星。
那麼,既然 PyTorch 在研究人員中是如此受歡迎,為什麼它在工業界還沒有取得同樣的成功呢?第一個顯而易見的答案就是:慣性。TensorFlow 比 PyTorch 早誕生數年,而且工業界採用新技術的速度比研究人員要慢一些。另一個原因是:TensorFlow 比 PyTorch 更適用於生產環境。但這意味著什麼呢?
要想回答這個問題,我們需要知道研究人員和工業界的需求有何不同。
研究人員關心的是他們在研究中迭代的速度有多快,這通常是在相對較小的數據集(可以在一臺機器上運行的數據集)上、使用少於 8 個 GPU 進行的。最大的限制因素往往不是出於性能的考慮,而是他們快速實現新思路的能力。相反,工業界認為性能是需要最優先考慮的。雖然運行時的速度提升 10% 對於研究人員來說基本沒有意義,但這可以直接為公司節約數百萬美元的成本。
另一個區別是部署。研究人員將在他們自己的機器或某個專門用於運行研究工作的伺服器集群上進行實驗。另一方面,工業界在部署方面則有一連串的限制/要求:
TensorFlow 是專門圍繞這些需求構建的,並為所有這些問題提供了解決方案:計算圖的版式和執行引擎本身並不需要Python,並且通過TensorFlow Lite 和 TensorFlow Serving 分別處理移動端和伺服器端的問題。
在此前,PyTorch 還不能夠很好地滿足上述需求,因此大多數公司目前在生產環境下都選擇使用 TensorFlow。但隨著 PyTorch 1.6版本的發布,對生產環境的支持也更加友好,相信 PyTorch 會逐漸在此方面縮小與 TensorFlow 的差距。
進入2020年,我們驚喜的發現,國內頂級科技公司和研究機構逐漸開始開源自己的深度學習計算框架。包括百度的PaddlePaddle、曠視的MegEngine、清華的Jittor、華為的MindSpore以及一流科技的OneFlow等。
作為國產深度學習框架的老大哥,飛槳(PaddlePaddle)以百度多年的深度學習技術研究和業務應用為基礎,是中國首個開源開放、技術領先、功能完備的產業級深度學習平臺,集深度學習核心訓練和推理框架、基礎模型庫、端到端開發套件和豐富的工具組件於一體。目前,飛槳累計開發者194萬,服務企業8.4萬家,基於飛槳開源深度學習平臺產生了23.3萬個模型。飛槳助力開發者快速實現AI想法,快速上線AI業務。幫助越來越多的行業完成AI賦能,實現產業智能化升級。
MegEngine 是 Brain++的核心組件,是與百度PaddlePaddle一樣的為開發者和研究人員提供開發的國產原創深度學習框架。而Brain++是曠視一個具備大規模算法研發能力的端到端解決方案。這該框架主要用於曠視內部進行計算機視覺領域的算法開發工作,包括大規模的圖像檢測、分割、識別任務等,因此在計算機視覺領域具備獨特的優勢。
MegEngine示例代碼:
import megengine as mgeimport megengine.functional as Fimport megengine.module as Mimport numpy as np 省略部分代碼... self.classifer = M.Linear(84, 10) 省略部分代碼... x = self.classifer(x) return x
我國人工智慧產業發展迅速,急需構建自己的開源深度學習生態。清華大學計算機系胡事民教授研究團隊提出了一個全新的深度學習框架——計圖(Jittor)。Jittor是一個採用元算子表達神經網絡計算單元、完全基於動態編譯(Just-in-Time)的深度學習框架。Jittor國內首個高校研究機構開源的深度學習框架。
深度學習採用的卷積神經網絡是由算子(Operator)組成的一個計算網絡。由於架構設計和不斷擴充等原因,當前深度學習框架有多達2000種算子,系統複雜,優化和移植困難。Jittor則將算子運算進一步分解,形成了更加底層的三類20餘種元算子閉包,目前神經網絡常用算子均可以使用元算子的組合進行表達。面向未來深度學習框架的發展趨勢,Jittor利用元算子組合表達的優勢,提出統一計算圖進行優化,並從底層開始設計了一個全新的動態編譯架構。該架構支持多種編譯器,實現了所有代碼的即時編譯和動態運行,確保了實現和優化分離,大幅提升了應用開發靈活性、可拓展性和可移植性。