自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

揭開Groq LPU神秘面紗:世界最快硬件加速器的底層架構設計!

人工智能 新聞
Groq一夜爆火的背后,是自研的語言處理單元硬件LPU,近日,Substack的專欄作家Abhinav Upadhyay為我們一步步揭示了LPU底層架構的奧秘。

上月底,創(chuàng)業(yè)公司Groq的產(chǎn)品一夜爆火。

憑借自研的硬件加速器LPU,達成了500個token/s的神級推理速度,當場秒殺了ChatGPT。

圖片圖片

Groq提供的響應速度刷新了人們的認知,而這要歸功于背后的語言處理單元硬件LPU(language processing unit hardware)。

Groq的研發(fā)團隊在LPU上應用了創(chuàng)新的硬件架構設計,并配套了強大的編譯器。

下面讓我們跟隨Substack的專欄作家Abhinav Upadhyay一起,一步步揭開Groq LPU底層架構的神秘面紗。

Groq LPU的神秘面紗

到目前為止,Groq并沒有給出任何關于LPU本身的論文,但在過去幾年中,他們發(fā)表了下面兩篇論文:

論文地址:https://dl.acm.org/doi/10.1109/ISCA45697.2020.00023

圖片圖片

論文地址:https://dl.acm.org/doi/abs/10.1145/3470496.3527405

兩篇工作分別在2020年和2022年發(fā)表在計算機體系結構頂會ISCA上,后一篇還是獲獎論文。

這兩篇文章解釋了Groq的張量流處理器(TSP)的設計和實現(xiàn),以及他們?nèi)绾问褂肨SP構建分布式推理引擎。

盡管沒有正式聲明,但LPU很可能是基于這個分布式系統(tǒng)來進行設計和擴展的。

那么,我們就首先詳細分解一下TSP及其編譯器的架構,然后以此為基礎來分析Groq如何使用這些TSP,構建可靠且高吞吐量的分布式AI推理引擎。

圖片

TSP的架構與傳統(tǒng)的CPU或GPU芯片有很大不同,主要目的是為了讓TSP硬件更具確定性。

這里就先要提一嘴CPU或GPU的不確定性。

CPU和GPU微架構中的非確定性

基于微架構的設計,在CPU和GPU上執(zhí)行指令是不確定的,——即無法保證特定指令何時執(zhí)行、完成需要多長時間以及何時提供結果。

舉個例子,現(xiàn)代CPU一般具有如下設計:

- 超標量(Super scalar architecture):每個周期能夠發(fā)出多條指令;

- 亂序執(zhí)行(Out-of-order execution):以任意順序執(zhí)行指令;

- 預測執(zhí)行(Speculative execution):對于分支,它會猜測分支條件是真是假,并提前預測執(zhí)行該分支以提高吞吐量(當然如果猜錯了,就需要放棄并返回另一條分支); 

- 指令流水線(Instruction pipelining):將指令分為多個階段,以流水線的方式執(zhí)行,再次提高了指令吞吐量;

- 多級緩存(Multiple levels of caches):CPU有2到3級緩存,可以減少從內(nèi)存加載數(shù)據(jù)帶來的延遲。

所有這些都使得CPU中指令執(zhí)行的順序和時間不確定且難以推理。

而GPU還有其他一些非確定性因素,包括緩存、共享和全局內(nèi)存、動態(tài)資源分區(qū)等。

非確定性帶來的問題是,我們很難推理程序的性能,也很難保證最壞情況下的性能限制。

因此,Groq為TSP提出了一個全新的設計,高度并行,且沒有不確定行為。這消除了硬件的復雜性,使編譯器能夠獲得更大的權力,精確調度和控制指令的執(zhí)行,保證對程序性能的限制。

下面,讓我們從內(nèi)部了解TSP的架構是什么樣子的。

TSP架構

TSP的硬件設計與CPU或GPU的設計形成鮮明對比。傳統(tǒng)的多核芯片采用平鋪架構,在下圖(a)中,每個小方塊(tile)代表一個處理核心。

核心由一組功能單元組成,負責執(zhí)行不同類型的計算(算術運算、內(nèi)存運算、邏輯運算、指令控制等)。

而TSP的設計師將這種傳統(tǒng)設計徹底顛覆了。他們將功能單元移到核心之外,以2d網(wǎng)格方式排列。

網(wǎng)格的每一列只包含特定類型的功能單元,稱為切片(slice)。下圖顯示了傳統(tǒng)多核芯片和TSP在設計上的區(qū)別。

TSP具有以下功能切片:

MXM:用于執(zhí)行矩陣運算 

SXM:用于對矢量進行移位和旋轉操作 

MEM:內(nèi)存讀/寫運算 

VXM:向量上的算術運算 

ICU:指令控制單元,這個有點特殊,就是上圖(b)底部那一條水平的藍色條,它負責獲取和調度指令并在其他切片上執(zhí)行。

在了解了TSP的架構之后,讓我們將注意力轉移到它的核心:指令執(zhí)行。

TSP中的指令執(zhí)行

TSP以SIMD(單指令多數(shù)據(jù))方式執(zhí)行指令。每個功能切片由20個tile組成,每個tile能夠處理16個數(shù)。因此,一個完整的切片可以處理并生成最大320個元素的向量。

這些切片以生產(chǎn)者——消費者的方式進行交互。

當從內(nèi)存中讀取向量時,會為其分配流ID(介于0到31之間)和流向(東或西)。每個切片都可以自由處理流并生成新的結果流,也可以讓流按原樣流向下一個相鄰切片。

為了有效地處理完整的向量,指令以流水線方式執(zhí)行,如下圖所示:

圖片圖片

TSP中指令的流水線執(zhí)行會導致流在切片之間交錯移動。上圖的黑色塊描繪了流在切片中不同時間戳的移動。

當然了,想要愉快地執(zhí)行指令,必然少不了編譯器和指令集(ISA)設計。

TSP的編譯器和ISA

TSP的設計人員簡化了硬件,所以壓力就給到了編譯器這邊。編譯器需要精確地調度指令和數(shù)據(jù)流,以正確執(zhí)行給定的程序,并以最有效的方式執(zhí)行。

編譯器有權訪問TSP硬件的以下狀態(tài):

- 320個通道的編程抽象:TSP芯片中的每個tile都能夠以SIMD方式在矢量的16個單元(16個通道)上運行。垂直切片由20個這樣的tile組成,因此總共有320個SIMD通道可供執(zhí)行;

- 144個獨立指令隊列:芯片上有144個指令隊列,每個周期能夠發(fā)出一條或多條指令。編譯器可以完全控制每個隊列中的程序順序;

- 每個通道64個邏輯流:每個通道可以訪問64個邏輯流,可用于移動操作數(shù)或結果,其中32個可用于向東移動數(shù)據(jù),而另外32個用于向西移動數(shù)據(jù);

- 220M全局共享SRAM。

由于TSP硬件中沒有非確定性行為,因此編譯器可以準確了解每條指令的延遲,以及程序中的數(shù)據(jù)流(DNN的計算圖等)。

編譯器識別計算任務之間的依賴關系,并分配到TSP的可用功能單元上并行執(zhí)行。

TSP編程模型依賴于兩個關鍵要素:

硬件中的確定性數(shù)據(jù)路徑 

通過ISA獲得的有關指令延遲的信息

編譯器的后端可以跟蹤片上任何流的位置和使用時間,稱為軟件定義硬件。

從TSP擴展到LPU

TSP是LPU的基礎單元。許多TSP以機架的形式組合在一起,形成一個能夠提供大量吞吐量的分布式系統(tǒng)。

設計多TSP系統(tǒng)

與TSP一樣,分布式多TSP系統(tǒng)的設計目標也圍繞著確定性數(shù)據(jù)流和指令執(zhí)行,以及節(jié)點之間的低延遲通信。

分布式TSP系統(tǒng)的設計從節(jié)點開始。節(jié)點由機箱內(nèi)8個TSP設備組成。這些設備中的每一個都由11個引腳組成,其中7個引腳用于將每個TSP設備連接到節(jié)點中的其他7個TSP設備,其余4個引腳用于形成全局鏈接。

節(jié)點中的每個設備都有4個全局鏈路,總共有32個全局鏈路,共同構成了一個32個虛擬端口的高基數(shù)路由器(high-radix router)。

高基數(shù)路由器支持大量連接、高帶寬和高性能,這正是高性能分布式系統(tǒng)所需要的。

將9個這樣的TSP節(jié)點和8個TSP組合成一個機架。機架中的每個節(jié)點都有32個端口,因此機架總共有288個全局端口。

其中144個端口在機架內(nèi)本地使用,以便在機架內(nèi)快速傳輸數(shù)據(jù),其余144個端口用于連接到其他機架。

最大配置的系統(tǒng)可以支持145個相互互連的機架,包括10440個TSP,系統(tǒng)中任何兩個TSP之間最多有5個hops。

在基于TSP的分布式系統(tǒng)中實現(xiàn)確定性

在這種擴展的分布式系統(tǒng)制度中,單個TSP的功能單元充當大規(guī)模并行處理器的單個處理核心。TSP的計算模型基于確定性硬件,所以整個分布式系統(tǒng)也應具有同樣的確定性。

使用硬件對齊計數(shù)器同步TSP的時鐘

每個TSP設備都包含一個稱為硬件對齊計數(shù)器(HAC)的硬件計數(shù)器,溢出周期為256。TSP通過以下步驟使用它來相互同步:

- 當兩個TSP互連時,其中一個TSP將其HAC值傳輸給對方。然后,對方將該值返回發(fā)送方。發(fā)送方觀察當前HAC值與返回值之間的差值。

- 這個差值就代表了兩個設備之間鏈路的延遲。此過程重復多次,得到兩個TSP之間的平均鏈路延遲。

- 之后,兩個設備以父子關系排列。父級定期將當前HAC值發(fā)送給子級。子級將平均鏈路延遲與自己的HAC值相加,并與自己的HAC值進行比較。

- 兩個值之間的差值表示由于連續(xù)時鐘漂移而導致的初始未對準。然后子級調整其HAC值以減小此差異。在多次重復此過程后,兩個TSP的HAC值會收斂在一個小鄰域內(nèi),表示鏈路延遲的抖動。

- 協(xié)議允許兩個TSP相互同步,并且可以通過在網(wǎng)絡中建立生成樹來擴展TSP多跳網(wǎng)絡。

初始計劃調整

程序在多TSP系統(tǒng)上執(zhí)行之前,需要對齊所有TSP,以正確調度整個系統(tǒng)的數(shù)據(jù)流和指令執(zhí)行。這涉及到以下機制:

- 在單個TSP級別,有幾個獨立的功能單元和144個獨立的指令隊列。為了同步它們,TSP支持SYNC和NOTIFY指令。SYNC指令將所有指令隊列置于停放狀態(tài),其中一個隊列充當通知程序。當通知器發(fā)出 NOTIFY指令時,該指令被廣播到芯片上的所有隊列,此時它們被同步并恢復操作。 

- 對于多TSP系統(tǒng),兩個TSP使用HAC相互同步,另外每個TSP都支持DESKEW指令,用于停止處理任何后續(xù)指令,直到TSP的HAC溢出。 

- 要擴展多跳系統(tǒng),可以在生成樹的每個hop上重復執(zhí)行以上方案。

運行時重新同步

雖然TSP在程序開始時進行一次性同步,但它們也需要在程序執(zhí)行期間重新同步,因為每個TSP都有自己獨立的時鐘源。

為此,TSP使用更輕量級的方案。除了HAC之外,每個TSP都有一個軟件對齊計數(shù)器(SAC),其溢出周期與HAC相同。

但是,SAC在TSP之間不同步,SAC只是計算TSP的時鐘周期。HAC值表示分布式系統(tǒng)的全局時間,而SAC表示本地時間。因此,HAC和SAC值之間的增量決定了累積漂移。

為了重新同步本地和全局時間,TSP執(zhí)行一條RUNTIME_DESKEW指令。系統(tǒng)中的每個TSP同時執(zhí)行該指令,根據(jù)累積的漂移調整全局時間與本地時間。

編譯器在軟件計劃網(wǎng)絡中的作用

到目前為止,編譯器能夠對TSP內(nèi)以及整個網(wǎng)絡中的數(shù)據(jù)移動進行周期準確的了解。編譯器知道在源TSP上注入向量的確切時間以及它到達目標TSP的確切時間,稱為軟件計劃網(wǎng)絡。

編譯器不是動態(tài)管理數(shù)據(jù)流,而是在編譯時靜態(tài)解析所有內(nèi)容。

已知流量模式

對于深度學習模型,編譯器可以根據(jù)模型的靜態(tài)計算圖推斷數(shù)據(jù)流。編譯器還可以在網(wǎng)絡中可用的TSP設備之間自動分配計算任務。

因此,編譯器會計算每個子任務的精確執(zhí)行時間以及各層之間的激活交換。這使得并行分解步驟顯式,并完全由編譯器控制。

計劃的數(shù)據(jù)流

在傳統(tǒng)的網(wǎng)絡系統(tǒng)中,通過網(wǎng)絡的數(shù)據(jù)包流由硬件管理,硬件在感應到網(wǎng)絡中的負載時會優(yōu)化路由。數(shù)據(jù)流中的這種被動調整會增加延遲,并在數(shù)據(jù)流中引入非確定性。

為了避免這種情況,分布式多TSP系統(tǒng)使用編譯器顯式調度通過網(wǎng)絡的數(shù)據(jù)流。編譯器巧妙地路由數(shù)據(jù),以便在任何時間點都不會在網(wǎng)絡中出現(xiàn)擁塞積聚。

除此之外,編譯器計劃的數(shù)據(jù)流還改善了網(wǎng)絡中的延遲,因為編譯器可以調度數(shù)據(jù)主動推送,而不是必須通過設備請求。

確定性負載均衡

在編譯時調度數(shù)據(jù)流的另一個優(yōu)點是,它允許編譯器有效地跨可用鏈接對流進行負載均衡。在傳統(tǒng)網(wǎng)絡中,硬件根據(jù)路由器中可用的擁塞指標,按數(shù)據(jù)包執(zhí)行路由決策。

但是,在多TSP系統(tǒng)的情況下,編譯器會根據(jù)數(shù)據(jù)量以最佳方式執(zhí)行調度,并選擇要分散流量的鏈路數(shù)量。這樣可以有效地利用系統(tǒng)中的可用帶寬,并減少整體延遲。

責任編輯:張燕妮 來源: 新智元
相關推薦

2015-08-20 13:43:17

NFV網(wǎng)絡功能虛擬化

2023-12-06 08:00:00

機器學習人工智能

2010-05-17 09:13:35

2014-03-12 11:11:39

Storage vMo虛擬機

2021-06-07 08:18:12

云計算云端阿里云

2010-05-26 19:12:41

SVN沖突

2009-09-15 15:34:33

Google Fast

2023-11-02 09:55:40

2016-04-06 09:27:10

runtime解密學習

2009-06-01 09:04:44

Google WaveWeb

2018-03-01 09:33:05

軟件定義存儲

2010-06-17 10:53:25

桌面虛擬化

2011-08-02 08:59:53

2017-10-16 05:56:00

2021-07-28 21:49:01

JVM對象內(nèi)存

2021-08-11 09:01:48

智能指針Box

2021-09-17 15:54:41

深度學習機器學習人工智能

2020-04-14 10:44:01

區(qū)塊鏈滲透測試比特幣

2021-05-25 09:01:21

Linux命令Bash histor

2023-07-26 07:15:13

HashMapArrayListLinkedList
點贊
收藏

51CTO技術棧公眾號