NVIDIA深度學習Tensor Core性能解析(上)


NVIDIA深度學習Tensor Core性能解析(上)

本篇將通過多項測試來考驗Volta架構,利用各種深度學習框架來了解Tensor Core的性能。

很多時候,深度學習這樣的新領域會讓人難以理解。從框架到模型,再到API和庫,AI硬件的許多部分都是高度定制化的,因而被行業接受的公開基准測試工具很少也就不足為奇。隨着ImageNet和一些衍生模型(AlexNet、VGGNet、Inception、Resnet等)的影響,ILSVRC2012(ImageNet大規模視覺識別挑戰)中的圖像數據集訓練逐漸被行業所認可。

基本上所有現代深度學習框架都支持CUDA和cuDNN,對於Volta而言,所有支持FP16存儲的框架也都支持Tensor Core加速,啟用FP16存儲后Tensor Core加速會自動啟用,因此我們可以利用這些框架來了解Tensor Core的性能。

 

 在常見的第三方深度學習基准套件中,Fathom和TBD是更傳統的基准測試套件,其測試針對特定框架和模型進行了配置,涵蓋了許多不同的機器學習應用程序。 同時,最近的深度學習框架側重於比較給定模型和跨框架的數據集的性能。

DeepBench本身並不使用框架,而是使用低級庫來評估不同設備的機器學習性能。就其本身而言,雖然它並不直接將框架/模型/應用程序性能與其他測試聯系在一起,但它提供了代表供應商優化的數學操作和硬件性能的指標,每個產品的二進制文件都使用硬件供應商提供的庫進行編譯。

 

 DAWNBench則更加與眾不同,與其說它是一個基准測試套件,不如說是對三個數據集(ImageNet、CIFAR10和SQuAD)的訓練和推斷結果進行類似於競賽的報告,重點考量端對端的計算精確度和成本。

至於HPE DLBS,作為HPE深度學習指南的一部分,它主要以GPU為中心,堅持使用TensorFlow、MXNet、PyTorch和Caffe類型框架,還包括TensorRT測試。雖然其具有良好的多測試批處理、日志記錄、監控和報告功能,但它只輸出純粹的性能和時間指標,不涉及端對端的時間精度或成本。

從這些基准測試軟件中可以看出,深度學習框架之間的差異很容易使測試結果變得毫無意義,從而影響我們對這些框架的研究。convnet-benchmark和PyTorch的創始人Soumith Chintala指出,如果沒有機器學習的背景,很難獨立地驗證深度學習基准測試的准確性和范圍,不過MLPerf測試項目似乎試圖解決這個問題。

 

 MLPerf是由DAWNBench等測試軟件的設計者和工程師聯合打造的全新高端基准測試套件,希望囊括Fathom的跨域測試方法以及DAWNBench對超過閾值精度模型的端對端計算時間考察。不過它目前正在處於alpha階段,開發團隊表示其尚不適合進行精確的硬件對比。

綜合考慮之下,本次測試將不包含MLPerf項目,而是使用DeepBench、Caffe2 Docke、Stanford DAWN和HPE DLBS來進行。

DeepBench訓練測試之GEMM和RNN

首先進行的是GEMM測試,利用某些深度學習應用程序(DeepSpeech、Speaker ID和Language Modeling)中的內核進行GEMM操作,測出的性能比在cuBLAS中運行純矩陣-矩陣乘法更有代表性。

測試的結果在意料之內,啟用Tensor Core可以大幅提升性能。深入研究細節可以發現,Tensor Core對於特定類型的矩陣-矩陣乘法會有特別的影響。

 

 通過深度學習應用程序拆分GEMM測試,我們可以了解Tensor Core在理想和非理想情況下的表現。

 

 Speaker ID GEMM工作負載實際上只包含兩個內核,其中10微秒的時間差意味着大約1 TFLOPS的算力差異。

 

 通過對語言模型內核的研究,可以了解Tensor Core在非理想情況下的性能。這些核矩陣的大小是m=512或1024,n=8或16,k=500000,雖然每個數在技術上都可以被8整除——這是滿足張量核加速度的基本要求之一——但這些矩陣的形狀與Tensor Core支持的16*16*16、32*8*16和8*32*16等基本WMMA形狀不太匹配。假如Tensor Core真正在獨立的8x8x8級別上運行,那么運算8*8*8矩陣的性能也不會很好。

 

 因此,Tensor Core無法高效的將這些非常不平衡的矩陣分解為n=8或16。而且,Tensor Core在DeepSpeech內核上的性能也出現異常:

 

從所有子項的平均成績來看,這個浮點運算性能令人印象深刻。當矩陣適合於Tensor Core時,性能可以超過90TFLOPS;相反如果二者無法契合,並正確的換位沒有發揮作用,性能會低至<1TFLOPS的水平。

對於DeepBench RNN內核的測試,RNN類型之間沒有明顯的差異,但是在每種RNN類型中,如果將不同內核挨個進行對比判斷,也可以看到與GEMM中相同的趨勢。

 

 

 

 

 

比較有趣的是,Titan Xp與Titan V在未使用Tensor Core加速時的表現有很接近,Titan Xp的高頻率為其性能起到了一定的幫助。

DeepBench訓練測試之Convolutions

在卷積訓練工作負載測試中,Tensor Core再次顯着提高了性能。鑒於卷積層是圖像識別和分類的基礎,因而卷積運算是Tensor Core加速的最大潛在受益者之一。

從所有測試項的平均成績可以看出,Volta在啟用了Tensor Core的FP16混合精度運算能力后性能再次取得了領先。不過與GEMM不同,在FP32卷積上啟用Tensor Core會導致明顯的性能損失。

 

 

 當計算涉及不匹配的張量尺寸時,標准精度模式遵循cuDNN指定的最快前向算法(如Winograd),而混合精度模式必須對所有內核使用隱式預計算GEMM,這會造成兩種混合精度模式的性能會出現下滑。

要符合Tensor Core加速的要求,輸入和輸出通道尺寸必須是8的倍數,輸入、過濾和輸出數據的類型必須是半精度。使用Tensor Core實現卷積加速要求張量采用NHWC格式,但大多數框架都希望采用NCHW格式的張量。在這種情況下,輸入通道不是8的倍數,但測試程序會自動填充以解決此問題。

 

 需要注意的是,所有這些NCHW內核都需要轉換為NHWC。想要從Tensor Core中受益,需要正確的調整卷積格式,本次測試使用的是NVIDIA提供的標准庫和makefile。NVIDIA指出,一旦進行加速卷積,它會消耗掉相當多的運行時間,這將會對FP32和FP16混合精度模式造成影響。

 

 

 DeepBench推理測試之GEMM

數據精度方面,百度將DeepBench GEMM和卷積定義支持32bit累加的INT8格式,以支持Volta和Pascal上的INT8計算。

 

 Titan V和Titan Xp均擁有4倍於INT32的INT8性能,DeepBench的INT8推理測試正中Pascal引入的DP4A矢量點積能力之下懷。Volta同樣擁有這一能力,在指令集中二者均顯示為IDP和IDP4A。

 

 對IGEMM來說,正如CUTLASS所示,DP4A是一項定制操作。因此除語言建模之外,INT8的性能都非常之高。當然,與硬件不匹配的張量尺寸不適合Tensor Core加速,這一點與之前完全一樣。

 

 

在完全連接(仿射)層中,每個節點都與前一層中的各節點相連接。對於一個典型的CNN來說,完全連接的層意味着可以結合所有提取的特征做出最終預測並對圖像進行分類。這些測試結果數據也意味着大型且規則的矩陣可以在Tensor Core加速中獲得更大的收益。

 

 

DeepBench推理測試Convolutions

再次來到卷積測試環節,8位乘法/32位累加再次出現在INT8推理中。

測試中最引人注目的是Titan Xp,在Resnet、Speaker ID和Vision項目中,Titan Xp表現出了強勁的INT8吞吐量。

 

 從內核方面來看,並沒有發現這一現象的根源所在,猜測可能是由於Pascal的DP4A庫好驅動程序比Volta更為成熟所致,亦或許是Volta通過單獨的INT單元處理這些運算。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM