Bengio終結Theano非偶然,其性能早在Keras支持的四大框架中墊底

本文將對目前流行的幾種Keras支持的深度學習框架性能做一次綜述性對比,包括Tensorflow、CNTK、MXNet和Theano。作者Jasmeet Bhatia是微軟的數據與人工智能架構師,本文內容僅代表其個人觀點。

如果現在有人質疑Keras在數據科學家和工程師社區的地位,那麼就先請他去看看專業AI和雲計算玩家對Keras的支持率吧。官方發佈的最新版Keras,除了支持Theano等通用庫之外,已經可以支持谷歌的Tensorflow和微軟的CNTK深度學習庫。去年,亞馬遜雲宣佈他們的系統支持另一款強大的工具MXNet。

就在前幾周,新一版的MXNet也兼容Keras。不過,截止目前MXNet貌似只支持v1.2.2版本的Keras,對最新版2.0.5的Keras還不支持。

儘管只要產品選用被支持的後端服務,就可以在其中部署Keras模型,但是開發人員和架構師們必須牢記Keras是屬於適配不同深度學習框架的高層接口,還不支持任意調整外部庫的模型參數。

因此,如果大家想要精細調節後端框架提供的所有參數,作者建議大家直接選用具體的框架,不必再用Keras做一層包裝。不過隨着時間的推移,Keras的功能必定會逐步完善。但是我們不得不說,目前Keras仍然是深度學習項目早期開發階段的一個神器,它讓數據科學家和工程師們可以快速生成和測試複雜的深度學習模型。

Keras還可以讓開發人員快速對比測試幾種深度學習框架的相對性能。Keras的配置文件中有一個參數指定了用什麼後端框架。所以,大家只要寫一份代碼,就可以在Tensorflow、CNTK和Theano上都運行一次而無需改動代碼。

至於說MXNet,因爲它現在只支持v1.2.2版本的Keras,所以要稍微修改代碼才能運行。顯然,這些獨立的框架可以利用開發庫中各式各樣的特性進一步調試優化,不過Keras爲我們提供了一個比較這些框架基礎性能的機會。

有不少人寫過文章對比Keras支持後端的相對性能,Keras或者後端框架每出一個新版本,我們都能看到性能的巨大改善。

那麼讓我們看看最新版本的Keras和各個後端框架能達到什麼性能。

首先,介紹一下本次實驗的硬件配置。

所有的測試都是在裝有NVidia Tesla K80 GPU 的Azure NC6 虛擬機上完成的。虛擬機的鏡像文件是Azure DSVM (Data Science Virtual Machine)。鏡像文件預裝了Keras、Tensorflow、Theano、MXNet及其它數據科學工具。爲了進行測試實驗,所有應用都升級到最新版本,針對MXNet選用v1.2.2版本的Keras。有關Azure DSVM的細節資料可以點擊鏈接

配置

由於每個框架的依賴不同,作者用三種不同的配置進行測試實驗,具體如下:

儘管所有框架的開發團隊都聲稱正在研發的新版本性能有所提升,可以用於科研項目,不過實際產品還是傾向於使用穩定版本。因此,本次測試的所有後端框架都使用了最新的穩定版本。

性能測試

爲了比較各個框架的性能,作者使用了下面五種深度學習模型。爲了保證實驗的公平性,所有的模型都來自於Github上Keras項目的示例代碼

作者在自己的Github頁面公佈了所有的測試代碼

值得注意的是,其中兩組測試沒有包括MXNet模型。還是由於MXNet不支持最新版Keras的功能,需要改動較多的代碼才能運行,所以排除在本次實驗之外。其它三組實驗只需少許改動代碼即可支持MXNet,主要改動在於函數的命名不同。

實驗1:CIFAR10 CNN

模型類型:卷計算機網絡
數據集/任務名稱: CIFAR10 圖像數據集
目標:將圖片分到10個類別

就完成每個epoch速度而言,Tensorflow略勝MXNet一籌。就準確率/收斂速度而言,CNTK在第25輪迭代之時略微領先,不過第50輪迭代之後所有框架的準確率幾乎趨同。

不同框架的性能比較圖

實驗2:MNIST CNN

模型類型:卷計算機網絡
數據集/任務名稱:MNIST手寫數字數據集
目標:識別照片中的手寫數字

在本組實驗中,Tensorflow的訓練速度略快於Theano,遠好於CNTK,不過各個框架的準確率和收斂速度不分伯仲。

實驗3:MNIST MLP

模型類型:多層感知機/神經網絡
數據集/任務名稱:MNIST手寫數字數據集
目標:識別照片中的手寫數字

本實驗還是在MNIST數據集上測試標準的深度神經網絡模型,CNTK、Tensorflow和Theano的速度大致相同(2.5-2.7s/epoch),而MXNet獨樹一幟,達到了1.4s/epoch的速度。MXNet在準確率和收斂速度方面也表現略好。

實驗4:MNIST RNN

模型類型:層次循環神經網絡
數據集/任務名稱:MNIST手寫數字數據集
目標:識別照片中的手寫數字

在這組實驗中,CNTK和MXNet的訓練速度比較接近(162-164s/epoch),Tensorflow比它們稍慢,只有179s/epoch。Theano在RNN模型上的表現相當糟糕。

實驗5:BABI RNN

模型類型:循環神經網絡
數據集/任務名稱:bAbi項目
目標:基於描述和問題訓練兩個循環神經網絡模型。生成的向量用來回答一系列bAbi任務。

MXNet沒有參與本組實驗。Tensorflow和Theano的性能差不多,CNTK比它們快了50%,只需9.5s/epoch。

結論

各組實驗中,不同框架的性能對比

  • Tensorflow在各組CNN模型的實驗中都表現出色,但是在RNN模型上表現一般。
  • CNTK在 BAbi RNN 和 MNIST RNN 實驗中的表現遠遠好於Tensorflow和Theano,但是在CNN實驗中不及Tensorflow。
  • MXNet在RNN測試中的表現略好於CNTK和Tensorflow,在MLP實驗中性能碾壓其它所有框架。但是受限於v2版Keras的功能,無法參與另外兩組對比實驗,不過這種情況馬上會得到解決。
  • Theano在MLP實驗中的性能略好於Tensorflow和CNTK。

總結

從實驗結果來看,所有框架都有各自擅長的領域,目前並沒有哪一種框架能夠全面碾壓其它產品。不過,開源社區的參與者們仍舊在持續開發和維護這幾款產品,不斷提升它們的性能和擴大它們的功能,使得用戶的使用和部署過程更方便。不過,性能只是深度學習模型的一個方面,用戶在實際使用時還要兼顧效果、便捷性等多個因素。

原文 :Search fastest Keras Deep Learning backend
作者:Jasmeet Bhatia
編譯:KK4SBB


SDCC 2017「人工智能技術實戰線上峯會」將在CSDN學院以直播互動的方式舉行。

作爲SDCC系列技術峯會的一部分,來自阿里巴巴、微軟、商湯科技、第四範式、微博、出門問問、菱歌科技的AI專家,將針對機器學習平臺、系統架構、對話機器人、芯片、推薦系統、Keras、分佈式系統、NLP等熱點話題進行分享。先行者們正在關注哪些關鍵技術?如何從理論跨越到企業創新實踐?你將從本次峯會找到答案。每個演講時段均設有答疑交流環節,與會者和講師可零距離互動。
圖片描述

圖片描述