雪花新聞

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

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

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

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


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

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

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

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

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

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

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

儘管在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業務,怕是短時間也收不回成本,不太值得。

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

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在端側系統中有很好的優勢。

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上開放使用了。

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

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

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

加速庫(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/

相關文章