TensorFlow VS PyTorch的深度學習框架之爭

2020-09-15 子沐老司

前言

對於廣大深度學習行業從業者而言,熟練掌握一種或多種深度學習框架,是日常煉丹的必備技能之一。深度學習框架市場經歷了早期的混亂之後,逐漸形成了以 TensorFlow 和 PyTorch 兩家獨大的市場格局。


2019年各深度學習框架的綜合得分對比

從上圖可以看到,雖然過去一年之中PyTorch 發展勢頭迅猛,但 TensorFlow 仍然牢牢佔據市場頭名。隨著2.0版本將 Keras 作為前端框架進行集成,TensorFlow 在未來相當長一段時間內都會作為老大哥而存在。

回顧過去兩年 TensorFlow 和 PyTorch 的發展特點來看,TensorFlow 雖然由於各種原因在丟失一些市場份額,但在工業界落地中仍然是當仁不讓的選擇。但在學術論文和研究領域,PyTorch 卻逐漸佔據主導地位。


就國內而言,這兩年深度學習市場的一個顯著特徵是,國產深度學習框架開始多了起來。百度的飛槳、曠視的天元、清華的計圖以及華為的MindSpore等。在世界範圍內深度學習框架競爭趨於穩定的情況下,國產框架能在這兩年集中爆發,不得不說是一個令人欣慰的現象。

PyTorch在學術界佔主導地位

我們通過實際數據來看一下。下圖顯示了在近些年的研究頂會中,僅僅使用了 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 確實需要對未來發展緊張起來。

為什麼研究人員青睞 PyTorch?

  • 簡潔性。PyTorch 與 numpy 很相似,具有很強的 python 風格,並且很容易與 Python 生態系統中的其它組件實現集成。例如,你可以簡單地在 PyTorch 模型中的任何地方添加「PDB」斷點,然後就可以進行調試。在 TensorFlow 框架中,想要進行程序調試就需要一個運行中的會話,這使得調試難以進行。
  • 易用的應用程式接口(API)。相較於 TensorFlow 的 API,大多數研究人員更喜歡 PyTorch 提供的 API。這在一定程度上是由於 PyTorch 的設計更好,另一方面是因為 TensorFlow 需要多次切換 API(例如,「layers」->「slim」->「estimators」->「tf.keras」)從而限制了自己的易用性。
  • 卓越的性能。儘管 PyTorch 的動態圖留給我們優化的機會很少,但是已經有很多有趣的報導說明 PyTorch 的運行速度和 TensorFlow 一樣快(參考連結: ),甚至更快(參考連結:)。目前尚不清楚這種說法是否屬實,但至少,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 就並非如此了。

TensorFlow仍然是工業落地首選

雖然 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% 對於研究人員來說基本沒有意義,但這可以直接為公司節約數百萬美元的成本。

另一個區別是部署。研究人員將在他們自己的機器或某個專門用於運行研究工作的伺服器集群上進行實驗。另一方面,工業界在部署方面則有一連串的限制/要求:

  • 不能使用 Python。對於一些公司運行的伺服器來說,Python 運行時的計算開銷太大了。
  • 移動性。你不能在移動端的二進位文件中嵌入 Python 解釋器。
  • 服務性。需要滿足各種需求,例如在不停機的狀態下更新模型、在模型之間無縫切換、在推理時進行批處理,等等。

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利用元算子組合表達的優勢,提出統一計算圖進行優化,並從底層開始設計了一個全新的動態編譯架構。該架構支持多種編譯器,實現了所有代碼的即時編譯和動態運行,確保了實現和優化分離,大幅提升了應用開發靈活性、可拓展性和可移植性。


相關焦點

  • TensorFlow與PyTorch之爭,哪個框架最適合深度學習
    選自builtin作者:Vihar Kurama機器之心編譯參與:吳攀、杜偉谷歌的 Tensorflow 與 Facebook 的 PyTorch 一直是頗受社區歡迎的兩種深度學習框架。那麼究竟哪種框架最適宜自己手邊的深度學習項目呢?
  • tensorflow和python的關係_tensorflow與pytorch的區別
    打開APP tensorflow和python的關係_tensorflow與pytorch的區別 網絡整理 發表於 2020-12-04 14:54:47
  • 寫給純小白的深度學習環境搭建寶典:pytorch+tensorflow
    每天給小編五分鐘,小編用自己的代碼,讓你輕鬆學習人工智慧。本文將手把手帶你快速搭建你自己的深度學習環境,然後實現自己的第一個深度學習程序。野蠻智能,小白也能看懂的人工智慧。如果你對循環神經網絡的基本原理還不了解,可以通過小編的精講深度學習RNN三大核心點,三分鐘掌握循環神經網絡進行簡單了解。下面進入實戰環節。
  • 2020,PyTorch真的趕上TensorFlow了嗎?
    2020:PyTorch 頂會獨領風騷,職場優勢追趕 TensorFlow轉眼到了 2020 年,框架之爭只剩下 PyTorch 和 TensorFlow 兩個實力玩家。所以這次,作者把調研的全部精力都放在了這兩個框架上。在這次調研進行時,兩個框架已經越來越像了,即出現了「融合」趨勢。
  • PyTorch稱霸頂會:CVPR論文佔比是TensorFlow 4 倍
    機器之心報導參與:杜偉在開源框架領域,PyTorch 與 TensorFlow 之爭一直存在,研究人員在寫論文時也會有不同的偏向。自 2009 年深度學習再度成為焦點以來,很多機器學習框架成為研究者和業界開發者的新寵。從早期的學術框架 Caffe、Theano 到如今 Pytorch、TensorFlow 這樣越來越大規模的開發框架。
  • 深度學習框架tensorflow之環境搭建
    深度學習的tensorflow框架是目前最流行的一種框架。本文先就環境搭建做一介紹。tensorflow的運行語言主要是python,所以電腦上要首先安裝python,推薦直接安裝anaconda,因為anaconda帶了很多tensorflow需要使用的python數學的運算庫,如果自己安裝,可能會遇到各種依賴問題,安裝好了anoconda,後面安裝tensorflow就非常簡單。1.
  • TensorFlow、PyTorch、Keras:NLP框架哪家強
    TensorFlow· 開發者:Google· 2017年1月發布1.0版本PyTorch· 開發者:Facebook· 2018年10月發布1.0版本· 基於Torch開發(Torch是基於Lua開發的另一個深度學習框架)Keras· 是一個高級API,降低了深度學習框架的複雜程度
  • PyTorch稱霸學界,TensorFlow固守業界,ML框架之爭將走向何方?
    選自The Gradient作者:Horace He機器之心編譯參與:張倩、鄭麗慧2019 年,ML 框架之爭只剩兩個實力玩家:PyTorch 和 TensorFlow。研究者大批湧向 PyTorch,而業界的首選仍然是 TensorFlow。未來,誰能在 ML 框架之爭中迎來「高光時刻」?
  • 掌握深度學習,為什麼要用 PyTorch、TensorFlow 框架?
    另一方面,在某些情況下,深度學習或深度遷移學習可以幫助你訓練更準確的模型。在這些情況下,你可以考慮使用PyTorch和TensorFlow,特別是如果你所需的訓練模型與其中一個框架模型庫中的模型類似。PyTorchPyTorch建立在舊版的Torch和Caffe2框架之上。
  • 2019 年機器學習框架之爭:PyTorch 和 TensorFlow 誰更有勝算?
    雷鋒網 AI 科技評論按:對於機器學習科研工作者和工業界從業人員來說,熟練掌握一種機器學習框架是必備技能之一。隨著深度學習技術發展的突飛猛進,機器學習框架市場也漸漸度過了初期野蠻生長的階段。大浪淘沙,目前仍然活躍的機器學習框架主要是 PyTorch 和 TensorFlow。本文從學術界和工業界兩個方面深度盤點了 2019 年機器學習框架的發展趨勢。
  • 從Google Trends,看各大深度學習框架使用熱度
    雷鋒網 AI 科技評論按,隨著深度學習在計算機視覺、自然語言處理等領域取得的成果越來越顯著,對深度學習的討論越來越多。作為當下最熱門的話題,從 2015 年至今,短短三年時間,谷歌、Facebook、微軟等國外巨頭,百度、小米等國內企業,前後圍繞深度學習推出一系列開源框架。
  • 「決戰紫禁之巔」之深度學習框架篇:Keras VS PyTorch
    選自towardsdatascience作者:George Seif機器之心編譯參與:杜偉、一鳴Keras和PyTorch之爭由來已久。一年前,機器之心就曾做過此方面的探討:《Keras vs PyTorch:誰是「第一」深度學習框架?》。
  • Anaconda及tensorflow、pytorch安裝記
    channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forgeconda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/34;-i 源地址"):pip install tensorflow-gpu
  • pytorch深度學習一
    pytorch最近正在學習深度學習相關的課程,近幾年深度學習可謂十分火熱,不論是在工業界還是學術界都想往深度學習上靠一靠,甚至是在隔壁的機械學院都有很多實驗室研究深度學習,近期也是實驗室的要求,我也要完成學習pytorch
  • 深度學習-Pytorch框架及常用代碼段學習
    前言:之前一直用的是tensorflow和keras,沒有接觸過Pytorch,但是最近因為項目需求,必須要使用Pytorch,於是從娃娃抓起,從頭學習下Pytorch,做點筆記以便日後查詢。對於筆者而言,學習某個深度學習框架,最好的資料是官方所給文檔,pytorch也是如此,官方文檔連結如下:https://pytorch.org/docs/stable/index.html一、基本設置篇主要包括一些版本號查詢,基本包的導入,顯卡設置等,如有遺漏之處,煩請指出。
  • 從零開始搭建深度學習伺服器:TensorFlow + PyTorch + Torch
    本教程轉載於深度學習中文社區(studydl.com).在深度學習大行其道的今天,我們不應該停留於觀望的階段,我們應該多多上手進行實踐,下面將為大家介紹一下最簡單也是最基礎的內容,配置一個自己的深度學習伺服器.1.
  • 深度學習/目標檢測——pytorch基礎(一)
    選擇合適的工具是進行學習研究的重要基礎。隨著這些年深度學習、目標檢測技術的發展,越來越多的公司開始提供深度學習的框架,國內百度和華為相繼發布了paddle和mindspore框架。但要說這兩年發展最快的框架,那還的是facebook的pytorch。
  • 深度學習:盤點全球的深度學習框架「Tensorflow、Pytorch」勝出
    深度學習在人工智慧技中的表現尤為的突出,想要學習深度學習,首先需要掌握一個有效的深度學習框架,這篇文章將盤點目前全球流行的深度學習框架,從框架的流行程度、應用場景出發,來提高大家對深度學習框架的認識。主流深度學習框架的活躍度01一、TensorFLow框架Tensorflow由Google在2015
  • TensorFlow vs PyTorch:哪個是深度學習網絡編程的最佳框架呢?
    matplotlib.pyplot as pltepochs = 10batch_size=64對於TensorFlow,您僅需要以下庫:import tensorflow as tf而對於實際上,在過去兩年中,這兩個框架一直在不斷融合,相互學習。例如,在發布的TensorFlow 2.2的新版本中,訓練步驟可以等同於PyTorch,現在程式設計師可以通過實現traint_step()來指定循環體的詳細內容。所以不要擔心選錯了框架。最重要的是要學習他們背後的深度學習概念,您在其中一個框架中獲得的知識在另一個框架中仍然有用。
  • 一行代碼切換TensorFlow與PyTorch,模型訓練也能用倆框架
    機器之心報導參與:思源你是否有時要用 PyTorch,有時又要跑 TensorFlow?這個項目就是你需要的,你可以在訓練中同時使用兩個框架,並端到端地轉換模型。也就是說 TensorFlow 寫的計算圖可以作為某個函數,直接應用到 Torch 的張量上,這操作也是很厲害了。