來勢洶洶PyTorch!ICLR論文提及頻率直追TensorFlow(附對比)
機器之心報道,作者:思源、李亞洲。
昨日,Facebook 在首屆 PyTorch 開發者大會發布了PyTorch1.0 預覽版,標誌著這一框架更為穩定可用。從去年年初發布以來,PyTorch 已經成為明星框架,發展速度甚至有力壓 TensorFlow 的趨勢。據網友統計,在最新的 ICLR 2019 提交論文中,提及 TensorFlow 的論文數量從 228 升到了 266,而提及 PyTorch 的論文數量從 2018 年的 87 激增到了 252,這是否也是 PyTorch 即將趕超 TensorFlow 的又一證明?
ICLR 提交論文提及頻率
今日,Reddit 上的一條帖子吸引了大家的關注:有網友統計,相比於 2018 年,在 ICLR 2019 提交論文中,提及不同框架的論文數量發生了極大變化。
首先,說下 2018 年和 2019 年論文提交數量。ICLR 2019 將於明年 5 月 6 日-9 日在美國新奧爾良舉行,今年 9 月 27 日下午 18 時,大會論文提交截止。據統計,ICLR 2019 共收到 1591 篇論文投稿,相比去年的 1000 餘篇增長了 60%。
其次,介紹下統計方法,相當簡單。在 Frankensteinian search 搜尋框下分別搜尋提及不同框架的論文結果,如下:

網友發現,提及 TensorFlow 的論文數量從 2018 年的 228 篇略微提升到了 266 篇,Keras 從 42 升到 56,但 Pytorch 的數量從 87 篇提升到了 252 篇。從資料上可以明顯看出,採用 PyTorch 的 ICLR 論文在這一年內幾乎要超越 TensorFlow。
- TensorFlow:228→266
- Keras: 42→56
- Pytorch:87→252
在 PyTorch 1.0 推出之際,這樣的資料統計讓我們不得不聯想到:TensorFlow 的深度學習框架霸主地位是否還保得住?既然 PyTorch 1.0 預覽版已經發布,那麼讓我們再把兩個框架放在一起對比下,看哪一款才是適合你的深度學習框架。
TensorFlow VS PyTorch
自 2015 年開源以來,深度學習框架的天下就屬於 TensorFlow。不論是 GitHub 的收藏量或 Fork 量,還是業界使用量都無可比擬地位列第一。

但是 TensorFlow 有一個令人詬病的劣勢,即它和 Theano 一樣採用的是靜態計算圖,這令神經網路的搭建和入門學習都變得更加困難。因此在 2017 年 1 月,Torch7 團隊開源了 PyTorch,它的宗旨是儘可能令深度學習建模更加簡單。

其實機器之心在很多對比文章中都發現 TensorFlow 的使用在目前來說還是最為廣泛的,但是 PyTorch 的發展勢頭非常迅猛,尤其是在學術研究領域的應用上。那麼為什麼新近開源的 PyTorch 會那麼受歡迎呢,首先我們需要了解深度學習框架的關鍵點:
- 易於構建大型計算圖
- 易於在計算圖中進行梯度運算
- 能在 GPU 上高效執行(cuDNN、cuBLA 等)
在後兩項中,基本上 TensorFlow 和 PyTorch 都能實現高效的自動微分機制和並行運算機制。但是在第一項中,PyTorch 的哲學是解決當務之急,也就是說即時構建和執行計算圖,這與 TensorFLow 先建立靜態計算圖再發生實際運算相比要簡單地多。因此在第一項上,PyTorch 具備很大優勢,但是 TensorFlow 的靜態計算圖更有利於部署模型,且現在同樣也非常關注動態計算圖。
工業化的缺陷
PyTorch 最開始釋出以來,大家都偏向於使用它做學術研究,而不是用於實際生產。主要的原因可能有兩點:首先它比較新,還不太成熟,因此很多 API 介面和結構也都不太穩定;其次是動態計算圖在部署上不太方便,而像 TensorFlow 這樣的靜態圖可以在不同的環境下呼叫計算圖和對應引數,因此很容易部署到各種產品中。
由於 PyTorch 與 Python 有著緊密的結合,因此將這種動態計算圖部署到其它產品會比較困難。不論是訓練指令碼還是預訓練模型,我們經常需要將研究程式碼轉換為 Caffe2 中的計算圖表徵,從而實現生產規模上的高效使用。其中 Caffe2 專案是兩年前提出的,其目的是標準化 AI 模型的生產工具,目前該框架在 Facebook 伺服器以及超過 10 億臺手機上執行,橫跨了八代 iPhone 和六代安卓 CPU 架構。
之前,從 PyTorch 到 Caffe2 的遷移過程是手動的,耗時間且容易出錯。為了解決這個問題,Facebook 與主要的硬體和軟體公司合作建立了 ONNX(開放神經網路交換格式),這是一種用於表示深度學習模型的開放格式。通過 ONNX,開發者能在不同的框架間共享模型,例如我們可以匯出由 PyTorch 構建的模型,並將它們匯入到 Caffe2。
通過 ONNX 和 Caffe2,使用 PyTorch 構建的研究結果可以快速地轉化到生產中。而且昨日釋出的 PyTorch 1.0 預覽版也標誌著 PyTorch 開始走向成熟,很多 API 介面和框架結構也都會變得更加穩定,這些都非常有利於將 PyTorch 應用於實際生產中。
效能對比
這兩種深度學習框架都有各自的特點,那麼它們在相同硬體(GPU)上執行相同神經網路的效能又怎麼樣?Ilia Karmanov 在 GitHub 上開源了一項測試,他在相同的環境下測試由不同框架編寫的相同模型,並藉此討論不同框架的效能。從這些資料中,我們可以瞭解到在效能上,TensorFlow 和 PyTorch 並不會有顯著的差別,不過在特定的任務上還是有一些不同。
專案地址: ofollow,noindex"> https:// github.com/ilkarman/Dee pLearningFrameworks
以下展示了使用 VGG 在 CIFAR-10 上實現影象分類的速度:

以下展示了 DenseNet-121 在 ChestXRay 資料集上的訓練速度,在這個影象識別任務中,PyTorch 要比 TensorFlow 表現得更好一些:

如下展示了在 IMDB 資料集上訓練門控迴圈單元(GRU)的速度,它們實現的是情感分析任務。對於迴圈神經網路,PyTorch 和 TensorFlow 的效能差不多,不過 PyTorch 在 P100 晶片上普遍表現得比 TensorFlow 好。

該專案還有更多的對比與分析,感興趣的讀者可檢視原 GitHub 專案。
