來源:北大青鳥總部 2023年04月18日 10:21
人工智能的飛躍式發(fā)展與機(jī)器學(xué)習(xí)算法的進(jìn)步緊密相連,而深度學(xué)習(xí)則是實(shí)現(xiàn)機(jī)器學(xué)習(xí)的核心技術(shù)。開展深度學(xué)習(xí)相關(guān)項(xiàng)目,選擇合適的深度學(xué)習(xí)框架是相當(dāng)重要的,合適的深度學(xué)習(xí)框架可以節(jié)省很多重復(fù)的工作。
值得注意的是,當(dāng)前并沒有完美的深度學(xué)習(xí)框架,因此從眾多主流的深度學(xué)習(xí)框架中選擇適合自身項(xiàng)目的框架并非易事。為助力大家選擇合適的框架,本文在回顧近十種常見框架的基礎(chǔ)上,聚焦當(dāng)前受眾最廣、熱度最高的兩種深度學(xué)習(xí)框架TensorFlow和PyTorch。讓大家對(duì)這種深度學(xué)習(xí)框架有一個(gè)全面清晰地了解。
技術(shù)應(yīng)用的普及與技術(shù)的高效實(shí)現(xiàn)密不可分,深度學(xué)習(xí)框架通過將深度學(xué)習(xí)算法模塊化封裝,能夠?qū)崿F(xiàn)訓(xùn)練、測(cè)試、調(diào)優(yōu)模型的快速搭建,為技術(shù)應(yīng)用的預(yù)測(cè)與落地的決策提供有力支持。當(dāng)前人工智能生態(tài)的朝氣蓬勃與深度學(xué)習(xí)框架的百家齊放,可謂相輔相成,相互成就。
當(dāng)前流行的深度學(xué)習(xí)框架主要包括TensorFlow、PyTorch、Keras、PaddlePaddle、CNTK、MXNet、DeepLearning4J、Theano、Chainer等,具體如下表所示。
TensorFlow的前身是2011年GoogleBrain內(nèi)部孵化項(xiàng)目DistBelief,這是一個(gè)為深度神經(jīng)網(wǎng)絡(luò)構(gòu)建的機(jī)器學(xué)習(xí)系統(tǒng)。經(jīng)過Google內(nèi)部的錘煉后,在2015年11月9日,以ApacheLicense2.0的開源協(xié)議對(duì)外發(fā)布了TensorFlow,并于2017年2月發(fā)布了1.0.0版本,這標(biāo)志著TensorFlow穩(wěn)定版的誕生。2018年9月TensorFlow1.2版本發(fā)布,將Keras融入TensorFlow,作為TensorFlow的高級(jí)API,這也標(biāo)志著TensorFlow在面向數(shù)百萬(wàn)新用戶開源的道路上邁出重要的一步。2019年9月正式發(fā)布TensorFlow2.0 版本,緊接著在11月,公布了TensorFlow2.1 的RC版本,兼容之前的流行庫(kù),并還引入了眾多新庫(kù),使得TensorFlow的功能空前強(qiáng)大。
相比較而言,PyTorch則比較年輕。2017年1月,由Facebook人工智能研究院(FAIR)基于Torch推出了PyTorch,并于2018年5月正式公布PyTorch1.0 版本,這個(gè)新的框架將PyTorch0.4 與賈揚(yáng)清的Caffe2合并,并整合ONNX格式,讓開發(fā)者可以無(wú)縫地將AI模型從研究轉(zhuǎn)到生產(chǎn),而無(wú)需處理遷移。最新版PyTorch1.3 于2019年10月上線,更新增加了很多的新特性,包括無(wú)縫移動(dòng)設(shè)備部署、量化模型以加速推斷、前端改進(jìn)(如對(duì)張量進(jìn)行命名和創(chuàng)建更干凈的代碼)等,PyTorch官方同時(shí)還開源了很多新工具和庫(kù),使得PyTorch的眾多功能向TensorFlow趨同,同時(shí)保有自身原有特性,競(jìng)爭(zhēng)力得到極大增強(qiáng)。
一個(gè)良好的深度學(xué)習(xí)框架應(yīng)該具備優(yōu)化的性能、易于理解的框架與編碼、良好的社區(qū)支持、并行化的進(jìn)程以及自動(dòng)計(jì)算梯度等特征,TensorFlow和PyTorch在這些方面都有良好的表現(xiàn),為了更為細(xì)致地比較兩者之間的差異優(yōu)勢(shì),下面將對(duì)最新版TensorFlow2.0 版本和PyTorch1.3 版本先從運(yùn)行機(jī)制、訓(xùn)練模式、可視化情況、生產(chǎn)部署等方面進(jìn)行差異比較,然后再通過細(xì)化特征進(jìn)行定性比較,最后歸類對(duì)應(yīng)適用場(chǎng)景的建議。
運(yùn)行機(jī)制
兩個(gè)框架都是使用張量進(jìn)行運(yùn)算,并將任意一個(gè)模型看成是有向非循環(huán)圖(DAG),但TensorFlow遵循“數(shù)據(jù)即代碼,代碼即數(shù)據(jù)”的理念,當(dāng)在TensorFlow中運(yùn)行代碼時(shí),DAG是以靜態(tài)方式定義的,若需要實(shí)現(xiàn)動(dòng)態(tài)DAG,則需要借助TensorFlowFold 庫(kù);而PyTorch屬于更Python化的框架,動(dòng)態(tài)DAG是內(nèi)置的,可以隨時(shí)定義、隨時(shí)更改、隨時(shí)執(zhí)行節(jié)點(diǎn),并且沒有特殊的會(huì)話接口或占位符,相當(dāng)靈活。此外,在調(diào)試方面,由于PyTorch中的計(jì)算圖是在運(yùn)行的時(shí)候定義的,因此使用者可以使用任何一個(gè)喜歡的調(diào)試工具,比如PDB、IPDB、PyCharm調(diào)試器或者原始的print語(yǔ)句;而TensorFlow并不能這樣,它需要借助特殊的調(diào)試工具tfdbg才能進(jìn)行調(diào)試。
訓(xùn)練模式
在分布式訓(xùn)練中,TensorFlow和PyTorch的一個(gè)主要差異特點(diǎn)是數(shù)據(jù)并行化,用TensorFlow時(shí),使用者必須手動(dòng)編寫代碼,并微調(diào)要在特定設(shè)備上運(yùn)行的每個(gè)操作,以實(shí)現(xiàn)分布式訓(xùn)練;而PyTorch則是利用異步執(zhí)行的本地支持來實(shí)現(xiàn)的,其自身在分布式訓(xùn)練是比較欠缺的。
可視化情況
在可視化方面,TensorFlow內(nèi)置的TensorBoard庫(kù)非常強(qiáng)大,能夠顯示模型圖,繪制標(biāo)量變量,實(shí)現(xiàn)圖像、嵌入可視化,甚至是播放音頻等功能;反觀PyTorch的可視化情況,則顯得有點(diǎn)差強(qiáng)人意,開發(fā)者可以使用Visdom,但是Visdom提供的功能很簡(jiǎn)單且有限,可視化效果遠(yuǎn)遠(yuǎn)比不上TensorBoard。
生產(chǎn)部署
對(duì)于生產(chǎn)部署而言,TensorFlow具有絕對(duì)優(yōu)勢(shì),其可直接使用TensorFlowServing 在TensorFlow中部署模型,而PyTorch沒有提供任何用于在網(wǎng)絡(luò)上直接部署模型的框架,需要使用Flask或者另一種替代方法來基于模型編寫一個(gè)RESTAPI。
細(xì)化特征比較
為了更好地對(duì)比TensorFlow和PyTorch兩框架之間的區(qū)別與聯(lián)系,通過官網(wǎng)內(nèi)容、論壇反饋、自身實(shí)踐等多方面資源的整理,得出如表3所示的對(duì)比結(jié)果。
6.適用場(chǎng)景建議
當(dāng)需要擁有豐富的入門資源、開發(fā)大型生產(chǎn)模型、可視化要求較高、大規(guī)模分布式模型訓(xùn)練時(shí),TensorFlow或許是當(dāng)前最好的選擇;而如果想要快速上手、對(duì)于功能性需求不苛刻、追求良好的開發(fā)和調(diào)試體驗(yàn)、擅長(zhǎng)Python化的工具時(shí),PyTorch或許是值得花時(shí)間嘗試的框架??傮w而言,TensorFlow在保持原有優(yōu)勢(shì)的同時(shí)進(jìn)一步融合包括Keras在內(nèi)的優(yōu)質(zhì)資源,極大增強(qiáng)其易用性與可調(diào)試性,而PyTorch雖然年輕,但增長(zhǎng)的勢(shì)頭猛烈,并通過融合Caffe2來進(jìn)一步強(qiáng)化自身優(yōu)勢(shì)。兩者都在保留原有優(yōu)勢(shì)的同時(shí),努力補(bǔ)齊自身短板,這使得在某種程度上兩者有融合的趨勢(shì),未來哪一種框架更具優(yōu)勢(shì),現(xiàn)在定論必定過早,因此,在選擇框架時(shí),可參照上述內(nèi)容,并結(jié)合項(xiàng)目的時(shí)效、成本、維護(hù)等多方面綜合考量后再?zèng)Q定。
當(dāng)前并沒有完美的深度學(xué)習(xí)框架,因此從眾多主流的深度學(xué)習(xí)框架中選擇適合自身項(xiàng)目的框架并非易事。通過從運(yùn)行機(jī)制、訓(xùn)練模式、可視化情況、生產(chǎn)部署以及一些細(xì)化特征的比較,我們可以發(fā)現(xiàn),TensorFlow整體而言比較成熟、穩(wěn)定且偏重于工業(yè)領(lǐng)域,適用于中大型項(xiàng)目,而較為年輕的PyTorch憑借其易用性在研究領(lǐng)域嶄露頭角,發(fā)展勢(shì)頭很猛,但仍需時(shí)日才能與TensorFlow全面抗?fàn)帲谥行⌒晚?xiàng)目中選擇PyTorch作為新的嘗試,或許會(huì)是一種很好的選擇。