請問在CPU下最快的深度學習框架是哪種?caffe2 mkldnn nnpack

時間 2021-05-10 08:18:31

1樓:ACJ

首先如其他回答所說,mkldnn和nnpack並非深度學習框架,而是高效能計算庫,基於不同硬體架構針對如卷積、矩陣乘等計算的優化,一般搭配框架使用,如TensorFlow、Pytorch等。下面我試著結合國內華為開源的MindSpore Lite為例,來談一下我對高效能的AI引擎的理解,不準確的地方請大家指正。

針對CPU計算加速:

1. 合理的資料排布

比如在卷積計算中,計算輸出HW平面的每個點都需要輸入中全部的通道值,使用NHWC格式資料在C通道上排布連續,這樣就不需要跳著去讀取資料,提高了cache命中率。

2. 選擇最優的卷積演算法

卷積kernel多種演算法,im2col+gemm,winograd,sliding window等。根據不同的輸入場景選擇最佳演算法。

3. 平行計算

以矩陣乘為例,將輸入矩陣切分為小的block,然後在多核上進行平行計算。

4. SIMD

使用向量暫存器和SIMD指令,如ARM的neon、x86的SSE指令等,可以一條指令同時進行多條資料的操作,提公升計算速度。

5. 暫存器劃分/復用

通過合理劃分暫存器,使得暫存器資料載入後最大程度的被復用,從而減少載入次數。

6. 指令重排

根據不同指令的週期以及指令的依賴,對指令進行重排,降低指令pipeline stall。

此外,MindSpore Lite從框架層面設計了一些提公升效能的特性:

1. 記憶體復用

通過對整圖分析計算中間Tensor的引用計數,以及記憶體池的支援,提公升記憶體分配的效率。

2. 異構並行

通常手機上不僅只有CPU,可能還同時搭載了GPU,更高配置的手機甚至會有像NPU這種專門為深度學習設計的晶元。當手機具備不止一種後端時,可以將圖中沒有前後依賴的部分進行子圖劃分再分發到不同的後端並行執行,加快執行速度。

3. 記憶體池

頻繁的記憶體申請是乙個很耗時的過程,通過記憶體復用管理可以省去這一部分的開銷。例如每個節點執行前向記憶體池借用所需的記憶體大小,一旦執行完立馬歸還使用權。

4. 混合bit計算

通過混合bit量化,支援FP32、FP16、Int8等不同精度的混合計算。低精度計算可以減少計算時間和記憶體消耗,例如乙個向量暫存器原本可以處理4個Float32型別的資料,當量化成Int8型別時變成一次可以處理16個資料,效能得到大幅度提公升。

2樓:

我來答一下,這個問題上說的CPU我理解成普通的伺服器級別的XEON之類的,

目前看來單卷積的計算速度上還是MKL的庫是最快的,NNPACK還是要差不少,三分之一的差距還是有的,而且NNPACK對CPU的要求較高,要求skylake架構

而樓上提到的intel-caffe總體看來只是乙個魔改的caffe,加入了MLSL的並行方案,和深度的MKL定製進去了。樓上也有提到MKL_ml的,那個確實要慢一些,不過湊合還是可以用的。

然而更好的情況其實是用適合的CPU,比如融核XEON 7250這樣的,理論計算峰值5.6T,才能去和顯示卡比較下快慢的。據說下一代的KNM可以達到10T以上的計算能力的。

至於說優勢那就是快取記憶體和大記憶體了,顯示卡存在視訊記憶體不夠的情況,CPU明顯要好得多了

3樓:石彼格海德

在x86上差不多是閉源但免費的mklml和開源的mkldnn

各大框架都有支援這兩個庫的實現,比如caffe,torch,theano,neon

4樓:Xianyi Zhang

mkldnn與nnpack不是框架,是類似cudnn的庫。

我個人認為,只要是相對靠譜的框架,在CPU端的效能影響不是很大,關鍵是底層的dnn庫或者BLAS庫是不是優化的更好。當然,框架可以做的乙個點就是operator fusion,這個也需要底層庫有良好的支援。

github上開源的那個mkldnn,我們做了測試,感覺效能一般。MKL裡面帶著的DNN似乎效能還行,但是由於閉源的,沒有仔細研究過實現。

NNPack逐漸變得成熟,之前各種大改,連shared library都編譯不了。希望作者在加入Facebook後可以投入更多時間吧。從效能上來說,Winograd演算法在特定的kernel以及輸入的情況下是有優勢的。

至於其他的FFT實現之類,效能不好。

Eigen,不知道為什麼caffe2選擇這個,似乎理由是在ARM上效能最好。雖然最近版本的效能有改進,但是得出這個結論,我覺得有些片面吧,與我們的測試以及很多朋友的測試不符。

ARM Compute Library,剛推出不久的庫,Neon的實現效能一般般。OpenCL實現在Mali T860的測試結果也不好,比CPU要慢不少。期待後續的改進。

OpenBLAS,是我們的做開源矩陣計算庫,主要是為了科學計算應用研發的。在ARMv7架構下效能一般,主要原因是沒做Neon優化。在ARMv8上,做了Neon優化,所以效能要好的多。

這個庫也是現在很多人在ARM上做深度學習選擇的庫。

PerfBLAS,我們公司的BLAS商業版本,主要針對ARM移動端的深度學習優化,庫大小可以縮減到50KB以下,效能也要遠優於OpenBLAS。

5樓:高洋

必須是我司的PPL~ 吊打所有這些開源閉源庫和框架~

分享乙個資料,vgg16單核ARM [email protected]是1.2s,資料型別fp32

AMD的CPU是否適合搭建深度學習主機?

曉破雲驚 適合,但是可能會有問題。AMD多核效能上還是要高一些的,但是這個世界上總有些很奇怪的庫,比如微軟的nni。我配了一晚上的環境發現無論如何也不能讓nni用我的gpu跑,查了半天文件和issue後發現它預設只使用完全空閒的GPU,我又沒有集顯或者亮機卡之類的。取消的方式是useActiveGP...

請介紹一下工業界中,機器學習(深度學習)在spark等分布式計算平台中的使用情況?

其他框架不是很了解,說一下Spark吧 Spark有自己的mllib庫,裡面實現了一些常用的傳統機器學習演算法,包括LR,LinerSVC,Random Forest等,這樣才能夠在大資料下充分利用分布式地效能。但是顯而易見地,仍然有非常多的演算法是不適於Spark RDD的分布式機制的,例如 類似...

請問大家對深度強化學習中的Data Efficiency有什麼獨到理解或者提公升建議?

關於RL中的sample efficiency問題,Shane Gu過去幾年做了很多相關工作。這是去年他的乙個talk Deep Reinforcement Learning for Robotics Frontiers and Beyond 中的一頁slides,我覺得解釋得比較清楚。白色區域是對...