□ 文 龐 濤
淺層學(xué)習(xí)起源上世紀(jì)20年代人工神經(jīng)網(wǎng)絡(luò)的反向傳播算法(Back-Propagation)的發(fā)明,這時(shí)候的人工神經(jīng)網(wǎng)絡(luò)算法也被稱為多層感知機(jī)MLP(Multiple Layer Perception),但由于多層網(wǎng)絡(luò)訓(xùn)練困難,通常都是只有一層隱含層的淺層模型。Hinton在2006年提出了神經(jīng)網(wǎng)絡(luò)Deep Learning算法,它是傳統(tǒng)神經(jīng)網(wǎng)絡(luò)(Neural Network)的發(fā)展,兩者采用了相似的分層結(jié)構(gòu),但是深度學(xué)習(xí)采用了不同的訓(xùn)練機(jī)制,具備強(qiáng)大的表達(dá)能力。
深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的第二次浪潮,除了學(xué)術(shù)界,國內(nèi)外產(chǎn)業(yè)巨頭也紛紛意識到通過開源技術(shù)建立產(chǎn)業(yè)生態(tài)是搶占產(chǎn)業(yè)制高點(diǎn)的重要手段,因此各種開源深度學(xué)習(xí)框架也層出不窮,按照開源面世的大致時(shí)間順序排列,包括Theano(2012年以前)、Caffe(2013年底)、Torch(2014年)、DeepLearning4J(2014年)、TensorFlow(2015年)、Keras(2015年)、Neon(2015年)、Chainer(2015年)、CNTK(2016年初)、MXNet(2016年)、PaddlePaddle(2016年)、PyTorch(2017年初)、Caffe2(2017年)等,已有研究對部分框架進(jìn)行研究,但是技術(shù)發(fā)展日新月異,有必要對相關(guān)技術(shù)持續(xù)跟蹤。
本文關(guān)注深度學(xué)習(xí)開源框架的技術(shù)、應(yīng)用、開源社區(qū)生態(tài)發(fā)展現(xiàn)狀,在第2節(jié)選擇部分主流框架從開發(fā)者、技術(shù)路線、應(yīng)用場景、發(fā)展策略等多角度展開綜合論述,在第3節(jié)從技術(shù)生態(tài)角度分析了開源框架的現(xiàn)狀,并在第4節(jié)總結(jié)深度學(xué)習(xí)框架的發(fā)展趨勢,最后給出全文小結(jié)。
在Caffe出現(xiàn)之前,深度學(xué)習(xí)領(lǐng)域缺少一個(gè)完全公開所有代碼、算法和各種細(xì)節(jié)的框架。Caffe是賈揚(yáng)清在美國伯克利大學(xué)在讀博士期間開發(fā)的深度學(xué)習(xí)框架,目前由伯克利大學(xué)主導(dǎo),完全開源。
Caffe主要的代碼由C++語言實(shí)現(xiàn),并且提供了Python Layer來方便實(shí)現(xiàn)算法原型。Caffe給出了模型的定義、最優(yōu)化設(shè)置以及預(yù)訓(xùn)練的權(quán)重,該框架只能夠使用卷積網(wǎng)絡(luò),用戶可以使用Caffe提供的各層類型來定義自己的模型。Caffe中定義了三種基本結(jié)構(gòu),包括:數(shù)據(jù)容器Blobs,用來存儲、傳遞、處理數(shù)據(jù);Layers,是Caffe模型運(yùn)算的基本單元,內(nèi)置了卷積、聚合、內(nèi)積、階躍、正則化、損失計(jì)算等基本算法;Nets,Nets是由一系列Layer及其連接組合形成的網(wǎng)狀圖。Caffe一開始主要是為圖像領(lǐng)域的應(yīng)用所設(shè)計(jì),特別適合圖像分類的應(yīng)用場景,所以在其他更加一般的機(jī)器學(xué)習(xí)、語音識別等問題上,Caffe的框架并不一定是最優(yōu)的。
圖1 Caffe與Caffe2的主要區(qū)別
賈楊清博士入職Facebook之后,F(xiàn)acebook很快推出了Caffe2,這是一個(gè)跨平臺的新型工業(yè)級深度學(xué)習(xí)框架,在移動端、服務(wù)器端、物聯(lián)網(wǎng)設(shè)備、嵌入式系統(tǒng)都能部署Caffe2訓(xùn)練的模型。Caffe2最大的特點(diǎn)就是輕量、模塊化和擴(kuò)展性,與Java有類似的特點(diǎn):一次編碼,到處運(yùn)行。Caffe2支持多GPU和多主機(jī)分布式計(jì)算,可使用英偉達(dá)基于GPU計(jì)算的深度學(xué)習(xí)SDK庫(cuDNN、cuBLAS和NCCL)來實(shí)現(xiàn)高性能的訓(xùn)練和推理。Caffe2采用了計(jì)算圖(Computation Graph)來表征神經(jīng)網(wǎng)絡(luò)或者包括集群通信和數(shù)據(jù)壓縮在內(nèi)的其它計(jì)算,其基本計(jì)算單位是用算子(Operator)取代了Caffe中的Layer作為Nets的基本構(gòu)造單位,每個(gè)算子都包含了計(jì)算輸出所必需的邏輯,在給定輸入的數(shù)量、類型以及參數(shù)后,可計(jì)算得到輸出結(jié)果。目前,Caffe2已經(jīng)定義了超過500個(gè)算子。Caffe與Caffe2的主要區(qū)別如圖1所示。
目前,Caffe和Caffe2的開源社區(qū)都很活躍,盡管Caffe2出現(xiàn)較晚,但是發(fā)展勢頭迅猛,在Caffe2與PyTorch合并之前,Caffe2項(xiàng)目的貢獻(xiàn)者和代碼提交次數(shù)已經(jīng)直逼Caffe項(xiàng)目。出于減少維護(hù)成本、提高開發(fā)者效率等綜合考慮,F(xiàn)acebook在2018年4月將Caffe2與PyTorch開源項(xiàng)目進(jìn)行了整合,Caffe2的代碼已經(jīng)全部并入PyTorch。
TensorFlow由谷歌大腦研發(fā)團(tuán)隊(duì)開發(fā),前身為谷歌第一代專有的機(jī)器學(xué)習(xí)系統(tǒng)DistBelief,之后不斷簡化和重構(gòu)使其變成一個(gè)更快、更健壯的應(yīng)用級別代碼庫,形成了TensorFlow。TensorFlow既是一個(gè)實(shí)現(xiàn)機(jī)器學(xué)習(xí)算法的接口,也是執(zhí)行機(jī)器學(xué)習(xí)算法的通用框架。
在TensorFlow的實(shí)現(xiàn)中,機(jī)器學(xué)習(xí)算法被表達(dá)成圖,計(jì)算過程就是張量(Tensor)沿著計(jì)算圖傳遞閉包完成張量互相轉(zhuǎn)化流動(Flow)的過程,其中張量定義了計(jì)算的規(guī)則而不保存計(jì)算的數(shù)據(jù),是構(gòu)建計(jì)算圖不可或缺的重要組成部分。計(jì)算圖中各個(gè)節(jié)點(diǎn)的輸入輸出計(jì)算過程為一組操作(Operation),節(jié)點(diǎn)會有零到多個(gè)輸出,每個(gè)算子都會有屬性,所有的屬性都在建立計(jì)算圖的時(shí)候被確定下來。
如圖2所示,以C語言API為界,系統(tǒng)分為前端和后端兩部分,前端支持Python、C++、Go、Java等多種開發(fā)語言,提供統(tǒng)一的編程模型構(gòu)造計(jì)算圖,通過會話(session)的形式,連接后端的程序運(yùn)行環(huán)境(Runtime)啟動計(jì)算圖的執(zhí)行過程;后端的核心以張量為處理對象,依賴網(wǎng)絡(luò)通信和設(shè)備內(nèi)存分配,實(shí)現(xiàn)了張量的各種操作和計(jì)算。
由于Google強(qiáng)有力的支持,TensorFlow開源之后大受歡迎,是開源社區(qū)最受歡迎的深度學(xué)習(xí)工具。TensorFlow具有良好的跨平臺的特性,在其上實(shí)現(xiàn)的算法支持移植到Android手機(jī)、iPhone、PC服務(wù)器、大規(guī)模GPU集群等眾多異構(gòu)系統(tǒng),為了進(jìn)一步支持移動設(shè)備,減少模型體積、提升運(yùn)算速度,還相繼推出了TensorFlow Mobile和TensorFlow Lite,為安卓手機(jī)人工智能的生態(tài)進(jìn)行布局。
MXNet主要是由卡內(nèi)基梅隆大學(xué)(CMU)李沐博士牽頭開發(fā),博士期間,李沐等人在Github上創(chuàng)建了深盟(DMLC)的組織。MXNet是DMLC最初兩個(gè)項(xiàng)目名稱(Minerva和CXXNet)的組合。
在MXNet的架構(gòu)中(圖3),從上到下分別為各種主語言的嵌入,編程接口(矩陣運(yùn)算,符號表達(dá)式,分布式通訊),兩種編程模式的統(tǒng)一系統(tǒng)實(shí)現(xiàn),以及多種硬件和操作系統(tǒng)的支持。整個(gè)系統(tǒng)全部模塊化,有極小的編譯依賴,適合快速開發(fā)。
圖2 TensorFlow架構(gòu)圖
圖3 MXNet的系統(tǒng)架構(gòu)
MXNet使用Cpython將C++和Python語言綁定,MXNet支持命令式(類似Torch)和聲明式(類似TensorFlow)兩種編程模式API,并且MXNet將兩種模式結(jié)合起來,在命令式編程上MXNet提供張量運(yùn)算,而聲明式編程中MXNet支持符號表達(dá)式,用戶可以根據(jù)需要自由選擇。同時(shí),MXNet提供多語言的API接口,包括Python、R、Julia、C++、Scala、Matlab、Javascript等,并支持在Android或iOS系統(tǒng)上編譯。在MXNet中,所有的任務(wù),包括張量計(jì)算、symbol執(zhí)行、數(shù)據(jù)通訊等都會交由引擎來執(zhí)行。KV Store負(fù)責(zé)進(jìn)行分布式的訓(xùn)練。
MXNet正式加入Apache以后,推出了MXNet 0.11版本,加入了動態(tài)圖接口Gluon。Gluon學(xué)習(xí)了Keras,Chainer和PyTorch的優(yōu)點(diǎn),并加以改進(jìn),接口更簡單,支持靜、動態(tài)圖混用,比PyTorch速度更快。
包括亞馬遜、Apple、Samsung、微軟等MXNet開源社區(qū)的成員已展開合作,將MXNet技術(shù)應(yīng)用到自家產(chǎn)品,例如亞馬遜、微軟等公有云平臺支持部署MXNet和Gluon深度學(xué)習(xí)框架,蘋果發(fā)布了將使用MXNet構(gòu)建的機(jī)器學(xué)習(xí)模型轉(zhuǎn)換為蘋果Core ML格式的工具等。
Torch是由卷積神經(jīng)網(wǎng)絡(luò)之父Yann LeCun領(lǐng)導(dǎo)開發(fā)的框架,于2014年開源,曾是Facebook和Twitter主推的一款開源深度學(xué)習(xí)框架,Google和多個(gè)大學(xué)研究機(jī)構(gòu)也在使用Torch。大名鼎鼎的Alpha Go便是基于Torch開發(fā)的,只不過在Google開源TensorFlow之后,Alpha Go遷移到了TensorFlow上。
在Torch中有命名空間為“nn”的神經(jīng)網(wǎng)絡(luò)工具包,Torch中的模塊(Module)是構(gòu)建神經(jīng)網(wǎng)絡(luò)的基石,而且模塊本身也是神經(jīng)網(wǎng)絡(luò),它可以和其他網(wǎng)絡(luò)借助容器(Container)構(gòu)建出更復(fù)雜的神經(jīng)網(wǎng)絡(luò)。最新的Torch7版本使用了多GPU及并行運(yùn)算包。Torch后臺以C語言寫成,但前臺交互界面采用了Lua語言和即時(shí)編譯(LuaJIT),相對小眾,導(dǎo)致了Torch推廣的困難。
隨著Python語言在機(jī)器學(xué)習(xí)領(lǐng)域的大熱,Torch的開發(fā)團(tuán)隊(duì)開源了PyTorch,已發(fā)展的Torch7版本不再進(jìn)行功能性的更新。
PyTorch的出現(xiàn)不僅是為了支持流行語言而對Torch進(jìn)行簡單的包裝,PyTorch具有輕巧的框架,底層采用張量計(jì)算引擎,集成多種加速SDK,如面向深度神經(jīng)網(wǎng)絡(luò)的英特爾數(shù)學(xué)核心函數(shù)庫(MKL-DNN)、英偉達(dá)的CuDNN和NCC來加速計(jì)算。在其核心,它的CPU和GPU Tensor與神經(jīng)網(wǎng)絡(luò)后端(TH、THC、THNN、THCUNN)使用C99 API被編寫成了獨(dú)立的庫。
PyTorch由4個(gè)主要包裝組成:
Torch:類似Numpy的通用數(shù)組庫,可以在將張量類型轉(zhuǎn)換為(torch.cuda.TensorFloat)并在GPU上進(jìn)行計(jì)算。
torch.autograd:用于構(gòu)建計(jì)算圖形并自動獲取漸變的包。
torch.nn:具有共同層和cost函數(shù)的神經(jīng)網(wǎng)絡(luò)庫。
torch.optim:具有通用優(yōu)化算法(如SGD,Adam等)的優(yōu)化包。
PyTorch提供了高層的神經(jīng)網(wǎng)絡(luò)模塊。對于常用的網(wǎng)絡(luò)結(jié)構(gòu),如全連接、卷積、RNN等。同時(shí),PyTorch還提供了常用的目標(biāo)函數(shù)、optimizer及參數(shù)初始化方法。
在Facebook內(nèi)部,PyTorch用于所有的研究項(xiàng)目,Caffe2用于所有的產(chǎn)品項(xiàng)目。目前,在開源項(xiàng)目端Caffe2已被并入PyTorch項(xiàng)目,足見PyTorch強(qiáng)大的生態(tài)魅力。
微軟認(rèn)知學(xué)習(xí)工具包(Cognitive Toolkit,CNTK)是由微軟研究院發(fā)布的一個(gè)產(chǎn)品級別的、開源深度學(xué)習(xí)庫(框架),在語音識別領(lǐng)域的使用尤其廣泛。
認(rèn)知學(xué)習(xí)工具包使用向量運(yùn)算符的符號圖(symbolic graph)網(wǎng)絡(luò),支持如矩陣加、乘或卷積等向量操作。此外,認(rèn)知學(xué)習(xí)工具包有豐富的細(xì)粒度的網(wǎng)絡(luò)層構(gòu)建,認(rèn)知學(xué)習(xí)工具包設(shè)計(jì)是性能導(dǎo)向的,在CPU、單GPU、多GPU,以及GPU集群上都有不錯的表現(xiàn)。它的另一個(gè)重要特性就是拓展性,認(rèn)知學(xué)習(xí)工具包除了內(nèi)置的大量運(yùn)算核,允許用戶定義他們自己的計(jì)算節(jié)點(diǎn),支持高度的定制化。構(gòu)建塊(操作)的細(xì)粒度使用戶不需要使用低層次的語言就能創(chuàng)建新的復(fù)雜的層類型。
Cognitive Toolkit 2.0版本支持在Windows和Ubuntu Linux環(huán)境下自動部署,但是不支持MacOS系統(tǒng)。2.0組件可以處理來自Python,C++或BrainScript的多維密集或稀疏數(shù)據(jù)。認(rèn)知工具包包括各種各樣的神經(jīng)網(wǎng)絡(luò)類型,F(xiàn)FN,CNN,RNN/LSTM,批次標(biāo)準(zhǔn)化等。它支持強(qiáng)化學(xué)習(xí)、生成對抗網(wǎng)絡(luò)、監(jiān)督和非監(jiān)督學(xué)習(xí)、自動超參數(shù)調(diào)整,以及從Python添加新的用戶定義的核心組件在GPU上運(yùn)行的能力,能夠在多個(gè)GPU和機(jī)器上并行運(yùn)行。另外,還增加了對壓縮模式的支持,在壓縮模式下框架可以更容易地在低功耗的邊緣設(shè)備進(jìn)行部署,從而擴(kuò)大機(jī)器學(xué)習(xí)的應(yīng)用范圍。
圖4 PaddlePaddle分布式架構(gòu)
在深度學(xué)習(xí)領(lǐng)域微軟致力于模型的標(biāo)準(zhǔn)化互通,微軟與亞馬遜聯(lián)手推出了Gluon API,CNTK也是最早支持ONNX(the Open Neural Network Exchange)格式的框架之一。目前,開源社區(qū)還在不斷集成CNTK新的功能,CNTK2.0以上版本甚至支持Keras的前端,可使用Tensorboard作為其可視化調(diào)試工具。
PaddlePaddle是百度自主研發(fā)的深度學(xué)習(xí)平臺,來自于百度深度學(xué)習(xí)研究院(IDL),是由徐偉博士帶領(lǐng)十人左右小而美的團(tuán)隊(duì)開發(fā)的,不涉及業(yè)務(wù)的代碼均已經(jīng)在2016年開源。
PaddlePaddle采用PServer和Trainer的架構(gòu),如圖4所示,在多機(jī)并行架構(gòu)中數(shù)據(jù)分配到不同節(jié)點(diǎn),圖中灰色部分表示機(jī)器,方框里表示一個(gè)進(jìn)程,PServer和Trainer是分布在兩個(gè)進(jìn)程里,中間是網(wǎng)絡(luò)通訊連接,底層通信不依賴于任何其它網(wǎng)絡(luò)框架。這種架構(gòu)天生支持CPU/GPU的分布式模式,就算沒有GPU也可以通過分布式CPUs進(jìn)行大數(shù)據(jù)的深度學(xué)習(xí)。
PaddlePaddle支持的Layer類型豐富,F(xiàn)CN、CTC、BN、LSTM等悉數(shù)在列;同時(shí)也支持從一步一步的數(shù)學(xué)運(yùn)算操作(OP)開始配深度學(xué)習(xí)網(wǎng)絡(luò)(矩陣乘發(fā),加法,激活等);對于成型的Layer(LSTM)使用C++重新優(yōu)化。PaddlePaddle是企業(yè)解決現(xiàn)有問題的框架,不是純粹的科研框架;企業(yè)需要性能,也需要靈活性。
百度是搞深度學(xué)習(xí)比較早的公司,Paddle系統(tǒng)在內(nèi)部已經(jīng)使用多年,為鳳巢等數(shù)十個(gè)業(yè)務(wù)提供支持,技術(shù)成熟,PaddlePaddle開源社區(qū)也比較活躍。
Theano由蒙特利爾大學(xué)算法學(xué)習(xí)人工智能實(shí)驗(yàn)室(MILA)維護(hù)。支持快速開發(fā)高效的機(jī)器學(xué)習(xí)算法,在BSD協(xié)議下發(fā)布。Theano開創(chuàng)了將符號圖用于神經(jīng)網(wǎng)絡(luò)編程的趨勢。Theano的架構(gòu)如同一個(gè)黑箱,整個(gè)代碼庫和接口使用Python,其中C/CUDA代碼被打包成Python字符串,這使得開發(fā)人員很難調(diào)試和重構(gòu)。Theano是很好的學(xué)術(shù)研究工具,在單個(gè)CPU上運(yùn)行的效率比TensorFlow更有效。然而,在開發(fā)和支持大型分布式應(yīng)用程序時(shí),使用Theano可能會遇到挑戰(zhàn)。
表1 各個(gè)開源框架在GitHub上2018年4月的數(shù)據(jù)統(tǒng)計(jì)
Deeplearning4J(DL4J)是用Java和Scala編寫的Apache2.0協(xié)議下的開源、分布式神經(jīng)網(wǎng)絡(luò)庫。DL4J最初由SkyMind公司的Adam Gibson開發(fā),是唯一集成了Hadoop和Spark的商業(yè)級深度學(xué)習(xí)網(wǎng)絡(luò),支持YARN(Hadoop的分布式應(yīng)用程序管理框架)和任意芯片數(shù)的GPU并行運(yùn)行,通過Hadoop和Spark協(xié)調(diào)多個(gè)主機(jī)線程。DL4J使用Map-Reduce來訓(xùn)練網(wǎng)絡(luò),同時(shí)依賴其它庫來執(zhí)行大型矩陣操作。DL4J支持多種深度網(wǎng)絡(luò)架構(gòu):RBM、DBN、CNN、RNN、RNTN和LTSM等。DL4J還支持矢量化庫Canova。
Keras由Python編寫,實(shí)現(xiàn)對TensorFlow、Theano的API封裝,微軟認(rèn)知工具包也在2.0版本增加了Python API Keras功能,Keras 2 API更是作為TensorFlow框架的一部分直接向用戶提供支持,因此,嚴(yán)格意義上Keras不算是深度學(xué)習(xí)框架,作為深度學(xué)習(xí)框架的前端更合適。
Chainer由日本的深度學(xué)習(xí)創(chuàng)業(yè)公司Preferred Networks開源,是一個(gè)基于Python的獨(dú)立的深度學(xué)習(xí)框架。Chainer通過支持兼容Numpy的數(shù)組間運(yùn)算的方式,提供了聲明神經(jīng)網(wǎng)絡(luò)的命令式方法。Chainer使用“邊運(yùn)行邊定義”的方法將“定義計(jì)算圖”和“輸入訓(xùn)練數(shù)據(jù)并計(jì)算損失函數(shù)”兩個(gè)步驟合并,計(jì)算圖不是在訓(xùn)練之前定義的,而是在訓(xùn)練過程中獲得的。Chainer還包括一個(gè)名為CuPy的基于GPU的數(shù)值計(jì)算庫。
其他還有眾多開源的機(jī)器學(xué)習(xí)框架,如Neon、DyNet、BigDL等,限于篇幅,文章不再介紹。
表1為各個(gè)開源框架在GitHub上2018年4月的數(shù)據(jù)統(tǒng)計(jì),可以看到TensorFlow是目前熱度最高的深度學(xué)習(xí)開源框架。
圖5 TensorFlow開源技術(shù)生態(tài)工具集
也有研究文獻(xiàn)對部分框架進(jìn)行了性能上的比對,所有的框架基于GPU都可以獲得較大的性能提升,但是框架之間的性能差異并不顯著。
谷歌的生態(tài)圈和戰(zhàn)略為TensorFlow提供了豐富的資源、完整的原型工具,以打造強(qiáng)大的技術(shù)生態(tài),這樣能讓谷歌從底層到上層擁有絕對控制權(quán),像安卓一樣,用戶只要在上層做應(yīng)用開發(fā),底層全交給谷歌完成。TensorFlow技術(shù)生態(tài)相關(guān)的工具如圖5所示。
圍繞TensorFlow的技術(shù)生態(tài)工具集從上至下可分為四大類:
第一類通過使用TensorFlow設(shè)計(jì),構(gòu)建和訓(xùn)練神經(jīng)網(wǎng)絡(luò)更容易,包括預(yù)建的或預(yù)訓(xùn)練的深度神經(jīng)網(wǎng)絡(luò),用于跟蹤訓(xùn)練進(jìn)度的圖形界面(TensorBoard)以及TensorFlow(Keras)的更高級別API。
第二類包含可以預(yù)判行為并易于管理的工具。
第三類是用于連接到其他流行的開源項(xiàng)目,如Hadoop、Spark、Docker和Kubernetes等,以及與之交互的組件。
最后一類是減少訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)的時(shí)間和成本的技術(shù)和硬件設(shè)施。在深度學(xué)習(xí)技術(shù)生態(tài)圈中,英偉達(dá)公司為眾多機(jī)器學(xué)習(xí)框架提供了GPU硬件加速,但是Google研發(fā)的TPU(張量處理單元)已經(jīng)讓谷歌不依賴于GPU,愈發(fā)顯示谷歌在人工智能領(lǐng)域的領(lǐng)先地位。
鑒于深度學(xué)習(xí)框架技術(shù)的重要性,其他各大廠商也紛紛自立門戶,于是出現(xiàn)了Facebook的Caffe2和PyTorch、亞馬遜的MXNet、微軟的認(rèn)知工具包等,但是無論哪一家,相比TensorFlow在生態(tài)工具的完整性、易用性、跨平臺等方面總有欠缺,而且眾多的框架訓(xùn)練出來的模型不能通用,事實(shí)上造成了深度學(xué)習(xí)框架的“碎片化”。
為了避免谷歌TensorFlow的一家獨(dú)大,解決深度學(xué)習(xí)框架模型兼容性,F(xiàn)acebook、微軟等企業(yè)牽頭推出了開放神經(jīng)網(wǎng)絡(luò)交換格式(ONNX),可使模型在不同框架之間進(jìn)行轉(zhuǎn)移,以方便各個(gè)深度學(xué)習(xí)框架之間模型的遷移,目前ONNX已經(jīng)得到AMD、ARM、華為、IBM、英特爾、高通等廠商支持。
蘋果公司專注于移動終端上的深度學(xué)習(xí),推出了移動設(shè)備上的機(jī)器學(xué)習(xí)編程框架Core ML,Core ML只支持在設(shè)備上使用模型推斷,而不是訓(xùn)練新模型。蘋果自研轉(zhuǎn)換器工具支持Caffe、Keras、MXNet、LIBSVM、scikit-learn和XCBoost等模型的轉(zhuǎn)換。
國內(nèi)外產(chǎn)業(yè)巨頭已經(jīng)紛紛意識到在人工智能領(lǐng)域通過開源技術(shù)建立產(chǎn)業(yè)生態(tài),是搶占產(chǎn)業(yè)制高點(diǎn)的重要手段,開源深度學(xué)習(xí)技術(shù)框架是產(chǎn)業(yè)鏈中重要的一環(huán)。通過深度學(xué)習(xí)平臺的開源化,可以擴(kuò)展技術(shù)應(yīng)用領(lǐng)域,深度影響人工智能全產(chǎn)業(yè)鏈。
開源深度學(xué)習(xí)框架的快速發(fā)展既有工業(yè)界的推動,也有學(xué)術(shù)界的貢獻(xiàn),工業(yè)界追求“how”,學(xué)術(shù)界重在“why”。從多個(gè)主流框架發(fā)展歷程來看,學(xué)術(shù)界培養(yǎng)出來的高端人才是推動深度學(xué)習(xí)框架技術(shù)的發(fā)展的核心力量。
當(dāng)前,開源深度學(xué)習(xí)框架百家爭鳴,TensorFlow雖然熱度較高,但也沒有強(qiáng)大到一統(tǒng)天下的地步,未來開源深度學(xué)習(xí)框架分庭抗?fàn)幍男蝿輰㈤L期存在,對于各個(gè)框架訓(xùn)練出來的模型進(jìn)行標(biāo)準(zhǔn)化互通將是業(yè)界努力的方向。
各類云服務(wù)平臺已經(jīng)開始引入AI服務(wù)能力,面對眾多的框架技術(shù)選擇,云平臺一般采用支持多種框架技術(shù)的方式,為各類型終端提供跨平臺的云端模型訓(xùn)練和推斷服務(wù)。
TensorFlow、MXNet、Caffe2等均支持ARM架構(gòu),未來,隨著物聯(lián)網(wǎng)和5G通信技術(shù)的發(fā)展,云和終端的無縫融合、深度學(xué)習(xí)嵌入到移動設(shè)備、學(xué)習(xí)框架向終端側(cè)延伸、邊緣計(jì)算參與訓(xùn)練和推斷等都將是可能的技術(shù)發(fā)展方向。
本文介紹了主流開源框架技術(shù)的發(fā)展現(xiàn)狀和趨勢。當(dāng)前,TensorFlow作為主流深度學(xué)習(xí)框架熱度最高的技術(shù),是國內(nèi)安卓生態(tài)圈內(nèi)用戶必需跟進(jìn)的深度學(xué)習(xí)框架,同時(shí),為避免被一家廠商的技術(shù)壟斷,也有必要同時(shí)關(guān)注其他框架的技術(shù)進(jìn)展,對于安卓生態(tài)圈以外的用戶,MXNet、PyTorch也是不錯的選擇,具體還需要根據(jù)用戶自身的生產(chǎn)或科研需求進(jìn)行選擇。業(yè)界通過聯(lián)盟的方式正在致力于解決開源深度學(xué)習(xí)框架的“碎片化”問題,需要密切跟蹤ONNX、Gluon這類跨框架的開源技術(shù)及組織,為企業(yè)自身AI技術(shù)選型提供參考。■