深度學習框架大戰正在進行,誰將奪取“深度學習工業標準”的榮耀?

本文最早發表于本人博客:<a >博客</a>

隨著深度學習研究熱潮的持續發酵,各種開源深度學習框架層出不窮,其中包括:Caffe、CNTK、MXNet、Neon、TensorFlow、Theano 和 Torch (著名開源深度學習框架 Keras 相當于是 TensorFlow 和 Theano 的簡化接口,這里就不并列了)。在這些深度學習框架中,我個人是支持 TensorFlow 的。以前我的觀點不是這樣,當時的我覺得 TensorFlow 沒有什么厲害的。TensorFlow 剛出來的時候,我還和 Mentor 思遠大大一頓吐槽。不過我最近轉變觀點,覺得 TensorFlow 比較牛逼。


TensorFlow 和 其他框架的對比


在詳細地論證我的觀點前,我先整理下 Tensor Flow 和其他深度學習框架的對比。

在分布式計算方面,Tensor Flow 最終還是趕上了。2016年2月27日,Google 終于公布了 Tensor Flow的 分布式運行方案。對于大規模深度學習來說,巨大的數據規模使得單機很難 Hold 得住了。這時需要分布式計算使得多臺服務器協同工作共同訓練一個模型出來。Google 開源 Tensor Flow 時只有單機版本,是當時人們吐槽的第一槽點。目前分布式深度學習框架有 CNTK、MXNet 和 Tensor Flow。分布式運行方案使得 Tensor Flow 擠身為數不多的分布式深度學習框架俱樂部。

在性能方面,Tensor Flow 的速度是比較慢的。去年 Tensor Flow 剛剛公布的,人們第一吐槽只有單機版本,第二吐槽沒有官方和其他深度學習框架的對比結果。一些研究者們做了一些對比之后發現,Tensor Flow 真的不快,Google 不發布官方和其他深度學習框架的對比結果是正確的策略。最近zer0n和bamos在GitHub上發表的一篇文章(譯文在此)在速度方面給 Tensor Flow 打了3星,另一個3星的框架是公認很慢的Theano。zer0n和bamos指出 Tensor Flow 僅使用了cuDNN v2,并指出即使 Torch 也只使用 cuDNN v2,也比 Tensor Flow 快。微軟在 CNTK 的項目主頁默默地掛出了此圖(PS: 當時TensorFlow 還不能分布式計算)。在此圖中,TensorFlow 的速度僅僅比 Theano 快一點。

在關注度方面,我們發現 TensorFlow 遠遠超過其他深度學習框架。按照北京時間 2016 年 3 月 6 日的數據,TensorFlow 在 GitHub 上 Stars 數將近 20000, Forks 數也超過了 6500。下圖是 TensorFlow 和其他深度學習開源工具的 Stars 和 Forks,可以看出差距非常明顯。再聯想到 TensorFlow 去年才開源,就能體會 TensorFlow 人氣之高了。


到生產一線去


我為什么還看好 TensorFlow 的未來呢?因為我個人認為 TensorFlow 會是直接面向生產環境的深度學習平臺。我做出這個判斷基于三個理由。

第一個理由是 TensorFlow Serving。2016年2月,TensorFlow 取得了兩個重要的進展。一個是TensorFlow的分布式運行方案。這個在上節已經提到過了。另一個是TensorFlow Serving。Google 在16年2月17日開源了 TensorFlow Serving,TensorFlow Serving 可以將深度學習模型變成對外提供的服務。現在用深度學習模型對外提供服務的方案有以下幾步。

1.工程師們得訓練模型。工程師按照自己對數據的理解,選擇合適的深度學習框架將模型訓練處理。

2.工程師們將訓練好的模型導出。怎么讓用戶也能享受這個已經導出模型呢?總不能將模型遠程給人家吧。因此我們有了第三步。

3.工程師選擇一個合適的服務器框架,編寫代碼導入模型并建立對外服務。

有了 TensorFlow 和 TensorFlow Serving, 我們可以用 TensorFlow 訓練和導出模型,然后把模型導入 TensorFlow Serving。TensorFlow Serving 就能對外提供預測服務了。相當于 TensorFlow 系列把整個用深度學習模型對外提供服務的方案全包了。Google軟件工程師Noah Fiedel的說法,“TensorFlow Serving是一個高性能、開源的機器學習服務系統,為生產環境及優化TensorFlow而設計。它更適合運行多個大規模模型,并支持模型生命周期管理、多種算法實驗及有效地利用GPU資源。TensorFlow Serving能夠讓訓練好的模型更快、更易于投入生產環境使用”。

TensorFlow Serving 的出現使得 TensorFlow 具有深度學習平臺的雛形。一個深度學習框架也許只需要考慮如何把模型訓練好。而一個生產級別的深度學習平臺除了訓練模型(Model Training)外還涉及很多相關的數據處理周期,例如Data ingress, Filtering (Sampling), Cleaning,Egress,Storage,Serving等等。

第二個理由是 TensorBoard。TensorBoard 是一款可視化工具,目的是為了方便 TensorFlow 程序的理解、調試與優化。工程師們可以用 TensorBoard 來展現你的 TensorFlow 圖像,繪制圖像生成的定量指標圖以及附加數據。下圖是一個展示模型結構示例 (微信不支持gif圖片,想看gif效果的同學可以點擊閱讀原文,到我博客上看),大家可以感受下。

由于生產環境面對很多水平不一的工程師們,在生產環境中使用的開源項目提供一個易用的接口就顯得很重要了。TensorFlow 除了提供Python/C++兩種編程接口之外,還提供了圖形化的可視化工具 TensorBoard 。有了 TensorBoard, 你用鼠標就能定義神經網絡結構和訓練過程了!據我所知,目前只有微軟的商用機器學習平臺 Azure Machine Learning 允許鼠標定義訓練過程,但沒有到定義模型結構的程度。易用性是生產級別的深度學習平臺的重要要求, TensorFlow Board 體現了 TensorFlow 會朝著這個方向做更多的工作。

第三個理由是 TensorFlow 的異構性。簡單地說,異構性是指 TensorFlow 能夠在不同類型設備構成的網絡中進行訓練和預測。這也就是媒體們說的,有了 TensorFlow , 你甚至可以用手機訓練深度學習模型。實際情況是沒有誰真的用手機訓練深度學習模型。異構性的目的是應付復雜的生產環境。一家公司不管大還是小集群,設備可能有不同來源。有些是之前買的,有些是最近買的,還有些可能是從隔壁部門借的,因此需要深度學習框架能夠在這些不同類型組成的異構網絡中訓練和使用模型。TensorFlow 的異構性使得它能夠應付復雜的實際生產環境。

上述三點理由都是指向 TensorFlow 是直接面向生產環境的。一旦 TensorFlow 全面地進入不同機構的生產環境,這些機構會變成 TensorFlow 發揮影響力的節點,將極大地增強 TensorFlow 的影響力。這體現在三點上:1)著名機構使用 TensorFlow 本身就會帶來的影響力;2)進入一家機構的算法工程師,不管是通過職前自學還是公司培訓,最終都學會 TensorFlow 。就像我師兄張星星說的,“不少工程師希望去 Google 工作吧,那他們去工作前一定會學學 TensorFlow 的”;3)從這家公司離職人又將使用方法經驗帶到別的機構。相反地,如果一款深度學習框架沒有進入生產環境,只是作為個人調研和實驗的工具,工程師就沒有直接理由了解和使用它了。各種深度學習框架中,TensorFlow 的官方最具有面向生產環境的意識。這可能和 TensorFlow 曾經或者現在在 Google 內部生產環境中實際使用有關。

當然 TensorFlow 也有被扯后腿的地方。TensorFlow的性能和 CNTK、Neon 和 Torch等工具相比還有差距。如果 TensorFlow 的性能沒有得到大幅度地改善,會對工業界的吸引力會大打折扣,這對 TensorFlow 普及會產生很大的傷害。除了這個大缺點,TensorFlow 還有一個小缺點: TensorFlow 不能部署在 Windows 操作系統上。不過我不認為這是什么缺點。哈哈,準備去微軟的苗苗、小獅子和奔奔不準打我。

深度學習框架大戰正在進行,誰將奪取“深度學習工業標準”的榮耀,我們拭目以待。

ps:感謝黃申師弟教我用 TensorFlow, 讓我稍微有點底氣寫文章。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容