唐舸軒,黨云龍,張常有,周藝華
(1.北京工業(yè)大學(xué) 計算機科學(xué)與技術(shù)學(xué)院,北京 100124;
2.中國科學(xué)院軟件所并行軟件與計算科學(xué)實驗室,北京 100190;
3.石家莊鐵道大學(xué) 信息科學(xué)與技術(shù)學(xué)院,石家莊 050043)
?
基于Julia云平臺的交互式深度學(xué)習(xí)模式
唐舸軒1,2,黨云龍3,張常有2,周藝華1
(1.北京工業(yè)大學(xué) 計算機科學(xué)與技術(shù)學(xué)院,北京 100124;
2.中國科學(xué)院軟件所并行軟件與計算科學(xué)實驗室,北京 100190;
3.石家莊鐵道大學(xué) 信息科學(xué)與技術(shù)學(xué)院,石家莊 050043)
摘要:為降低深度學(xué)習(xí)程序的開發(fā)難度,提出了一種基于Julia云平臺的交互式深度學(xué)習(xí)模式。設(shè)計了一套深度學(xué)習(xí)原語,用Julia實現(xiàn)原語,為Julia程序員提供調(diào)用接口,構(gòu)建交互分析系統(tǒng);并提供GPU/CPU實現(xiàn)接口,由云端系統(tǒng)根據(jù)用戶情形自動優(yōu)選;最后實現(xiàn)了基于深度學(xué)習(xí)的圖像交互分析案例,驗證原語體系的完備性和Julia云平臺的交互支持能力。實驗結(jié)果表明,GPU的運行速度比CPU快近30倍。Julia程序員只需通過調(diào)用原語,設(shè)置相關(guān)參數(shù),就可以使用并行化的算法。
關(guān)鍵詞:Julia;高性能云;交互式;深度學(xué)習(xí)
近年來在人工智能領(lǐng)域的研究中,深度學(xué)習(xí)成為了熱點。自2006年GEOFFERY,et al在Science雜志發(fā)表那篇著名的論文開始[1],深度學(xué)習(xí)的熱潮從學(xué)術(shù)界席卷到工業(yè)界。放眼國外,“谷歌大腦(Google Brain)”項目用1.6萬個CPU核的并行計算平臺訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)(Deep Neural Networks,DNN)的機器學(xué)習(xí)模型,在語音和圖像識別等領(lǐng)域取得了巨大的成功。國內(nèi)方面,百度深度學(xué)習(xí)研究院將深度學(xué)習(xí)技術(shù)運用到廣告系統(tǒng)、網(wǎng)頁搜索、圖像識別等領(lǐng)域,也取得了很大成就。
從近年來國內(nèi)公司實踐來看,深度學(xué)習(xí)主要擁有如下三個方面的優(yōu)勢[2]。深度學(xué)習(xí)符合大數(shù)據(jù)的發(fā)展潮流。它集中體現(xiàn)了機器學(xué)習(xí)算法的三個大趨勢:用較為復(fù)雜的模型降低偏差,用大數(shù)據(jù)提升統(tǒng)計估計的準(zhǔn)確度,用可擴展的梯度下降算法求解大規(guī)模優(yōu)化問題。深度學(xué)習(xí)是一個端到端的學(xué)習(xí)系統(tǒng)。直接作用于原始數(shù)據(jù),自動逐層進(jìn)行特征學(xué)習(xí),最終得到正確的答案。深度學(xué)習(xí)是一個建模框架,其內(nèi)部的特征并非全然不可知。利用這種框架,可以表達(dá)數(shù)據(jù)內(nèi)在的豐富關(guān)系和結(jié)構(gòu),比如可以用遞歸神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)處理自然語言等數(shù)據(jù)的時序問題,用卷積處理圖像中的二維空間結(jié)構(gòu),解決圖像識別中的問題。
如何充分利用深度學(xué)習(xí)的優(yōu)勢,使用戶更加方便的處理深度學(xué)習(xí)領(lǐng)域的問題,成為了關(guān)注的方向。Julia云平臺提供了一種有效的解決方法。
Julia從語言上支持并行和分布式計算,易編程,是一種動態(tài)高性能的高級編程語言,適合科學(xué)和數(shù)值計算,性能可與傳統(tǒng)靜態(tài)類型語言媲美。Julia語言基于消息傳遞機制為多處理器或多核環(huán)境提供并行計算環(huán)境,程序能夠運行于分布式存儲的集群。不同于MPI的消息傳遞機制,Julia采用“單邊”通信機制。程序員只需在程序中顯示控制多個處理器,調(diào)用高層操作實現(xiàn)協(xié)同計算。
Julia語言支持并行和分布式計算,很好地適應(yīng)了深度學(xué)習(xí)在大數(shù)據(jù)環(huán)境下的應(yīng)用需求?;贘ulia云平臺的深度學(xué)習(xí)模式具有如下優(yōu)勢:1)將深度學(xué)習(xí)模型封裝成簡單原語,方便了程序員對深度學(xué)習(xí)模型的使用。程序員不需要關(guān)注深度學(xué)習(xí)模型的具體實現(xiàn)細(xì)節(jié),只需簡單的原語操作就可實現(xiàn)深度學(xué)習(xí)模型的訓(xùn)練、測試等過程。2)基于Julia云平臺的深度學(xué)習(xí)模式,不需要程序員在本機上配置模型運行環(huán)境,減輕了程序員使用深度學(xué)習(xí)模型的困難。3)該模式支持CPU和GPU兩種方案,程序員可以通過簡單的參數(shù)設(shè)置,使用不同的深度學(xué)習(xí)模型,同時平臺根據(jù)用戶情況自動優(yōu)選CPU或GPU的運行方式。
1相關(guān)工作
傳統(tǒng)的深度學(xué)習(xí)模型包括受限制玻爾茲曼機、深度置信網(wǎng)絡(luò)、遞歸神經(jīng)網(wǎng)絡(luò)、卷積神經(jīng)網(wǎng)絡(luò)。不同的模型在處理各自領(lǐng)域的問題時都取得了成功。在圖像識別領(lǐng)域中,卷積神經(jīng)網(wǎng)絡(luò)的發(fā)展相對成熟。
1.1卷積神經(jīng)網(wǎng)絡(luò)
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNNs)是一個權(quán)值共享的網(wǎng)絡(luò)結(jié)構(gòu),這種結(jié)構(gòu)降低了網(wǎng)絡(luò)模型的復(fù)雜程度,有效的減少了權(quán)值的數(shù)量,避免了傳統(tǒng)識別算法當(dāng)中復(fù)雜的特征提取和數(shù)據(jù)重建過程,從而能夠直接使用原始圖片,因而在圖像識別領(lǐng)域得到了廣泛運用。
1962年,Hubel和Wiesel提出了基于貓視覺皮層的結(jié)構(gòu)模型[3],同時提出了感受野的概念。1984年,日本學(xué)者Fukushima提出了基于感受野的神經(jīng)認(rèn)知機[4],這是感受野概念第一次在人工神經(jīng)網(wǎng)絡(luò)領(lǐng)域出現(xiàn),也可以認(rèn)為是卷積神經(jīng)網(wǎng)絡(luò)的第一個實現(xiàn)網(wǎng)絡(luò)。隨后,Lecun,et al[5-6]基于誤差梯度算法設(shè)計并訓(xùn)練出了卷積神經(jīng)網(wǎng)絡(luò),并且在一些模式識別任務(wù)中展現(xiàn)出了相對于當(dāng)時其他方法的領(lǐng)先性能。
卷積神經(jīng)網(wǎng)絡(luò)通過3個方法來實現(xiàn)識別位移、縮放和扭曲不變性:局部感受野、權(quán)值共享和次抽樣。局部感受野指的是每一個網(wǎng)絡(luò)層的神經(jīng)元只與上一層的小領(lǐng)域內(nèi)的神經(jīng)單元連接,通過局部感受野,每個神經(jīng)元可以提取初級的視覺特證,如方向線段、端點、角點等。權(quán)值共享使得卷積神經(jīng)網(wǎng)絡(luò)具有更小的參數(shù)。次抽樣可以減少特征的分辨率,實現(xiàn)對位移、縮放和其他形式扭曲的不變性。一般來說,卷積層緊接一個次抽樣層,以此減少計算時間和建立空間結(jié)構(gòu)的不變性。
卷積神經(jīng)網(wǎng)絡(luò)的的迅速發(fā)展,出現(xiàn)了一些比較著名的基于卷積神經(jīng)網(wǎng)絡(luò)的深度模型框架,其中最有名的是Caffe深度學(xué)習(xí)框架。
1.2Caffe深度學(xué)習(xí)模型
Caffe是一個清晰、高效并且模塊化的深度學(xué)習(xí)框架,由Berkeley Vision and Learning Center (BVLC)開發(fā)。
Caffe深度學(xué)習(xí)模型的優(yōu)勢主要體現(xiàn)在:強大的表達(dá)能力,Caffe所有的模型定義、優(yōu)化設(shè)置、以及預(yù)訓(xùn)練的權(quán)重等都是以文本而非代碼的形式給出。速度快,Caffe能夠運行各種優(yōu)秀的模型并且處理海量的數(shù)據(jù)。Caffe可以在一個NVIDIA K40 GPU基礎(chǔ)上,每天處理60 MB的圖像,訓(xùn)練一張圖片只需要4 ms。高度模塊化,Caffe模塊化的設(shè)計,使之能夠非常方便的擴展到新任務(wù)和設(shè)置上。開源與社區(qū),Caffe發(fā)布之初便參與到了BSD的社區(qū)討論之中,Caffe的源碼可以在github上直接下載。
1.3Julia云平臺
面向高性能計算的云平臺包括三個子系統(tǒng):用戶編程環(huán)境(UPE),支持用戶編寫、修訂、調(diào)試Julia程序;消息通信傳遞系統(tǒng)(MPS,Message Passing System),在編程環(huán)境和運行環(huán)境之間傳遞源碼程序和資源參數(shù)的消息傳遞系統(tǒng);高性能計算環(huán)境(HCE)。各系統(tǒng)之間的關(guān)系如圖1所示。在Julia云平臺上使用深度學(xué)習(xí)模式,程序員可以更加關(guān)注任務(wù)的實現(xiàn),不需知道深度學(xué)習(xí)實現(xiàn)的具體方法,甚至不用安裝Julia編程環(huán)境和深度學(xué)習(xí)模型運行環(huán)境,這為程序員的編程提供了極大的便利。
圖1 編程環(huán)境圖體系結(jié)構(gòu)Fig.1 The architecture of programming environment
1.4基于云平臺的深度學(xué)習(xí)
目前,深度學(xué)習(xí)各種模型存在較為分散,少有針對深度學(xué)習(xí)模式的統(tǒng)一庫。本文基于云平臺,利用Julia語言,將不同深度學(xué)習(xí)模型封裝成庫供用戶使用,簡化了用戶操作。以卷及神經(jīng)網(wǎng)絡(luò)為例,用戶如果需要使用卷及神經(jīng)網(wǎng)絡(luò)模型,需要在本機上安裝配置相應(yīng)環(huán)境,而利用Julia語言將其封裝成基本原語之后,可以將運行過程移至后端服務(wù)器,用戶不必關(guān)心不同模型需要的不同環(huán)境。Caffe深度學(xué)習(xí)框架提供了Matlab等對外接口,在此基礎(chǔ)上,利用Julia語言提供一套簡潔的原語對外使用,充分利用Julia語言支持并行和分布式計算的特點,提高數(shù)據(jù)預(yù)處理過程的效率,進(jìn)而提高深度學(xué)習(xí)模型的訓(xùn)練和測試效率。
2案例研究
在Julia云平臺的交互式深度學(xué)習(xí)模式中,各種深度學(xué)習(xí)模型對用戶來說是透明的,用戶不需要去了解深度學(xué)習(xí)模型是如何實現(xiàn)的,只需要專注大粒度任務(wù)。
通過調(diào)整參數(shù)選擇不同的深度學(xué)習(xí)模型,平臺根據(jù)用戶情形自動優(yōu)選CPU或GPU運行策略。
實現(xiàn)深度神經(jīng)網(wǎng)絡(luò)一般包括如下過程:模型的定義、數(shù)據(jù)的預(yù)處理、訓(xùn)練、測試等。將這些過程提取為基本原語并提供給Julia云平臺,用戶在云平臺環(huán)境下,只需輸入簡單的Julia命令,調(diào)整參數(shù),就可以實現(xiàn)這些過程。利用Caffe深度學(xué)習(xí)框架,以單個圖像的識別分類為案例,說明Julia云平臺和深度學(xué)習(xí)模型是如何協(xié)同工作。
測試案例用到的主要函數(shù)為test-images(const char* model-filename,const char* weights-filename,const char* image-filename,float* output-result-ptr,int nSize);
其中model-filename為深度學(xué)習(xí)模型文件;weights-filename為與模型文件對應(yīng)的權(quán)值文件;image-filename為需要測試的圖片;output-result-ptr為輸出參數(shù),返回一個大小為nSize的分類結(jié)果數(shù)組。用戶可以將不同的模型賦值給model-filename實現(xiàn)多個深度學(xué)習(xí)模型的使用,案例中我們選擇ImageNet競賽模型。
測試案例實現(xiàn)步驟如下:
1) 圖片規(guī)則化:將輸入圖片統(tǒng)一處理為固定大小,保證長寬比例為1∶1;
2) 子圖抽樣:依次從圖的左上、右上、左下、右下,中間抽樣,并對抽樣的子圖翻轉(zhuǎn),得到10張輸入數(shù)據(jù)。保證識別內(nèi)容在抽樣子圖中;
3) 裝載庫:調(diào)用test-images函數(shù),將圖片數(shù)據(jù)輸入模型,得到分類結(jié)果;
4) 對分類結(jié)果進(jìn)行加權(quán)投票統(tǒng)計,得票最高的即為這張測試圖片的最終分類;
5) 測試結(jié)果可視化。
測試流程見圖2所示:
圖2 測試案例流程Fig.2 Test case procedure
3深度學(xué)習(xí)原語封裝
3.1基本原語
為深度學(xué)習(xí)模型設(shè)計了一套基本原語,供Julia云平臺使用。程序員通過基本原語操作,即可調(diào)用不同的深度學(xué)習(xí)模型。同時還能根據(jù)用戶具體情況,最優(yōu)化的選擇CPU/GPU的運行策略,減輕了用戶編寫并行程序的負(fù)擔(dān),本文列舉了深度學(xué)習(xí)常用原語,見表1。
表1 深度學(xué)習(xí)常用原語
3.2函數(shù)庫層次結(jié)構(gòu)
為Julia云平臺提供了一個深度學(xué)習(xí)模式庫。模式庫從結(jié)構(gòu)上分為模型層、接口層、優(yōu)化策略層、原語層,如圖3所示。
1) 模型層:包含深度學(xué)習(xí)領(lǐng)域的各種基本模型,為更上層接口提供深度學(xué)習(xí)方法;
2) 接口層:基本原語的底層實現(xiàn)源碼,為Julia平臺提供API接口,根據(jù)用戶需求,同一原語包含不同實現(xiàn),而具體實現(xiàn)方法由接口層提供。由優(yōu)化策略層自行調(diào)度;
3) 優(yōu)化策略層:對于相同原語的不同實現(xiàn),平臺按照最優(yōu)化的策略選擇最佳性能的實現(xiàn)方式提供給用戶,同樣該策略允許根據(jù)用戶的不同偏好指定函數(shù)實現(xiàn);
4) 原語層:原語層直接面向用戶,為Julia程序員提供接口。對用戶來說,優(yōu)化策略層、接口層、模型層是完全透明的。
4實驗結(jié)果
實驗平臺參數(shù)為:CPU Intel(R),E5-2620,2.10 GHZ*24核心,Matrox GPU,操作系統(tǒng)為Ubuntu14.04,Julia版本為Julia3.0.7,采用ImageNet競賽的深度學(xué)習(xí)模型VGG-CNN-S-deploy.prototxt[11]。本文選擇10張圖片作為測試數(shù)據(jù)如圖4所示。
對于每一張圖,進(jìn)行抽樣預(yù)處理,將預(yù)處理后的圖輸入模型,得到分類結(jié)果,如圖5所示。
圖4 10張測試數(shù)據(jù)Fig.4 10 test images
圖5 單張圖片的抽樣提取Fig.5 The sample sub-image of a single image
以lion為例,抽樣子圖所屬類別的概率分布如圖6所示,其中橫坐標(biāo)表示1000個分類結(jié)果,縱坐標(biāo)表示所屬某個類別的概率。從圖中可以清晰的看到,分類到lion類別的概率明顯高于其他類別概率。
圖6 抽樣子圖所屬類別概率分布Fig.6 The classification probabillity of sub-image
最終,對抽樣的10張圖片進(jìn)行加權(quán)求值,并統(tǒng)計得票數(shù),可知該測試圖片屬于lion類別的得票最高,如圖7所示。
圖7 投票結(jié)果Fig.7 Classification resule
在用來測試的10張圖片當(dāng)中,9張圖片正確分類。用戶不需要理解深度學(xué)習(xí)模型的工作過程,只需要選擇測試所用的模型,就可以準(zhǔn)確完成圖片分類工作,從而減少了編程負(fù)擔(dān)。
5性能分析
從實驗結(jié)果可知,Julia云平臺上的深度學(xué)習(xí)模式具有準(zhǔn)確性、靈活高效性、易操作的優(yōu)點。用戶不必了解深度學(xué)習(xí)模型具體實現(xiàn)過程,就可以使用深度學(xué)習(xí)領(lǐng)域的模型。
5.1準(zhǔn)確性
深度學(xué)習(xí)在處理圖像分類問題中具有明顯優(yōu)勢,案例結(jié)果表明,在測試的圖片當(dāng)中,只有一張分類錯誤。深度學(xué)習(xí)在MNIST手寫體數(shù)字識別上的準(zhǔn)確率高達(dá)99%,本文案例所用模型在ImageNet數(shù)據(jù)集上的Top-5錯誤率也只有13.1%。
5.2靈活高效性
Julia云平臺的深度學(xué)習(xí)支持CPU和GPU兩種模式,在調(diào)用原語時只需將model設(shè)置為GPU,就可以使用并行化的深度學(xué)習(xí)模型,減少了編寫并行程序的麻煩。以MNIST數(shù)據(jù)集測試為例,數(shù)據(jù)訓(xùn)練集包含60 000張手寫體數(shù)字圖片。在訓(xùn)練一個神經(jīng)網(wǎng)絡(luò)過程中,GPU運行時間比CPU運行時間快近30倍;而在測試過程中,隨著迭代次數(shù)的增加,GPU的加速效果愈發(fā)明顯,如圖8所示。
圖8 CPU與GPU運行時間對比Fig.8 The comparison of CPU and GPU running time
5.3易操作
Julia語言可以通過ccall語法直接調(diào)用動態(tài)庫中的函數(shù),在云平臺當(dāng)中,Julia對用戶提供的接口都是已封裝好的基本原語,深度學(xué)習(xí)模型的實現(xiàn)對用戶來說是完全透明的,這樣用戶只需關(guān)心大粒度的任務(wù)。在本文案例中,只需編寫簡單的Julia語句,就可以實現(xiàn)單張圖片的分類測試,如圖9所示。這使得用戶在使用深度學(xué)習(xí)模型時更加方便,提高了開發(fā)效率。同時,深度學(xué)習(xí)模式支持CPU和GPU兩種實現(xiàn),用戶使用GPU的深度學(xué)習(xí)模型,只需將參數(shù)mode設(shè)置為GPU即可,使之更方便。
mode_file=model.prototxt
weight_file=weight.caffemodel
jinit(mode_file) #初始化深度學(xué)習(xí)模型
jtrain(model_file,data,GPU)
#訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型
img=imresize(original, new_size)
#進(jìn)行圖像規(guī)范尺寸變換 cutedImg=prepare_image(img) #子圖抽樣
jtest(model_file,weight_file,cutedImg,GPU)
#調(diào)用測試圖片過程 vplot() #可視化操作
圖9Julia測試所用源碼
Fig.9The source code of Julia Language test
6結(jié)論
為Julia云平臺設(shè)計了一套深度學(xué)習(xí)模型原語,并封裝成動態(tài)庫,供Julia程序員調(diào)用,構(gòu)建了Julia與深度學(xué)習(xí)模式的交互式分析系統(tǒng)。同時提供了GPU/CPU兩種實現(xiàn)方案,用戶通過設(shè)置接口參數(shù)即可實現(xiàn)不同深度學(xué)習(xí)模型的使用,系統(tǒng)根據(jù)用戶情況自動優(yōu)選CPU/GPU實現(xiàn)方案。為用戶使用深度學(xué)習(xí)模型提供了便捷,同時減少了編寫并行化深度學(xué)習(xí)程序的繁瑣。
筆者今后將更加注重原語的提取與開發(fā),滿足用戶使用深度學(xué)習(xí)的多種要求,讓用戶使用模型時更加方便靈活。同時,也將充分利用Julia支持并行化的特點,在諸如圖像預(yù)處理過程中,采用并行化的策略,提高效率與程序運行速度。
參考文獻(xiàn):
[1]GEOFFERY E H,RUSLAN R S.Reducing the dimensionality of data with neural networks[J].Science,2006,313(5786):504-507.
[2]都大龍,余軼男,羅恒.基于深度學(xué)習(xí)的圖像識別進(jìn)展:百度的若干實踐[J].中國計算機學(xué)會通訊,2015,11(4):11-16.
[3]HUBEL D H,WIESEL T N.Recptive fields,binocular interaction,and functional architecture in the cat’s visual cortex[J].Journal of Physiology,1962,160(1):106-154.
[4]FUKUSHIMA K.Neocognition:a self-organizing neural network model for a mechanism of pattern recognition unaffected by shift in postion[J].Biological Cybernetics,1980,36(4):193-202.
[5]LECUN Y,BOTTOU L,HAFFNER P.Gradient-based learning applied to document recognition[J].Proceedings of the IEEE,1998,86(11):2278-2324.
[6]LECUN Y,Boser B,Denker J S,et al.Backpropagation applied to handwritten zip code recognition[J].Neural Computation,1989, 1(4):541-551.
[7]CHATFIELD K,SIMONYAN K,VEDALDI A,et al.Return of the devil in the details:delving deep into convolutional nets[C]∥Machine Vision Conference,British:Eprint Arxiv,2014.
(編輯:劉笑達(dá))
An Interactive Deep Learning Model Based on Julia Cloud Platform
TANG Gexuan1,2,DANG Yunlong3,ZHANG Changyou2,ZHOU Yihua1
(1.SchoolofComputerScienceandTechnology,BeijingUniversityofTechnology,Beijing100124,China;2.StateKeyLaboratoryofComputingScience,theChineseAcademyofSciences,Beijing100190,China;3.InformationScienceandTechnology,ShijiazhuangTiedaoUniversity,ShijiazhuangHebei050043,China)
Abstract:In order to simplify the program development based on deep learning model,an interactive deep learning model based on Julia Cloud Platform is introduced in this paper. The content of our study includes:Design a deep learning primitive function: Implement primitive function in Julia language, supply interface for Julia programmer and construct interactive analysis system. Implement both GPU and CPU interfaces,which can be automatically selected by the Cloud Platform according to whichever situation the clients are in. Implement image interactive analysis case based on deep learning and verify the completeness of primitive function and interactive support ability of Julia Cloud Platform. The experiment result shows that running speed of GPU case is up to 30 times faster than that of CPU case.Julia programmer only needs to call primitive function and set some parameters to use the parallel algorithm.
Key words:julia;high-performance cloud;interactive;deep learning
中圖分類號:TP312.1
文獻(xiàn)標(biāo)識碼:A
DOI:10.16355/j.cnki.issn1007-9432tyut.2016.01.017
作者簡介:唐舸軒(1992-),男,湖南湘潭人,碩士生,主要從事深度學(xué)習(xí)、并行與分布式計算研究,(E-mail)Charlietong 515@163.com通訊作者:張常有,教授,博士,主要從事并行與分布式計算、協(xié)同計算等研究,(E-mail)changyou@iscas.ac.cn
基金項目:國家自然科學(xué)基金:項目資助“面向企業(yè)創(chuàng)新計算的高性能云服務(wù)平臺”(61379048)
收稿日期:2015-05-26
文章編號:1007-9432(2016)01-0085-06