2020年深度學習框架對比速讀
原創眾所周知,在機器學習框架領域,PyTorch、TensorFlow已分別成為目前學術界和工業界使用最廣泛的兩大實力玩家,而緊隨其后的Keras、MXNet等框架也由于其自身的獨特性受到開發者的喜愛。本文主要是為部分初學者提供建議,框架并無“最好”與“最壞”之分,選擇最終歸結于您的技術背景、需求和期望。
???
TensorFlow:出身豪門的工業界霸主
TensorFlow于2015年11月面世,基于Apache License 2.0協議發布,由Google Brain團隊研發。到目前為止也是github上熱度最高、使用人數最多的深度學習框架,業界很多招聘要求中也提到了它。2019年3月推出TensorFlow2.0 版本,整體與1.0版本相比發生了較大的變化。
TensorFlow能有現在的地位,主因有二:一是“背靠大樹好乘涼”,Google幾乎在所有應用程序中都使用TensorFlow來實現機器學習。得益于Google在深度學習領域的影響力和強大的推廣能力,TensorFlow一經推出關注度就居高不下;二是由于其本身設計宏大,不僅可以為深度學習提供強力支持,靈活的數值計算核心也能廣泛應用于其他涉及大量數學運算的科學領域。
優勢歸因:
支持python、JavaScript、C ++、Java和Go,C#和Julia等多種編程語言;
靈活的架構支持多GPU、分布式訓練,跨平臺運行能力強;
自帶TensorBoard組件,能可視化計算圖,便于讓用戶實時監控觀察訓練過程;
官方文檔非常詳盡,可查詢資料眾多;
社區龐大,大量開發者活躍于此。
踩坑預警:
從框架本身的語言設計來看,入門難度較大。加之部分自創的抽象概念,提高了學習門檻;
系統設計過于復雜,代碼總量逾100萬行,學習者如果希望了解TF的底層運行機制,無疑漫長而艱辛;
文檔和教程雖多,但缺乏條理,新舊版本割裂,對初學者來說很難找到一個循序漸進的入口;
接口迭代頻繁,且版本間不兼容問題足以令人頭禿。尤其在TF2發布后,不少TF1的用戶發現很多開源代碼無法在新版本上運行;
在移動平臺和嵌入式領域中TensorFlow過于“臃腫”,計算速度也不盡如人意(Google針對這一問題又開發了TensorFlow Lite)。
小結:TensorFlow發展到如今,多少有點“始于宏大,囿于宏大”的意味。雖然吐槽者甚多,但也側面說明了使用者眾多。況且在工業界TensorFlow依然是深度學習框架中無可爭議的標桿,加之谷歌的支持,投入時間學習算是一項相當不錯的選擇。
項目地址:https://github.com/tensorflow/tensorflow
Keras:用戶友好的極簡主義擁躉
如果你已經掌握了Python并準備開啟深度學習之旅,Keras可能會是最易上手的一個工具。嚴格來說,與其說Keras是一個深度學習框架,不如說它是一個由Python編寫的開源神經網絡庫,一個構建于第三方框架之上的深度學習接口,一種高級API。Keras本是為支持快速實驗而生,可以基于以TensorFlow為代表的多種深度學習框架快速建模,將你的想法迅速輸出為實驗結果,其設計充分體現了“用戶友好”這一特性。
為了提供簡潔一致的API,盡可能為用戶減少重復造輪子的顧慮,Keras做了層層封裝。這種高度封裝一方面使用戶的學習變得容易,但另一方面也缺乏靈活性,經常導致用戶在獲取底層數據信息時過于困難,改寫現有的神經網絡層也十分復雜。此外,由于不少Bug隱匿于封裝中,這也使Keras運行速度相對緩慢。
優勢歸因:
用戶友好,代碼可讀,句法明晰,高度模塊化,便于上手;
提供簡潔的API,減少一般應用下用戶的工作量;
支持實現卷積神經網絡和循環神經網絡,或二者的結合;
相同的代碼可以在CPU或GPU上無縫切換運行;
官方文檔詳盡易懂,用戶社區龐大。
踩坑預警:
高度集成,缺少靈活性,深入學習時容易遇到瓶頸;
過度封裝在一定程度上增加了調試難度;
對DL的入門者來說,容易因Keras 的易用性而忽略底層原理。
小結:在眾多的深度學習框架中,Keras可以說將“極簡主義”發揮到了極致。簡潔的代碼、簡潔的API、簡潔的模型構建和導出,這些都讓深度學習看上去似乎不那么“高不可攀”了。不過對于初學者而言,Keras到底適不適合推薦則是見仁見智。支持者認為,Keras最大限度地減少了用戶操作,并使模型非常容易理解,對菜鳥們絕對是很好的敲門磚;反對者認為,在使用Keras的大多數時間里,用戶主要是在調用接口,很難真正理解到深度學習的內涵。其過度的封裝容易讓新手陷入似是而非的處境。
官方網站:https://keras.io/
MXNet:低調規矩的輕量級選手
MXNet是一個輕量級的深度學習庫,在2016年被AWS正式選擇為其云計算的官方深度學習平臺。2017年1月,MXNet項目進入Apache基金會,成為Apache的孵化器項目。MXNet以其超強的分布式支持,明顯的內存、顯存優化為人稱道。同樣的模型,MXNet往往占用更小的內存和顯存,因此對資源不夠的朋友來說是一個不錯的選擇。
作為一個輕巧的框架,MXNet的特點非常鮮明:語言接口非常豐富,包括C++、Python、R語言、Scala、Julia、Matlab和JavaScript;支持多端運行,可以運行在多CPU、多GPU、集群、服務器、臺式機或者移動設備上;允許用戶混合使用符號編程和命令式編程,最大限度確保深度學習框架的靈活性和執行效率。
優勢歸因:
支持多語言接口;
同時支持符合式和命令式編程,集靈活與效率于一體;
分布式環境下擴展性能出色,可有效擴展到多個GPU和多臺機器;
有AWS的平臺支持,云端部署便捷。
踩坑預警:
初期推廣不給力,過于低調以致整體生態構建相對滯后,用戶社區活躍度較低;
教學文檔不夠系統,甚至于只能通過查看源碼來真正理解MXNet接口的用法,學習成本較高。
小結:MXNet自發行到現在一直比較低調和小眾。創始人李沐曾提到MXNet發展早期是“舍推廣保技術”。雖然性能上也算可圈可點,但終究沒有迎來大放異彩的時刻。另外官方文檔的“粗糙”也勸退了相當一部分用戶,尤其對從零開始的新手來說,上手難度較高。
官方網址:https://mxnet.incubator.apache.org/
PyTorch:以動態圖崛起的學術界寵兒
PyTorch是基于Torch并由Facebook強力支持的python端的開源深度學習庫。它于2017年1月發布,是近年來最引人關注的深度學習框架之一。2018年Caffe2正式并入PyTorch后,PyTorch的發展勢頭更呈不可阻擋之勢。因其上手簡單、功能強大,可以非常快速地驗證研究思路而廣受研究人員的青睞。
有TensorFlow的“宏大藍圖”在前,PyTorch能如此快速崛起,主要原因在于:支持動態計算圖,提供了很好的靈活性;易用性強,近乎傻瓜式操作非常親民;有非常詳盡清晰的官方教程,吸引了大量開發者和研究人員,社區迅速壯大。目前許多新發表的論文都采用PyTorch作為論文實現的工具。如果你是一名科研工作者,PyTorch或許會是你的首選。
優勢歸因:
簡潔。PyTorch在設計上更直觀,追求盡量少的封裝,建模過程透明,代碼易于理解;
易用。應用十分靈活,接口沿用Torch,契合用戶思維,盡可能地讓用戶實現“所思即所得”,不過多顧慮框架本身的束縛;
社區。提供完整的文檔和指南,用戶可以通過全面的教程完成從入門到進階,有疑問也可以在社區中獲得各種及時交流的機會。
踩坑預警:
生產環境部署仍存在大問題。PyTorch能在學界一枝獨秀,主要是因為“研究”更注重快速實現、驗證自己的想法,而不太注重部署的問題,一般“怎么快怎么來”。但在業界,部署的快速和穩定是必要的。否則做實驗時節省下來的時間,都要在生產上線時加倍還回去。
小結:PyTorch的易用性是毋庸置疑的“王牌”。越來越多的人因為這一點開始學習PyTorch,不過其在工業界的部署問題也不容回避。顯然,當你充分了解到這些利弊時,就應該明白這些深度學習框架都是工具,學的越多,可選擇的余地越大。
官方網站:https://pytorch.org/
國內深度學習框架自研之路
2020年上半年,華為Mindspore、曠視MegEngine、騰訊TNN、清華Jittor等數個國產AI框架漸次宣布開源,討論的熱度一直在持續。最近一流科技的OneFlow又首創性地引入Actor模型和SBP機制,以其獨特設計引起關注。很多人也開始思考:在已有成熟的開源深度學習框架并擁有完整生態的情況下,中國企業和機構是否有必要再另造一套框架?自研深度學習框架的創新空間又有多大?
近幾年,基礎技術的“卡脖子”問題逐漸浮出水面。不久前美國政府發布的“芯片禁令”將華為逼到了非常被動的境地。前事不忘后事之師,中國要想發展好新一代的人工智能,通過自主研發來掌握AI底層技術無疑是未雨綢繆的重要舉措。因此自研深度學習框架是非常必要的。不過局中人也都知道要超越那些已有的成熟的框架也是很難的,那么出路何在?
雖然很多人認為深度學習框架的融合是時之所趨勢,TensorFlow2.0和PyTorch也的確是越來越像了,但實際上深度學習框架的市場是很大的,用戶需求也是多樣的,這就注定不可能由某個企業、某個產品壟斷。就像TensorFlow也曾一家獨大,但PyTorch橫空出世后迅速形成兩強對峙的局面,關鍵就在于兩者設計初衷的差異。TensorFlow面向工業界,側重推理,在部署上實現了工業級的穩定;PyTorch面向學術界,側重訓練,足夠簡單易用,能達成快速實現和驗證。最終兩者在各自面向的領域都確立了王者地位。
差異化可能將是深度學習框架自研之路上的制勝關鍵。單純依靠模仿的框架肯定是沒有出路的,如何與現存的成熟的深度學習框架區別開來進而打造自身亮點是眾多開發團隊所要考慮的。PaddlePaddle模型庫豐富,MegEngine追求訓練推理一體化,Mindspore深耕自動并行的訓練能力,OneFlow專注分布式環境下的性能提升……相比“一枝獨秀”,“百花齊放”無疑更有利于國內深度學習框架的長足發展。
【結語】深度學習框架作為AI底層工具,對個人而言是進入深度學習世界的一把鑰匙,掌握深度學習框架并不等于理解了深度學習,要在AI開發中有所作為,關鍵還是要真正理解框架背后的技術、實踐和生態。