主流深度學習框架對比(TensorFlow、Keras、MXNet、PyTorch)


主流深度學習框架對比(TensorFlow、Keras、MXNet、PyTorch)

近幾年來,深度學習的研究和應用的熱潮持續高漲,各種開源深度學習框架層出不窮,包括 TensorFlow,Keras,MXNet,PyTorch,CNTK,Theano,Caffe,DeepLearning4,Lasagne,Neon,等等。Google,Microsoft 等商業巨頭都加入了這場深度學習框架大戰,當下最主流的框架當屬 TensorFlow,Keras,MXNet,PyTorch,接下來我對這四種主流的深度學習框架從幾個不同的方面進行簡單的對比。

一、 簡介

TensorFlow:

TensorFlow 是 Google Brain 基於 DistBelief 進行研發的第二代人工智能學習系統,其命名來源於本身的運行原理,於 2015 年 11 月 9 日在 Apache 2.0 開源許可證下發布,並於 2017 年 12 月份預發布動態圖機制 Eager Execution。
Keras:
Keras 是一個用 Python 編寫的開源神經網絡庫,它能夠在 TensorFlow,CNTK,Theano 或 MXNet 上運行。旨在實現深度神經網絡的快速實驗,它專注於用戶友好,模塊化和可擴展性。其主要作者和維護者是 Google 工程師 FrançoisChollet。
MXNet:
MXNet 是 DMLC(Distributed Machine Learning Community)開發的一款開源的、輕量級、可移植的、靈活的深度學習庫,它讓用戶可以混合使用符號編程模式和指令式編程模式來最大化效率和靈活性,目前已經是 AWS 官方推薦的深度學習框架。MXNet 的很多作者都是中國人,其最大的貢獻組織為百度。
PyTorch:
PyTorch 是 Facebook 於 2017 年 1 月 18 日發布的 python 端的開源的深度學習庫,基於 Torch。支持動態計算圖,提供很好的靈活性。在今年(2018 年)五月份的開發者大會上,Facebook 宣布實現 PyTorch 與 Caffe2 無縫結合的 PyTorch1.0 版本將馬上到來。
有關四個框架的一些基本屬性的比較如表 1-1 所示:

img

表 1-1 各個框架的相關屬性

二、 流行度

四個深度學習庫均為開源,我們可以通過其在 Github 上的數據看出他們在行業中的流行程度,截止到 2018 年 6 月 17 日 Github 上數據如表 2-1、表 2-2 所示。

img

表 2-1

img

表 2-2

三、 靈活性

TensorFlow 主要支持靜態計算圖的形式,計算圖的結構比較直觀,但是在調試過程中十分復雜與麻煩,一些錯誤更加難以發。但是 2017 年底發布了動態圖機制 Eager Execution,加入對於動態計算圖的支持,但是目前依舊采用原有的靜態計算圖形式為主。TensorFlow 擁有 TensorBoard 應用,可以監控運行過程,可視化計算圖。
Keras 是基於多個不同框架的高級 API,可以快速的進行模型的設計和建立,同時支持序貫和函數式兩種設計模型方式,可以快速的將想法變為結果,但是由於高度封裝的原因,對於已有模型的修改可能不是那么靈活。
MXNet 同時支持命令式和聲明式兩種編程方式,即同時支持靜態計算圖和動態計算圖,並且具有封裝好的訓練函數,集靈活與效率於一體,同時已經推出了類似 Keras 的以 MXNet 為后端的高級接口 Gluon。
PyTorch 為動態計算圖的典型代表,便於調試,並且高度模塊化,搭建模型十分方便,同時具備及其優秀的 GPU 支持,數據參數在 CPU 與 GPU 之間遷移十分靈活

四、 學習難易程度

對於深度學習框架的學習難易程度以及使用的簡易度還是比較重要的,我認為應該主要基於框架本身的語言設計、文檔的詳細程度以及科技社區的規模考慮。對於框架本身的語言設計來講,TensorFlow 是比較不友好的,與 Python 等語言差距很大,有點像基於一種語言重新定義了一種編程語言,並且在調試的時候比較復雜。每次版本的更新,TensorFlow 的各種接口經常會有很大幅度的改變,這也大大增加了對其的學習時間;Keras 是一種高級 API,基於多種深度學習框架,追求簡潔,快速搭建模型,具有完美的訓練預測模塊,簡單上手,並能快速地將所想變現,十分適合入門或者快速實現。但是學習會很快遇到瓶頸,過度的封裝導致對於深度學習知識的學習不足以及對於已有神經網絡層的改寫十分復雜;MXNet 同時支持命令式編程和聲明式編程,進行了無縫結合,十分靈活,具備完整的訓練模塊,簡單便捷,同時支持多種語言,可以減去學習一門新主語言的時間。上層接口 Gluon 也極其容易上手;PyTorch 支持動態計算圖,追求盡量少的封裝,代碼簡潔易讀,應用十分靈活,接口沿用 Torch,具有很強的易用性,同時可以很好的利用主語言 Python 的各種優勢。對於文檔的詳細程度,TensorFlow 具備十分詳盡的官方文檔,查找起來十分方便,同時保持很快的更新速度,但是條理不是很清晰,教程眾多;Keras 由於是對於不同框架的高度封裝,官方文檔十分詳盡,通俗易懂;MXNet 發行以來,高速發展,官方文檔較為簡單,不是十分詳細,存在讓人十分迷惑的部分,框架也存在一定的不穩定性;PyTorch 基於 Torch 並由 Facebook 強力支持,具備十分詳細條理清晰的官方文檔和官方教程。對於社區,龐大的社區可以推動技術的發展並且便利問題的解決,由 Google 開發並維護的 TensorFlow 具有最大社區,應用人員團體龐大;Keras 由於將問題實現起來簡單,吸引了大量研究人員的使用,具有很大的用戶社區;MXNet 由 Amazon,Baidu 等巨頭支持,以其完美的內存、顯存優化吸引了大批用戶,DMLC 繼續進行開發和維護;PyTorch 由 Facebook 支持,並且即將與 Caffe2 無縫連接,以其靈活、簡潔、易用的特點在發布緊一年多的時間內吸引了大量開發者和研究人員,火爆程度依舊在不斷攀升,社區也在不斷壯大。

五、 性能

為了比較四個框架的性能(主要是運行速度),我進行了三個不同的實驗,對於不同的神經網絡以及不同類型的數據集在分別在 CPU、GPU 環境下進行了測試。
CPU 環境:Ubuntu14.04 內存 32GB AMD Opteron(tm) Processor 4284
GPU 環境 1:Ubuntu16.04 內存 32GB Quadro P2000(5GB 顯存)
Intel(R) Xeon(R) CPU E5-2637 v4 @ 3.50GHz
GPU 環境 2:Ubuntu16.04 內存 16GB Tesla K40(12GB 顯存)
Intel(R) Xeon(R) CPU E5-2650 v3 @ 2.30GHz
代碼地址:https://github.com/CircleXing001/DL-tools
以下實驗時間均為總訓練時間,GPU 環境下包括數據由內存復制到 GPU 的時間,不包括數據讀入內存所需的時間。

實驗一:基於北京 pm2.5 數據集的多變量時序數據預測問題

數據集:https://archive.ics.uci.edu/ml/datasets/Beijing+PM2.5+Data
模型:簡單的單層 LSTM + 全連接層,如下圖所示:

img

進行訓練 50epoches,實驗結果如表 5-1 所示:

img

表 5-1
實驗二:基於 Mnist 數據集的分類問題
模型:兩層卷積神經網絡 + 全連接層,如下圖所示:

img

進行訓練 10epoches,實驗結果如表 5-2 所示:

img

表 5-2
實驗三:基於 DAQUAR 數據集的視覺問答問題
數據集:https://www.mpi-inf.mpg.de/departments/computer-vision-and-multimodal-computing/research/vision-and-language/visual-turing-challenge/
模型:卷積神經網絡 + LSTM,具體如下圖所示:

img

將數據縮放至 50*50,進行訓練 5epoches,實驗結果如表 5-3 所示:

img

表 5-3
在 GPU 環境 2(Ubuntu16.04 + 內存 16GB +Tesla K40(12GB 顯存)+
Intel(R) Xeon(R) CPU E5-2650 v3 @ 2.30GHz)
對上述實驗三中 224*224 數據進行實驗,對比四種框架對於硬件(GPU)的利用率,結果見表 5-4。

img

表 5-4
通過上述實驗我們可以發現,不同的深度學習框架對於計算速度和資源利用率的優化存在一定的差異:Keras 為基於其他深度學習框架的高級 API,進行高度封裝,計算速度最慢且對於資源的利用率最差;在模型復雜,數據集大,參數數量大的情況下,MXNet 和 PyTorch 對於 GPU 上的計算速度和資源利用的優化十分出色,並且在速度方面 MXNet 優化處理更加優秀;相比之下,TensorFlow 略有遜色,但是對於 CPU 上的計算加速,TensorFlow 表現更加良好。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM