INTRODUCTION

一.前言

一開始我們是以加速deep learning的方向為目標。原本是試著要把一些deep learning的framework port到UC Berkley新開發的指令集RISCV,但後來遇到許多的困難以失敗告終。在這過程中我們因此了解到了許多深度學習背後的執行環境架構,藉著我們對deep learning framework的了解,選擇了Caffe並試著去更改系統預設的核心數目,引用的Library,來與原先比較看是否能達成加速的目的。

二.原理分析

從一開始的平台分析我們用了嘗試了許多種平台,如Caffe,tensorflow,keras,mxnet……等等.經過一番比較後我們決定用Caffe[1]。Caffe的架構可以從他的資料結構看起,分別是Blob, Layer, Net和Slover。Blob是最基礎的資料結構,用來儲存各種參數跟產生的數據,為四維的結構。

Data: Number*Channel*Height*Width

Convolution weight: Output*Input*Height*Width

Convolution bias: Output*1*1*1

而Layer顧名思義就是neural network裡面的layer,用來實現convolution、pooling……等。在Caffe裡預先已經定義好幾種layer,如loss layer、data layer……等,而每種layer又可以定義forward或者是backward。

Net則是由許多layer組成的Direct acyclic graph,就像是一個neural network的整整體model。

Slover則是決定這個model要如何運行,形同model的使用手冊。

我們一開始的目的是將單核的Caffe改成多核.在我們的觀察中。Caffe在很多神經網路的計算如convolution最後到底層都會變成許多linear algebra的運算如matrices multiplication。到math_function.cpp裡後我們發現而Caffe在與矩陣相關的計算會引用到BLAS(Basic Linear Algebra Subprograms)。

Caffe官方推薦的BLAS有三種:ATLAS,Intel MKL和OpenBLAS,其中ATLAS的是Caffe官方預設的BLAS,但缺點是其似乎不太支援multi-core,因此我們在實驗的時候也僅能測試單核的效率.而Intel MKL不是免費的所以我們無法進行實驗,而OpenBLAS是免費而且open source,並且支援多核心。另外還有Caffe2使用的EigenBLAS。

在實驗前我們做了一個簡單的預測,卻發現我們的預測有衝突的部分(詳情請參閱)唯一得到的推論是多核跑的OpenBLAS的效果會優於單核跑的ATLAS。

三.系統設計

我們的model採用最簡單也最常見的model:利用CNN(LeNet)來解MNIST。

四.實驗結論

我們可以發現其實改到多核心並沒有我們想像加速的那麼多。主要原因應該是因為傳遞資料的路徑沒有增加的關係。查資料後發現這是硬體上經常遇到的memory bound問題。而optimized過的OpenBLAS基本上沒有進行加速,原因我們還沒找出來,這需要我們更深入去了解具體上OpenBLAS改了那些Code,不過由於只是開源社群的一個分支,所以相關資料是非常難以找到的,且我們也沒有足夠的精力去看過每一行code。

而換成caffe2以後效率增幅了不少,這部分我想是整體架構都修改掉了的關係。如果以後有機會,我們可以透過Caffe2繼續比較不同的BLAS如Intel_MKL,GotoBlas,apple accerelate framework來繼續加速與測試多核心運行模型。caffe2雖然剛釋出但介面上與各種調整目前似乎都越來越好,甚至也比caffe好,而關於我們另一部份調整precision的部分,這功能caffe是不支援的,caffe僅能將32-bit 改成64-bit來運行(增加準確度),但這明顯與我們想要加速運行的目的相反因此我們也沒做。而caffe2是有支援這功能的,由Nvidia釋出的文件顯示,目前他們合作開發caffe2運行16-bit的參數模型,不過那時候僅有開法人員可以有這項功能,未來等到caffe2開放這項選擇方案時,也是我們可以去繼續實驗分析的部分。


Fig. 1

心得感想

這次為期一年的計畫與其說學到了Caffe的技術,讓我們更有感觸的是學術研究的困難與未知和計畫管理的重要性.我們並沒有詳細的計劃管理,基本上每次 meeting 結束都會有預定要完成的事 情,但隨著我們了解越深也發現許多問題真的不是我們可以解決的,牽涉到 framework 的整體架構,只有三個人的我們實在是無法解決。隨著進度推移我們也越來越無法在每周完成預訂事項,後來便改成討論為基礎的計畫推進。畢竟問題方面實在有越來越多問題我們無法處理。在此同時教授則是會建議我們有那些相 關研究與其他 framework 可以去研究,這也是我們會研究與轉換那麼多 framework 的原因,我想教授也深知有些問題只靠我們真的無法解決,因此建議我們轉換工具。到了最後階段原定計畫沒有辦法推進,於是我們也以之前所研究過的內容, 與教授討論出一個能展現這段時間所學習到的內容的題目。這也是為甚麼後來的題目與原先不同。