TensorFlow、Keras、CNTK...到底哪種深度學習框架更好用?

2021-03-06 AI前線

作者 | 微軟 Cortana AI 和 ML 團隊 AI 前線導讀:社區裡流行的深度學習框架不少,但是 TensorFlow、Julia、CNTK... 到底哪種使用起來既方便又高效呢?微軟的 CortanaAI 和 ML 團隊對幾種主流的深度學習框架進行了比較,並在 GitHub 上開放了測試結果。那麼,測試的結果如何呢?

更多乾貨內容請關注微信公眾號「AI 前線」,(ID:ai-front)

https://github.com/ilkarman/DeepLearningFrameworks

我們認為深度學習框架就像語言一樣:當然,英語被很多人使用,但每種語言都有各自的用處。我們為幾種不同的框架創建了通用的代碼,並在許多不同的框架中使用這些語言。我們的想法,是創建一類似外語學習軟體 Rosetta Stone 的深度學習框架,讓人們自如地使用不同框架。當關於一種全新的框架代碼或語言論文發表時,就會出現問題,與其在你最喜歡的框架中從頭開始編寫模型,倒不如使用「外來」語言來得更容易。

在此,我們感謝 CNTK、Pytorch、Chainer、Caffe2 和 Knet 團隊,以及來自開源社區的所有朋友在過去幾個月為這個 repo 做出的貢獻。

總之,我們發布這個 repo 的目的在於創建:

一個深度學習框架的「Rosetta Stone」,它可以讓數據科學家輕鬆地將他們的專業知識應用到不同的框架中。

一套使用最新的最高級 API 優化過的 GPU 代碼。

一個對不同 GPU 進行比較的常見設置(可能為 CUDA 版本和精度)。

對不同語言進行比較的常用設置(Python、Julia、R)。

驗證自己所用框架的預期性能的可能。

不同開源社區之間的合作。

在下面的章節中,我們將回顧一下每種 CNN 模型的訓練時間,經過預訓練的 ResNet50 模型的特徵提取,以及每種 RNN 模型的訓練時間測試結果。我們的實驗在使用 K80 和更新的 P100 的 Azure 深度學習虛擬機上進行。

訓練時間(單位為秒):用 CIFAR-10 訓練 CNN(VGG 式,32 位)——圖像識別

該模型的輸入是包含 5 萬個訓練圖像和 1 萬個測試圖像的標準 CIFAR-10 數據集,被均勻地分成 10 個類。每張 32×32 圖像被設為張量(3,32,32),像素強度從 0-255 重新定為 0-1。

Caffe2:https://github.com/ilkarman/DeepLearningFrameworks/blob/master/notebooks/Caffe2_Inference.ipynb

Chainer:https://github.com/ilkarman/DeepLearningFrameworks/blob/master/notebooks/Chainer_Inference.ipynb

CNTK:https://github.com/ilkarman/DeepLearningFrameworks/blob/master/notebooks/CNTK_Inference.ipynb

Keras(CNTK):https://github.com/ilkarman/DeepLearningFrameworks/blob/master/notebooks/Keras_CNTK_Inference.ipynb

Keras(TF):https://github.com/ilkarman/DeepLearningFrameworks/blob/master/notebooks/Keras_TF_Inference.ipynb

Tensorflow:https://github.com/ilkarman/DeepLearningFrameworks/blob/master/notebooks/Tensorflow_Inference.ipynb

MXNet:https://github.com/ilkarman/DeepLearningFrameworks/blob/master/notebooks/MXNet_Inference.ipynb

PyTorch :https://github.com/ilkarman/DeepLearningFrameworks/blob/master/notebooks/PyTorch_Inference.ipynb

Julia –Knet:https://github.com/ilkarman/DeepLearningFrameworks/blob/master/notebooks/Knet_Inference.ipynb

1000 張圖像的平均測試時間(單位為秒):ResNet-50——特徵提取

當 avg 池化在(7,7)結束之後加載並截斷一個預先訓練好的 ResNet50 模型,輸出一個 2048D 維向量。在這裡可以插入 softmax 層或其他分類器(如提升樹)以進行遷移學習。考慮到熱啟動的因素,這個僅向前傳遞給 avg_pool 層的時間是定時的。

注意:批量大小保持不變,但是在 GPU 上填充 RAM 會進一步提高性能(優於具有更多內存的 GPU)。

訓練時間(單位為秒):IMDB 上的 RNN(GRU) ——情感分析

該模型的輸入是標準的 IMDB 電影評論數據集,其中包含 25000 個訓練評論和 25000 個測試評論,統一分為 2 個類別(正例 / 負例)。使用 Keras 的方法,其中起始字符被設置為 1,詞彙外(使用 30k 的詞彙大小)被表示為 2,詞索引從 3 開始。每個評論零填充 / 截斷到 150 字。

* 表示未進行實驗。

使用自動調整(auto-tune):大多數框架使用 cuDNN cudnnFindConvolutionForwardAlgorithm() 進行窮舉搜索,並優化用於固定尺寸圖像上卷積正向傳播的算法,通常這個選項是默認啟用的,但是一些框架可能需要手動標記,如 torch.backends.cudnn.benchmark=True 等標識。

儘可能多使用 cuDNN:對於 vanilla RNNs(例如 GRU/LSTM)通常可以調用 cuDNN wrapper(https://devblogs.nvidia.com/optimizing-recurrent-neural-networks-cudnn-5/)提高速度,例如,cudnn_rnn.CudnnGRU() 而不是 rnn.GRUCell()。但是這種方法的缺點是這會讓後期在 CPU 上進行推理變得更難。

Match shapes:在 cuDNN 上運行時,匹配 NCHW 的 CNNs 和 TNC 的 RNNs 通道順序會縮短調整時間,且用戶可以直接進行矩陣乘法。

本地生成器(Native generators):使用框架的本地生成器,通過線性進行異步增強甚至預處理(例如混排,shuffling),從而提高速度。

在推理階段,請確保在可能保存不必要梯度計算的地方做標記,並確保 batch-norm 和 dropout 層得到正確應用。

最初,我們創建此 repo 時必須使用許多小技巧和竅門來確保在框架之間使用的是一樣的模型,並且是以最優方式完成的。然而,過去幾個月內,這些框架以令人難以置信的速度發展,很多都已經更新了,因此我們許多在 2017 年得出的優化方法現如今已經過時。

例如,帶有 TF 後端的 Keras 通道排序硬編碼為 channels-last(對於 cuDNN 非最佳),因此指定優先通道意味著它會在每批次(硬編碼值)處理後重新進行調整,從而大大減緩訓練速度。現在,支持 TF 的 Keras 已經允許本地通道優先。我們可以通過指定一個標誌使用 Winograd 算法進行卷積來加速 Tensorflow,但這樣的方法已經不起作用了。有興趣的話可以查看我們早期的 repo 得出的結論。

通過在不同框架中完成端到端解決方案,可以用多種方式對不同框架進行比較。由於每個框架都使用相同的模型體系結構和數據,因此所有框架的準確性相差無幾(實際上,這是我們測試代碼的一種方式,以確保不同框架使用相同的模型!)另外,notebook 的開發方式讓我們可以輕鬆地對不同框架進行比較,而不一定在速度方面。

當然,雖然我們很容易從速度、推理時間等維度對不同的框架進行比較,但結果並不意味著框架的整體性能有任何問題,因為這種方法省略了重要維度之間的比較,例如:幫助和支持、預先訓練模型的可用性、自定義圖層和架構、數據加載器、調試、支持的不同平臺、分布式訓練等!這種方法僅展示了如何在不同的框架中創建相同的網絡,以及示例中框架的性能。

在社區中有很多流行的深度學習框架,它們幫助 AI 開發人員和數據科學家在各種情況下使用不同的深度學習框架解決問題。其中,開源的 Open Neural Network Exchange (ONNX,https://github.com/onnx/onnx)成為在不同框架之間應用深度學習模型互操作性的標準。例如,當你使用某一個框架進行模型開發,卻需要在另一個框架中評估這個模型時,ONNX 就會很有用。同樣,MMdnn (https://github.com/Microsoft/MMdnn)作為一組工具,可幫助用戶直接在不同框架之間進行轉換,並對模型體系結構進行可視化處理。

ONNX 和 MMdnn 等深度學習框架的「旅伴」就像一臺自動機器翻譯機。相比之下,我們今天發布的完整 1.0 版 repo 就像一個深度學習框架的 Rosetta Stone,展示了在不同框架之間構建模型的全過程。眾人拾柴火焰高,所有人的努力結合起來,就能使所有深度學習開發者能夠在多語言環境中更好地」暢遊「。

原文連結:

https://blogs.technet.microsoft.com/machinelearning/2018/03/14/comparing-deep-learning-frameworks-a-rosetta-stone-approach/

  想看更多這類文章, 請給我們點個讚吧!

相關焦點

  • Python安裝TensorFlow 2、tf.keras和深度學習模型的定義
    TensorFlow是Google開發和維護的首要的開源深度學習框架。儘管直接使用TensorFlow可能具有挑戰性,但現代的tf.keras API使得Keras在TensorFlow項目中的使用簡單易用。使用tf.keras,您可以設計,擬合,評估和使用深度學習模型,從而僅用幾行代碼即可做出預測。它使普通的深度學習任務(如分類和回歸預測建模)可供希望完成任務的普通開發人員使用。
  • 深度學習環境配置指南:Pytorch、TensorFlow、Keras
    導讀本文介紹了作者使用RTX3090進行深度學習環境配置pytorch、tensorflow、keras等的詳細過程及代碼。筆者中山大學研究生,醫學生+計科學生的集合體,機器學習愛好者。-7.2.1.4-cp36-none-linux_x86_64.whl tensorflow_estimator-1.15.1-py2.py3-none-any.whl nvidia_tensorboard-1.15.0+nv20.10-py3-none-any.whlnvidia_tensorflow-1.15.4+nv20.10-cp36-cp36m-linux_x86_64.whl -i http
  • 評測| CNTK在Keras上表現如何?能實現比TensorFlow更好的深度學習嗎?
    作者:Max Woolf機器之心編譯參與:Jane W、吳攀Keras 是由 Franois Chollet 維護的深度學習高級開源框架,它的底層基於構建生產級質量的深度學習模型所需的大量設置和矩陣代數。Keras API 的底層基於像 Theano 或谷歌的 TensorFlow 的較低級的深度學習框架。
  • RTX 3090 的深度學習環境配置指南:Pytorch、TensorFlow、Keras
    導讀本文介紹了作者使用RTX3090進行深度學習環境配置pytorch、tensorflow、keras等的詳細過程及代碼。筆者中山大學研究生,醫學生+計科學生的集合體,機器學習愛好者。-7.2.1.4-cp36-none-linux_x86_64.whl tensorflow_estimator-1.15.1-py2.py3-none-any.whl nvidia_tensorboard-1.15.0+nv20.10-py3-none-any.whlnvidia_tensorflow-1.15.4+nv20.10-cp36-cp36m-linux_x86_64.whl -i http
  • Keras和TensorFlow究竟哪個會更好?
    深度學習發展勢頭迅猛,但近兩年湧現的諸多深度學習框架讓初學者無所適從。如 Google 的 TensorFlow、亞馬遜的 MXNet、Facebook 支持的 PyTorch、Theano、Caffe、CNTK、Chainer、百度的 PaddlePaddle、DSSTNE、DyNet、BigDL、Neon 等等。
  • 《概率深度學習:使用Python,Keras和TensorFlow概率》附下載
    Probabilistic Deep Learning: With Python, Keras and TensorFlow Probability作者: Oliver Duerr出版日期: 2020ISBN: 9781617296079頁數: 252語言: English格式: PDF大小: 60 Mb概率性深度學習
  • TensorFlow 1.9 新增 tf.keras 官方入門教程(Keras與TF的深度集成)
    【導讀】Keras是深度學習框架中最適合工程化的框架之一,具有簡單友好的接口。
  • TensorFlow 2.0正式版官宣!深度集成Keras
    深度集成Keras,更簡單、更易用,GPU訓練性能提升。這是一個革命性的新版本,歡迎來到 TensorFlow 2.0!>>>人工智慧改變中國,我們還要跨越這三座大山 | 獻禮 70 周年 TensorFlow 2.0正式版終於發布了!
  • 基於RTX2060構建TensorFlow-gpu(keras)學習平臺
    開始菜單運行anaconda navigator檢查是否安裝了notebook(默認有安裝)三、安裝tensorflow/keras在激活的環境中安裝:1. 如果機器上有gpu,則安裝gpu版本,沒有GPU就安裝cpu版。
  • 從Fashion-Mnist開始,入門Tensorflow與深度學習
    從今天開始,我們進行機器學習領域的最後一塊拼圖——深度學習的學習之旅,以及Tensorflow這個工具的使用。從這個方面來說,深度學習是計算機科學與神經科學/認知科學的交叉;而Data Mining 強調的是通過大數據、統計數學分析來挖掘數據中的規律,是計算機和統計學的交叉。    在接下來的幾周中,我們將帶著大家學習深度學習中的常用網絡結構,我們用到的工具是Tensorflow。
  • MIT 深度學習基礎教程:七個基本框架TensorFlow代碼實戰
    【導讀】麻省理工學院發布一系列深度學習視頻課和代碼實戰,今天給大家介紹的是研究科學家Lex Fridman整理的常用的深度學習七個基本框架實戰,
  • 在Windows中安裝Tensorflow和Kears深度學習框架
    建立Tensorflow的Anaconda虛擬環境在一臺計算機中,我們常常需要安裝很多軟體,但是每個軟體所需要的Python的關聯模塊或版本不相同。例如,我們要使用Python開發開發網站系統,安裝的網站框架可能需要Python2.X的版本,但是安裝Tensorflow需要Python3.5的版本,此時就會發生版本不一致的問題。
  • 圖像分類任務中,Tensorflow 與 Keras 到底哪個更厲害?
    有人說TensorFlow更好,有人說Keras更好。讓我們看看這個問題在圖像分類的實際應用中的答案。在此之前,先介紹Keras和Tensorflow這兩個術語,幫助你在10分鐘內構建強大的圖像分類器。TensorflowTensorflow是開發深度學習模型最常用的庫。它是有史以來最好的庫,在日常實驗中被許多極客選擇。
  • Python 深度學習,你的 Keras 準備好了嗎?
    該書是由 Keras 作者寫的,所以全書基本圍繞著 Keras 講深度學習的各種實現,從 CNN,RNN 到 GAN 等,偏入門,但理論和實戰部分都講的還不錯,承載著很多作者對深度學習整體性的思考。另外,其中的 Jupyter Notebook(tensorflow) 是我後面安裝得到的。你們暫時看不到正常。2. 創建 tensorflow 的虛擬環境Python 為不同的項目需求創建不同的虛擬環境非常常見。
  • Keras TensorFlow教程:如何從零開發一個複雜深度學習模型
    /tensorflow-tutorial/training-convolutional-neural-network-for-image-classification/),然後再回來閱讀這個文章。框架的「贏者」:Keras 是一個API,運行在別的深度學習框架上面。這個框架可以是 TensorFlow 或者 Theano。Microsoft 也計劃讓 CNTK 作為 Keras 的一個後端。目前,神經網絡框架世界是非常分散的,並且發展非常快。具體,你可以看看 Karpathy 的這個推文:!
  • 掌握深度學習,為什麼要用 PyTorch、TensorFlow 框架?
    畢竟,許多數據集可以用解析方法或簡單的統計過程進行建模。另一方面,在某些情況下,深度學習或深度遷移學習可以幫助你訓練更準確的模型。在這些情況下,你可以考慮使用PyTorch和TensorFlow,特別是如果你所需的訓練模型與其中一個框架模型庫中的模型類似。PyTorchPyTorch建立在舊版的Torch和Caffe2框架之上。
  • TensorFlow和Caffe、CNTK、MXNet等其他7種深度學習框架的對比
    表2-2和圖2-1所示為對主流的深度學習框架TensorFlow、Caffe、CNTK、Theano、Torch在各個維度的評分,本書2.2節會對各個深度學習框架進行比較詳細的介紹。Julia:github.com/malmaud/TensorFlow.jlNode.js:github.com/node-tensorflow/node-tensorflowR:github.com/rstudio/tensorflowTensorFlow
  • TensorFlow vs PyTorch:哪個是深度學習網絡編程的最佳框架呢?
    哪種框架最適合神經網絡編程呢?是TensorFlow還是PyTorch ?首先讓我們構建一個神經網絡模型,該模型分別使用PyTorch和Keras(TensorFlow)對手寫數字進行分類。matplotlib.pyplot as pltepochs = 10batch_size=64對於TensorFlow,您僅需要以下庫:import tensorflow as tf而對於
  • 從TensorFlow到Theano:橫向對比七大深度學習框架
    最近,來自數據科學公司 Silicon Valley Data Science 的數據工程師 Matt Rubashkin(UC Berkeley 博士)為我們帶來了深度學習 7 種流行框架的深度橫向對比,希望本文能對你帶來幫助。在 SVDS,我們的研發團隊一直在研究不同的深度學習技術;從識別圖像到語音,我們也在各類框架下實現了不少應用。
  • 深度學習筆記7:Tensorflow入門
    作者:魯偉 一個數據科學踐行者的學習日記。