1. 程式人生 > 其它 >一張圖看全深度學習中下層軟硬體體系結構

一張圖看全深度學習中下層軟硬體體系結構

尊重原創版權: https://www.gewuweb.com/hot/10444.html

一張圖看全深度學習中下層軟硬體體系結構

這幾年深度學習的發展給人工智慧相關應用的落地帶來了很大的促進。隨著NLP、CV相關領域的演算法的發展,演算法層面的創新已經逐漸慢了下來,但是工程方面的研究依然非常火熱。從底層的硬體的創新,到平臺框架的發展,為支撐超大規模模型訓練與移動端小規模演算法推斷而創造的軟硬體體系也在飛速革新。本文將總結深度學習平臺框架軟體及下層的硬體支撐系統。

注意,人工智慧不等同於深度學習,但是深度學習演算法的發展極大程度地促進了人工智慧的應用,本文有時候未明確區分二者關係,並不是認為二者等同,只是為了方便敘述。

  • 一、深度學習軟硬體體系總覽
  • 二、AI底層硬體——晶片系統
    • 2.1、CPU的AI能力進展
    • 2.2、GPU
    • 2.3、FPGA
    • 2.4、TPU
    • 2.5、NPU
  • 三、加速庫(Kernel Library)
  • 四、深度學習編譯器
  • 五、深度學習框架
    *

一、深度學習軟硬體體系總覽

隨著深度學習演算法的應用,在不同的地方需要不同的工程落地方式。對於搜尋引擎或者智慧助手這樣大規模的系統,可以使用超大規模的NLP預訓練模型。如下圖所示是近幾年超大NLP模型的引數規模:

在最新的2021年,華為釋出的盤古中文預訓練模型已經達到了2000億引數的規模,這麼大規模的模型訓練需要特殊的軟硬體支撐,需要強大的GPU、頻寬、訓練框架等支撐。現有的深度學習框架包括TensorFlow、PyTorch等是無法直接訓練如此規模的模型的。需要解決多機多卡的訓練等問題。

再比如移動端的AI能力,如下圖是華為展示的去除人像的功能

這樣的功能是需要移動端支援深度學習演算法的推理的,移動端可使用的軟硬體資源則相對而言少很多,那麼就需要另一種軟硬體體系支撐演算法的訓練與推理。

因此,在不同場景下,中下層軟硬體的發展對AI的落地至關重要。本文的主要目的就是介紹中下層的深度學習軟硬體支撐體系。

在本文中,我們將深度學習底層軟硬體分成四層,如下圖所示。我們逐一介紹。

二、AI底層硬體——晶片系統

這裡主要關注晶片層面的硬體。其實為了支撐不同的AI應用的落地,很多底層硬體都在不斷的發展。例如,在多卡多機的訓練場景中,對於網路頻寬的要求就很高,而對於超大規模的模型,晶片讀取交換引數則需要更大的視訊記憶體支援。此外,如果訓練過程中CPU可以直接讀取視訊記憶體的資料,顯然也會更好地加快訓練過程。儘管這些硬體的設計和創新對於AI應用也很重要。但是更大更主要的創新還是來自於晶片系統,因此這裡主要關注晶片系統。

目前,相較於以前單一的CPU的發展,GPU、FPGA、NPU、TPU等晶片的發展也很快。這裡將逐一介紹。

2.1、CPU的AI能力進展

儘管在AI時代,CPU的AI能力不像GPU等那麼突出,但是依然是不可或缺的晶片系統。因為你也不可能只用GPU來支撐整個系統。

此外,並不是所有的演算法都適合使用GPU,無法平行計算,或者是對於記憶體需要較大的演算法(例如推薦系統中,有較大embedding的演算法)等都適合使用CPU去訓練。畢竟AI不只是深度學習,還有很多傳統的機器學習方法也是非常好用,且適合使用CPU去訓練推斷的。

那麼為了更好地支撐AI業務,CPU的晶片其實也一直在改進。例如因特爾伺服器晶片Xeon提供多達40-64的PCIe通道數,配合2個GPU,可以達到更快的速度(大致原理是多個GPU的通道數越高,訓練速度越快,但是GPU視訊記憶體是從CPU記憶體中讀取資料的,因此需要二者配合)。

同時,第三代Xeon的CPU也在一些方面做了改進以更好地支撐AI能力。例如,它是業界第一個內建bfloat16運算的CPU,可以更好地加快AI模型的訓練。當然,為了讓CPU也能分享AI發展的紅利,因特爾和AMD除了硬體改進也在與各大上層框架合作以更好地實現CPU的AI能力。例如,Horovod就支援多CPU的並行訓練。

還有一點不要忘了,CPU的價格更便宜,且目前大多數企業的基礎設施中都已經包含了大量的CPU,你讓他們再去買一套全新的硬體去支撐AI業務,怕是短時間也收不回成本,不太值得。

2.2、GPU

GPU的AI能力相信不用過多描述。與CPU相比,GPU對矩陣的計算或者說圖的運算更加強大,它雖然不能像CPU那樣高效地處理複雜的邏輯運算,但是對於平行計算的支撐卻非常強大。GPU的多核設計可以一次性運算更大的圖。同時,深度學習演算法的底層運算元也大多數是這樣簡單的批次處理,因此GPU因為深度學習的發展是地位水漲船高。

2.3、FPGA

FPGA(Field Programmable Gate
Array)全稱現場可程式設計邏輯閘陣列,是一種半定製的積體電路晶片,系統設計師可以根據需要,通過可編輯的連線,把FPGA內部的邏輯塊連線起來。這就好像一個電路試驗板被放在了一個晶片裡。一個出廠後的成品FPGA的邏輯塊和連線可以按照設計者的需要而改變,所以FPGA可以完成所需要的邏輯功能。

儘管GPU在工作站的環境下訓練深度學習等模型是很有效的,但是並不適合所有的情況。首先是它的成本高,並且對散熱有較高的要求。對於一些端側的模型使用來說有很多問題,例如攝像頭檢測的場景下,端側裝置可能暴露在陽光下,顯然,這種情況使用GPU並不合適。此外,正常情況下GPU的壽命是2-5年,在很多應用場景下都太短了(例如自動駕駛中一輛車可能裝有7-10個GPU,每隔4年換一次,你可以知道這個成本有多高)。

FPGA可以針對不同的場景做優化,例如可以針對卷積神經網路進行優化,使得它可以消耗更少的電量獲取更高的速度,同時壽命也是GPU的2-5倍。

但是FPGA的程式設計非常困難,這是它難以大規模推廣的重要原因之一。但是也有很多公司致力於推動FPGA的普及,降低使用門檻。例如Mipsology公司的Zebra平臺。

總的來說,FPGA在端側系統中有很好的優勢。

2.4、TPU

TPU是谷歌釋出的用於加速機器學習的硬體,與TensorFlow配合較好。在5月份已經發布了第四代產品。

_ 今年的MLPerf結果表明,GoogleTPU v4的實力不容小覷,在使用ImageNet資料集的影象分類訓練測試(準確度至少75.90%),256
個TPU v4在1.82分鐘內完成了這一任務,這幾乎與768個Nvidia A100圖形卡、192個AMD Epyc
7742核心(1.06分鐘)、512個華為AI優化的Ascend910晶片以及128個Intel Xeon Platinum
8168核心(1.56分鐘)組合在一起的速度一樣快。 _

谷歌的TPU是一種專用的晶片,與TensoFlow配合較好,可以提供很快的推理速度。與GPU不同的是,它不是一個通用的處理晶片,因此對於光柵之類的問題無法處理。它起初定位於內部使用。隨著TPU版本的更新,能力越來越強,已經在Google
Cloud上開放使用了。

2.5、NPU

NPU是華為釋出的用於移動端推理的AI晶片。華為的晶片設計能力是國內第一,如果不是因為某些眾所周知的原因,在AI發展浪潮中,他們的硬體設施應該是能夠佔有一席之地的。NPU就是華為晶片設計實力的一種展現。

NPU主要用於移動端演算法的推理,因此對於功耗的要求很高。華為麒麟970晶片有8個CPU和12個GPU,有55億個電晶體,NPU佔其中3%不到。因此對於整體的SoC影響很小。在功耗消耗很低的情況下,加速推理速度。

在AI Benchmark測試中,華為系列的晶片的AI能力在移動SoC中一直是處於第一陣營的。其NPU的能力不容小覷。

三、加速庫(Kernel Library)

加速庫(Kernel)是與晶片緊密相關的一種底層的庫。這一層其實並不是常見的軟硬體體系結構中出現,也不是必須的。但是它對於AI運算的速度來說是很重要的。目前的加速庫基本上是各家晶片廠商提供的,主要包括:

** 因特爾的Math Kernel Library(Intel® oneAPI Math Kernel Library) **
因特爾提供的用於科學計算的優化庫,適用於因特爾系列的CPU,主要功能:

  1. 增強的數學例程使開發人員和資料科學家能夠建立高效能的科學、工程或金融應用程式
  2. 核心功能包括BLAS、LAPACK、稀疏求解器、快速傅立葉變換(FFT)、隨機數發生器功能(RNG)、彙總統計、資料擬合和向量數學。
  3. 為當前和未來幾代英特爾® CPU、GPU和其他加速器優化應用程式
  4. 對英特爾®數學核心庫(英特爾®MKL)的老使用者來說是一個無縫升級。

MKL適合頻繁的小矩陣的乘法,效能有很好的表現。使用MKL編譯的TensorFlow也會有更好的效能。

** NVIDIA的cuDNN **
cuDNN是NVIDIA公司釋出的用於深度神經網路的GPU加速庫。cuDNN
可大幅優化標準例程(例如用於前向傳播和反向傳播的卷積層、池化層、歸一化層和啟用層)的實施。世界各地的深度學習研究人員和框架開發者都依賴 cuDNN
實現高效能 GPU 加速。藉助 cuDNN,研究人員和開發者可以專注於訓練神經網路及開發軟體應用,而不必花時間進行低層級的 GPU 效能調整。cuDNN
可加速廣泛應用的深度學習框架,包括 Caffe2、Chainer、Keras、MATLAB、MxNet、PyTorch 和 TensorFlow。

** Facebook的NNPACK **
NNPACK是一個用於神經網路計算的加速包。NNPACK旨在為多核CPU提供convnet層的高效能實現。

NNPACK並不打算被機器學習研究人員直接使用;相反,它提供了在領先的深度學習框架中利用的低階效能基元,如PyTorch、Caffe2、MXNet、tiny-
dnn、Caffe、Torch和Darknet。

這些加速庫相對而言都是比較底層的東西,一般是不能直接被上層開發研究人員直接使用,需要藉助相應的框架和工具使用。

四、深度學習編譯器

在不同的DL硬體上部署各種深度學習(DL)模型的困難,促進了社群內DL編譯器的研究和開發。工業界和學術界都提出了一些DL編譯器,如Tensorflow
XLA和TVM。同樣,DL編譯器將不同DL框架中描述的DL模型作為輸入,然後為不同的DL硬體生成優化程式碼作為輸出。

DL一般與深度學習框架繫結,用於將深度學習框架中的內容轉換成底層可執行的部分,用以更好的利用硬體效能。

目前DL的編譯器還是比較多的,主要包括如下:

** nGraph ** :nGraph Library是一個開源的C++庫和執行時/編譯器套件,用於深度學習生態系統。通過nGraph
Library,資料科學家可以在任何數量的硬體架構上使用他們喜歡的深度學習框架,進行訓練和推理。

** Glow **
:Glow是一個機器學習編譯器,可以加速不同硬體平臺上的深度學習框架的效能。它使硬體開發商和研究人員的生態系統能夠專注於建立下一代硬體加速器,這些加速器可以由PyTorch等深度學習框架支援。

** MLIR ** :MLIR專案是一種建立可重複使用和可擴充套件的編譯器基礎設施的新方法(Multi-Level IR Compiler
Framework)。MLIR旨在解決軟體碎片化問題,改善異構硬體的編譯,大幅降低構建特定領域編譯器的成本,並幫助將現有編譯器連線在一起。

MLIR旨在成為一種混合型IR,可以在一個統一的基礎設施中支援多種不同的要求。

** TVM ** :Apache
TVM是一個開源的機器學習編譯器框架,用於CPU、GPU和機器學習加速器。它的目的是使機器學習工程師能夠在任何硬體後端有效地優化和執行計算。

** XLA ** :XLA(加速線性代數)是一種針對特定領域的線性代數編譯器,能夠加快 TensorFlow
模型的執行速度,而且可能完全不需要更改原始碼。

它可以提高執行速度並改進記憶體用量。例如在 BERT 中,如果 MLPerf 提交內容使用 8 伏打 V100 GPU 和 XLA,則效能可提升約 7
倍,並且批次大小可改進約 5 倍。

這些編譯器大多被某種深度學習框架使用,用以加速深度學習模型的訓練與推斷。

五、深度學習框架

這一次就是我們常見的TensorFlow、Torch、MindSpone了。也是被開發者經常使用的框架。這裡有很多文章都有說明,不再細說,只強調一點,這個領域也有很多國產優秀的框架,例如OneFlow、MindSpone之類的。儘管國產的框架生態與國外的相比處於劣勢,但是還是希望大家多多支援。畢竟誰也不知道下一個被禁止使用的是什麼。

參考文獻:
https://bdtechtalks.com/2020/11/09/fpga-vs-gpu-deep-learning/
https://semiengineering.com/using-fpgas-for-ai/
https://ai-benchmark.com/ranking_processors.html
https://arxiv.org/abs/2002.03794

瞭解更多

更多內容參考: https://www.gewuweb.com/sitemap.html