本部分,,我們就跟隨作者一起看看Intel StraTIx10 NX和Nvidia在這個領域的利器T4以及V100之間的對比,,過程分為芯片級對比以及系統(tǒng)級對比,。
本部分一起先來看看芯片級對比
首先來看下我們的GPU對手——Nvidia T4和V100分別有320個和640個張量核(專門用于AI工作負載的矩陣乘法引擎)
Nvidia Tesla T4
Nvidia Tesla V100
下面表格總結了與StraTIx10 NX和這些同代工藝GPU的關鍵指標對比。 就die尺寸來說,,V100是Nvidia最大的12nm GPU,幾乎比T4大50%,,而StraTIx10 NX比兩種GPU都小,。
首先,,文章使用GPU最擅長處理的工作負載:通用矩陣乘(GEMM)來跑GPU的benchmark(什么是GEMM請移步https://spaTIal-lang.org/gemm),為了測量最佳的GPU性能,,對每個器件使用最新的library,,這些庫不會出錯,并且分別在使用和不使用張量核的情況下測試性能,。對于fp32和fp16實驗,,分別使用CUDA10.0和10.2的CuBLAS庫進行V100和T4。對于int8,,我們使用CUDA10.2中的cuBLASLt庫,,這樣可以比cuBLAS庫獲得更高的int8性能。文章使用Nvidia的官方(高度優(yōu)化)的cuDNN kernel來處理DL工作負載,,并且分別對V100和T4使用了從cuDNN7.6.2和7.6.5,。 (cuBLAS API,從cuda6.0開始,;cuBLASLt API,,從cuda10.1開始)
cuDNN庫不支持int8計算kernel,但它們支持將所有模型權重保存在片上內存中,。對于每個工作負載,、問題大小和序列長度,文章在兩種GPU上運行了所有可能的配置組合,,如精度{fp32,、fp16、int8},、計算樣式{persistent,、non-persistent}、張量核心設置{enable,、disable},。然后,選擇最佳的性能,,來和Stratix10 NX的NPU進行比較,。 這里因為是芯片級對比,所以只考慮了芯核的計算效率,,不包括任何初始化,、芯核啟動或主機-GPU數據傳輸開銷。
下圖給出了T4和V100 GPU上fp32,、fp16和int8精度的GEMM benchmark測試結果,。結果表明,相對于張量核禁用情況(藍線),,啟用張量核(紅線) 可以顯著提高GPU在GEMM上的性能,。
然而,,一個普遍的趨勢是,張量核雖然是為GEMM設計的,,但在矩陣大小為2048或以下情況時的利用效率明顯不如峰值情況(紅色虛線),。因此要實現高利用率,除非工作負載中的矩陣大小非常大,,而這在實際DL工作負載中并不常見,。T4和V100上的張量核都不支持fp32的精度,而是在執(zhí)行乘法運算之前,,將fp32數據轉換為fp16,。相對于純fp16 GEMM,這種數據轉換開銷降低了張量核性能,。另一個有趣的情況是,,當T4張量核在int8模式下工作時,它們需要將輸入矩陣從標準的行/列主要格式轉換為特定于張量核的布局,。因此,,即使在處理非常大的8192×8192矩陣時,在張量核(沒有標記的紅線)上實現的int8性能還不到峰值性能的45%,。
為了更好地理解這種數據轉換的開銷,,文章還進行了一個額外的實驗,在這個實驗中,,對張量核進行了特殊布局(帶有標記的紅線),。即使不算矩陣布局變化的開銷,對于4096×4096及以下的矩陣大小,,張量核利用率也小于40%,,在6144×6144矩陣中利用率達到最高為72%。
下面來看看FPGA上的情況,,上圖(Fig.6)的右上角那張圖比較了Stratix10 NX上的NPU性能與具有int8張量核的T4 GPU的性能,。為了公平地比較,文章禁用了NPU兩個輸入矩陣其中一個的矩陣布局變換,,只保留了對另一個輸入以及輸出矩陣的布局變換(因為NPU以標準格式使用和生成這些矩陣)。
雖然NPU是為矩陣向量運算而設計的,,但它在GEMM工作負載上仍然實現了與T4相似的性能,,其矩陣大小從512到3072不等(最大的矩陣可以fit進片上BRAM)。
最后,,一起看看頂級FPGA和GPU的PK結果,。下圖(Fig.7)將文章在Stratix10 NX上增強型NPU的性能與T4和V100的最佳性能進行比較。對于比較小的batch-3和batch-6情況,,FPGA性能總是顯著高于兩個GPU,。FPGA在batch-6(其設計為:雙核batch-3)中表現最好,,平均性能分別是T4和V100的24.2x和11.7x。
與batch-6相比,,FPGA在batch-3上的性能較低,,因為兩個核中的一個完全空閑。然而,,它仍然比T4和V100分別平均快了22.3x和9.3x,。在batch size高于6時,如果batch size不能被6整除,,則NPU可能不能被充分利用,。例如,在batch size為8,、32和256的情況下,,NPU最多可以達到其batch-6性能的67%、89%和99%,,而batch size為12,、36和258(上圖中的虛線所示)可以達到100%的效率。在32輸入的中等batch size情況下,,NX仍然比T4具有更好的性能,,并且與V100性能相當。
即使在比較大的batch size情況下,,NX的性能也比T4高58%,,只比die size更大(大將近一倍)的V100低30%。這些結果表明,,人工智能優(yōu)化的FPGA在低batch實時推理中不僅可以實現比GPU好一個數量級的性能,,而且可以在放寬延遲約束下的高batch推理中和GPU匹敵。上圖(Fig.7)中的右下角圖總結了不同batch size情況下NX相對于CPU的平均加速情況,。
上圖(Fig.7)中的右上角圖顯示了與不同batch大小下的兩個GPU相比,,NX的平均利用率。NX在batch-6中的平均利用率為37.1%,,而T4和V100分別僅為1.5%和3%,。GPU張量核并非直接互連,它們只能接收來自本地核內寄存器文件的輸入,。因此,,每個GPU張量核都必須發(fā)送它的partial result到全局內存中,并與其他張量核同步,,以結合這些partial result,。然后GPU從全局內存中讀取組合好的矢量來執(zhí)行進一步的操作,如激活函數(activation functions)。
較高的batch size可以攤銷這種同步延遲,,但即使在batch-256情況下,,T4和V100的利用率分別只有13.3%和17.8%。 另一方面,,FPGA在架構上也更具優(yōu)勢,,其在張量塊之間有專用的用來做減法的互連, FPGA的可編程布線資源還允許將MVU tile和矢量單元級引擎級聯起來進行直接通信,,減少了像GPU中那樣必須通過內存通信的情況,。
綜上可以看到,FPGA依靠架構優(yōu)勢和超高的資源利用率,,在AI性能PK上對GPU形成了強勁挑戰(zhàn),。下一篇,我們再來一起看看從系統(tǒng)角度,,FPGA和GPU的對比情況以及功耗方面的分析,。
更多信息可以來這里獲取==>>電子技術應用-AET<<