1. 為什麼要進行dnn效能測試
深度神經網路(dnn)是隨著深度學習發展起來以後非常活躍的一類神經網路,在資料分類,影象識別等領域有廣泛應用[1][2]。dnn的訓練時間非常長,這一方面是由於它涉及到的資料量很大,確實處理起來需要耗費很多時間;另一方面是由於選擇了不合適的計算方法(如矩陣乘法,啟用函式,沒有使用gpu加速)等造成的。因此當前亟待解決的問題是什麼樣的計算方法能在保證精度的情況下,盡可能地縮短計算的時間。
下面我們將深入考察dnn的訓練和**過程,從中找出其效能瓶頸,然後針對這些效能瓶頸,提出我們的解決方法。
2. dnn訓練流程
dnn在gpu上訓練需要經過三個階段,,在模型訓練階段,dnn所進行的主要操作是矩陣加法,矩陣乘法和啟用函式的計算。
圖1.1 dnn在gpu上訓練過程
我們分別對矩陣加法,矩陣乘法,啟用函式計算以及gpu-cpu資料拷貝進行考察,得到下表:
計算單元
時間範圍
cpu-gpu
90ms - 740 ms
矩陣加法
0.03ms - 41 ms
矩陣乘法
0.1ms – 915ms
啟用函式計算
5.25 – 1484
gpu-cpu
90ms - 740ms
從上表可以看出,其效能瓶頸集中在矩陣乘法和cpu與gpu資料傳輸上。在參考文獻[3]中,給出了矩陣乘法的3種實現方式,分別是簡單版本,行資料載入共享記憶體版本,分塊矩陣乘法版本。其中效能最好的版本是分塊矩陣版本。該文在最後結論部分說使用nvidia cublas庫中的矩陣乘法函式,要比自己實現的最好的版本(分塊矩陣乘法)效能還要快1倍左右。因此我們建議rd在gpu上實現矩陣乘法時,直接使用cublas即可。另外我們還比較了單精度和雙精度矩陣乘法的效能,發現單精度矩陣乘法要比雙精度矩陣乘法效能高40%(見圖4.1)。在cpu與gpu傳輸資料上,發現兩者的傳輸時間幾乎相等(見圖4.2)。在啟用函式計算上,發現採用cuda內建的__expf()計算sigmoid函式效能更高。(見圖4.4)
3. dnn**過程
在**階段,dnn既可以在gpu上執行,同時也可以在cpu上執行。因此對於矩陣乘法而言,還需要提供其在cpu上執行的時間。在cpu上,gotoblas和atlas是兩個最常用的矩陣運算的庫,我們比較了二者的效能,發現gotoblas比atlas效能要高出不少(見圖4.3)。
圖3.1 dnn在gpu或cpu上**流程
nn在gpu或cpu上的**過程
4. 測試結果圖
4.1 cublas單雙精度效能比較
圖4.1 cublas單雙精度比較
4.2 cpu與gpu傳輸時間對比
圖4.2 cpu與gpu傳輸時間對比
4.3 atlas與gotoblas單精度效能對比
圖4.3atlas與gotoblas單精度效能對比
4.4 expf()與__expf()效能對比
圖4.4 expf()與__expf()效能對比
5. 參考文獻
[1]g.e.hinton.etc. reducing the dimensionality of data with neural networks. 2006.
[2]hugo larochelle,yoshua bengio. classification using discriminative restricted boltzmannmachines. icml 2008.
[3](dnn模型的效能加速技術)
效能測試方法總結
軟體效能測試過程詳解與案例分析 段念 編著 學習筆記四 1.效能測試 performance testing 通過模擬生產執行的業務壓力量和使用場景組合,測試系統的效能是否滿足生產效能要求。目的是驗證系統是否具有系統宣稱具有的能力 需要事先了解被測試系統典型場景,並具有確定的效能目標 要求在已確定的...
效能測試的方法
效能測試 負載測試 壓力測試 配置測試 併發測試 可靠性測試 失效恢復測試。1 效能測試 通過模擬生產執行的業務壓力量和使用場景組合,測試系統的效能是否滿足生產效能要求。效能測試是一種常見的測試方法,通俗地說,這種測試方法就是要在特定的執行條件下驗證系統的能力狀況。這種方法的特點有 主要目的是檢測系...
redis 效能測試方法
redis效能測試 1.效能測試程式所在專案 d eclipse workspace jredis proxy 2.測試情景 2.1 1000個請求,使用關卡 semaphore 進行控制,每次最多併發500 2.2 使用 callabe 執行,所以實現多執行緒執行 3.效能測試 伺服器環境 2核 ...