
原作者:Murat Demirbas? ? 2017年9月16日星期六
翻譯:Wanglin Luo
????2016年該論文發(fā)表了基于OpenCL架構(gòu)的深度學(xué)習(xí)框架Caffe。文中明確指出,Caffe已經(jīng)將底層基礎(chǔ)開發(fā)架構(gòu)CUDA替換成了通用規(guī)范的開源架構(gòu)OpenCL。Caffe源碼最先提交在AMD公司的GitHub開源倉(cāng)庫(kù)https://github.com/amd/OpenCL-caffe下,然后最終提交至了伯克利大學(xué)視覺(jué)實(shí)驗(yàn)室https://github.com/BVLC/caffe/tree/opencl進(jìn)行維護(hù)。
????日常開發(fā)中,一旦我們開發(fā)訓(xùn)練好DNN(深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò))模型后,我們總希望能以最簡(jiǎn)單的方式將其部署到各個(gè)平臺(tái)的不同應(yīng)用程序中,比如服務(wù)器、NVDIA GPU、AMD GPU、ARM GPU、甚至智能手機(jī)和平板電腦等。但事與愿違,大多數(shù)深度學(xué)習(xí)框架,為兼容英偉達(dá)GPUs,也包括Caffe在內(nèi)都集成了CUDA工具庫(kù),然而這限制了跨平臺(tái)的兼容性。
????OpenCL 支持異構(gòu)計(jì)算,具有跨平臺(tái)遷移的能力。因?yàn)樗@得了大部分商業(yè)芯片制造商的支持,例如Altera,AMD,Apple,ARM Holdings,Creative Technology,IBM,Imagination Technologies,Intel,Nvidia,Qualcomm,Samsung,Vivante,Xilinx,ZiiLABS等。為了保證平臺(tái)兼容性,OpenCL 會(huì)檢查特定的驅(qū)動(dòng)并在運(yùn)行時(shí)編譯。
????OpenCL最初由Apple公司開發(fā),后來(lái)將這一草案提交至Khronos Group團(tuán)隊(duì)。它被 Android、Linux、FreeBSD、MacOS 和 Windows 在內(nèi)的很多操作系統(tǒng)支持。
OpenCL基礎(chǔ)架構(gòu)遷移和優(yōu)化
????Caffe框架最初是用C++和CUDA編寫開發(fā)。Caffe的CUDA層負(fù)責(zé)優(yōu)化硬件資源分配和使用,例如CPU和GPU間任務(wù)調(diào)度、內(nèi)存管理和任務(wù)傳輸。由于 CUDA和OpenCL在設(shè)備抽象、緩存管理、同步處理和數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn)上的差異,將底層基礎(chǔ)開發(fā)架構(gòu)CUDA替換成通用規(guī)范的開源架構(gòu)OpenCL并沒(méi)有看上去那么簡(jiǎn)單。
????文中的解決方案是,將OpenCL遷移過(guò)程分為兩個(gè)階段。第一階段是C++機(jī)器學(xué)習(xí)接口、OpenCL封裝器和GPU內(nèi)核這三個(gè)層的分層遷移。分層遷移意味著逐層移植各層,并使其各層進(jìn)行單元測(cè)試,以確保DNN深度神經(jīng)網(wǎng)絡(luò)算法的正確性和收斂性。
????在階段一中將接口、封裝器和內(nèi)核逐層都遷移到OpenCL下之后,階段二將著重優(yōu)化其性能。通過(guò)使用AMD分析工具、CodeXL、并結(jié)合OpenCL事件日志發(fā)現(xiàn),完成第一階段OpenCL的遷移后,還存在一些大的性能瓶頸。OpenCL 的在線編譯器會(huì)頻繁調(diào)用 clBuildProgram 來(lái)創(chuàng)建 GPU 內(nèi)核——訓(xùn)練 Cifar 數(shù)據(jù)集的 100 次迭代中,clBuildProgram 就調(diào)用了 63 次,占用總運(yùn)行時(shí)間多達(dá) 68%;另一個(gè)瓶頸在于,卷積層占用了大多數(shù)計(jì)算時(shí)間。由于不同層間矩陣形狀不規(guī)則(矩陣長(zhǎng)寬比過(guò)大),BLAS 的效果相當(dāng)差。
????為了解決這些問(wèn)題,本文提出了三種關(guān)鍵的優(yōu)化技術(shù),包括內(nèi)核緩存以避免OpenCL在線編譯開銷,一種用于提升數(shù)據(jù)并行性的批處理數(shù)據(jù)布局方案,以及用于提升任務(wù)并行性的多個(gè)命令隊(duì)列。優(yōu)化技術(shù)有效地將DNN問(wèn)題大小映射到現(xiàn)有的OpenCL數(shù)學(xué)庫(kù)中,并提高硬件資源利用率,其性能將提高4.5倍。
測(cè)評(píng)
????該測(cè)評(píng)對(duì)比了Caffe在CUDA與OpenCL等架構(gòu)下,分別在NVIDIA TitanX和AMD R9 Fury顯卡上,對(duì)ImageNet視覺(jué)資源庫(kù)進(jìn)行AlexNet DNN深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練,且在100頻次小批量的Alexnet模型訓(xùn)練中的性能表現(xiàn),其中CUDA下兼并了cuBLAS矩陣加速庫(kù)和cuDNN GPU加速庫(kù)的第二個(gè)版本。OpenCL兼并了clBLAS矩陣加速庫(kù)的原始版本和高性能的批處理。下圖所示優(yōu)化了clBLAS的OpenCL Caffe與cuBLAS Caffe的性能對(duì)比。

????相對(duì)于最佳性能下的機(jī)器學(xué)習(xí)cuDNN庫(kù),OpenCL Caffe仍然存在2倍的性能差距,因?yàn)樗狈ψ罴研阅?。作者認(rèn)為,綜合大約市價(jià)560美元的AMD R9 Fury和大約市價(jià)1000美元的NVIDIA TitanX的價(jià)格差異,以及目前的性能表現(xiàn),OpenCL caffe在性價(jià)比方面仍具有競(jìng)爭(zhēng)力。
跨平臺(tái)能力分析
????很自然地會(huì)考慮到一個(gè)問(wèn)題,就是通過(guò)在AMD顯卡上的測(cè)試,OpenCL架構(gòu)上的Caffe是否與ARM和MALI兼容呢?這方面的測(cè)試可以很好地反映 OpenCL 版 Caffe 的兼容性,然而并沒(méi)有在這篇文章中提及。
????但是,作者也覺(jué)察到了兼容性方面的問(wèn)題?!疤囟ㄖ圃焐痰臄U(kuò)展性和模板關(guān)鍵字方面存在一些差異。例如caffe在GPU內(nèi)核中使用了大量模板來(lái)支持不同的浮點(diǎn)精度。但事實(shí)證明,不同制造商的模板關(guān)鍵字不同,這增加了相同代碼不經(jīng)修改在不同平臺(tái)運(yùn)行的難度?!?
OpenCL深度學(xué)習(xí)框架的支持仍然不是很好,但愿它每天都在不斷優(yōu)化改進(jìn),正如本文所示。
論文幻燈片演示文稿地址:
http://www.iwocl.org/wp-content/uploads/iwocl-2016-opencl-caffe.pdf
感謝InfoQ翻譯團(tuán)隊(duì)Alice Ding的點(diǎn)評(píng):-)