AI推論晶片性能優劣 記憶體子系統扮要角

作者 : Geoff Tate,Flex Logix執行長

若少了好的記憶體子系統,就不會有優質推論晶片,因此如果一家推論晶片公司只談TOPS卻很少提及SRAM、DRAM和記憶體子系統,他們可能並沒有很好的解決方案。

過去一年來冒出頭的AI推論晶片公司數量之多令人眼花撩亂,由於市場上晶片繁多,也不缺乏優良測試基準,產業界常會忘了一個相當重要的部分:記憶體子系統。事實上,若少了好的記憶體子系統,就不會有優質推論晶片,因此如果一家推論晶片公司只談TOPS卻很少提及SRAM、DRAM和記憶體子系統,他們可能並沒有很好的解決方案。

一切皆與資料處理量相關

優質推論晶片被精心打造成能快速移動資料,意味著晶片得以非常快的速度處理資料、將資料導入和匯出記憶體。例如使用ResNet-50和YOLOv3模型,會發現它們不僅在運算方面,而且在各自如何使用記憶體的方式上都有顯著差異。

對於使用ResNet-50模型的每張影像,需要20億個乘積累加運算(MAC),但YOLOv3模型則需要超過2,000億個MAC,增加了100倍。部分原因在於YOLOv3權重更大(6,200萬的權重,而ResNet-50約為2,300萬),然而最大的區別還在於典型基準的影像尺寸;ResNet-50使用224×224,實際上是無人使用的尺寸,YOLOv3使用200萬畫素,因此後者運算負載要大得多。

藉由以上案例可以看到我們會有兩種不同的工作負載,其中一種是另一種的100倍。問題顯而易見:這是否意味著YOLOv3執行速度慢100倍呢?要解答該問題,唯一方法是透過查看記憶體子系統,因為這能告訴你任一顆特定晶片的實際資料處理量。

記憶體子系統

對於推論晶片,我們不僅僅是開發一顆晶片,而是打造一個系統;晶片的MAC相當於引擎,若少了正確的燃料輸送系統(記憶體和互連介面),引擎就會熄火。

如果你了解推論晶片的運作原理,會發現要先有資料導入,之後需要以一定的速度(例如30FPS)提供新的影像;影像導入晶片後,就會輸出某種結果。影像尺寸大小各異,但大多數應用要處理百萬畫素等級的影像,才能達到足夠的精度。

晶片內部是以神經網路模型處理影像,有程式碼和權重,在每一層的末端還有中間激勵函數(intermediate activations);這些都需要儲存在某個地方,然後讀寫到推論晶片的計算單元中。

應用

AI推論的應用非常多,自動駕駛等邊緣應用是最龐大的商機之一;未來,每輛車子都將配備多個推論引擎,可以即時檢測到行人、公車或其他車輛,以即時避免碰撞。這使得處理大尺寸影像(如YOLOv3模型)非常重要;試想一下以你的眼睛看影像,如果有人拿一張很小圖片給你看,你可能就會錯過很多細節,甚至還可能曲解圖片,而在自動駕駛車輛和保全攝影機的應用案例中,小細節才是關鍵。

20200306_Inferencing_NT31P1

自動駕駛應用是邊緣AI加速器的最大商機之一。
(圖片來源:Flex Logix)

邊緣和雲端的區別在於,在邊緣需要發送即時回應,而在雲端通常有大量資料、也有足夠時間處理。舉例來說,如果你在一輛車子裡,會需要知道行人在哪裡才有機會避開他們;但資料中心的情況則不同,資料中心有一些應用(例如標註影像)可以在夜間進行大批量處理,但在邊緣應用場景中是行不通的,因為所有事情都要快速、低延遲,意味著批次量(batch size)為1。

因此基本上我們是重構晶片,以在短時間(低延遲)內交付結果、及時採取正確的回應;我們需要立即處理資料並立即回送結果,這代表記憶體是其中絕對關鍵的一部分。

看ResNet-50模型,會發現有許多晶片的性能在批次量為10或100時非常高,但當批次為1時性能就下降很多,某些晶片性能下降幅度甚至高達75%。這意味著無論他們從擁有高批次處理MAC獲得的利用率有多高,當批次量為1時,其利用率只有四分之一。因此,在批次量為1時(這在邊緣應用中很關鍵),某些晶片的運算MAC週期利用率還不到25%。

架構的轉變

在過去,處理器的記憶體架構──仍在今日的資料中心進行大量推論──採用DRAM和多階層緩衝記憶體,這些都被饋入處理器,而記憶體是集中化的單一記憶體。推論晶片的記憶體則是分散式的,加快資料處理速度的方法之一是把MAC分成許多小塊,然後以本地化(localized) SRAM來分配這些小塊──這是Flex Logix和Intel等公司採用的方法,可望在未來成為主流;這麼做的理由是,讓記憶體更靠近MAC能縮短存取時間,提高MAC分散式平行處理能力。

20200306_Inferencing_NT31P2

通用處理器和推論加速器的記憶體子系統設計比較;推論加速器傾向於採用本地化SRAM的方式來分配記憶體。
(圖片來源:Flex Logix)

邊緣應用的另一關鍵要求是要滿足成本和功耗預算,用於訓練的晶片可能佔用整片晶圓大小,針對汽車和保全攝影機等應用的晶片則有相關的成本和功耗限制。通常在滿足這些預算的情況下,可用的SRAM數量不足以在晶片上儲存所有的權重、程式碼和中間激勵函數。這些晶片需要不斷地處理大量資料,而大多數邊緣應用總是處於開啟狀態。因為所有晶片都會發熱,所以其處理量與散熱量呈現正相關。若能從同等數量的晶片和功耗預算中獲得更多的處理量,這種晶片架構將會是贏家,因為能夠以較少的功耗和成本提供更多的處理結果。

最佳功耗和成本

有些捷徑可以讓公司取得偵測物件之精準度的折衷,然而這並非客戶想要的方式,客戶希望執行的模型可以取得高精度物件偵測和識別,還要在一定的功耗限制範圍內;要做到這一點,關鍵在於記憶體子系統。

如果使用ResNet-50或YOLOv3模型,需要儲存權重;YOLOv3的權重約為23MB,而ResNet-50的權重約為62MB,僅是將這些權重儲存在晶片上,就需要接近100平方mm的晶片面積,這對大多數應用來說都不可行。這意味著需要晶片外的大容量記憶體,也就是使用DRAM。

有一點需要說明,我們經常被問到DRAM這種記憶體是否重要,答案是非常重要。高頻寬記憶體(HBM)極其昂貴,對於成本預算嚴格的邊緣應用不太合適。LPDDR4是一種更好的記憶體,因為它具有更寬的匯流排配置,可以從單顆DRAM中取得更多的頻寬。DRAM對熱非常敏感,對於在室外運作的車輛和保全攝影機攝像機來說會是個問題,因此考量到成本和散熱問題,最好盡可能將DRAM的用量減小。

如何設計出最佳推論晶片

設計工程師要考量客戶將進行何種類型的處理、它們的負載和應用會是什麼,以及它們會在哪裡使用,才能打造出最佳的推論晶片。畢竟最終客戶想要的是最高的處理量——這意味著他們需要高MAC利用率;取得高MAC利用率的方法就是為MAC提供高頻寬,但你會希望用最少的SRAM和最少的DRAM來實現。

晶片設計工程師需要知道客戶期望在哪些場景下使用,並採用相對應的模型,而且要密切關注其權重、程式碼大小和激勵函數。現在有一些建模工具可以讓晶片設計工程師調整MAC、SRAM和DRAM的數量,以做出一系列折衷,決定如何實現最便宜的晶片和最高的處理量。

晶片設計者還能用很多方法來組織MAC,讓它們以更高的頻率運作。例如可以將MAC最佳化為8位元的乘積和累加,比16位元的乘積和累加執行速度更快。在這種情況下,唯一的折衷是精度稍低一些,但是可以在成本和功耗較低的前提下提供更大的處理量。

那麼,ResNet-50和YOLOv3模型在記憶體使用方面有什麼不同?雖然權重有2倍的差異,但最大的區別在於激勵函數。ResNet-50的每一層都會產生激勵函數,其最大激勵函數大小為1MB,有些層甚至更小一些。對於YOLOv3,最大層的最大激勵函數大小是64MB,這64MB必須儲存起來以便進入下一層。

注意一下晶片上記憶體或DRAM容量需求,你會發現YOLOv3的激勵函數實際上比權重需要更多儲存容量,這與ResNet-50大不相同。事實上,客戶需要小心的是,一些公司設計晶片時會在晶片上儲存ResNet-50權重,他們知道其激勵函數很小,能讓其性能「似乎」更好,然而在實際應用中,這種晶片的性能會下降得特別厲害。

SRAM和DRAM的折衷

DRAM晶片不便宜,更貴的是要與DRAM晶片連結;晶片設計業者往往只注意裸晶尺寸,但晶片封裝尺寸也是決定成本的一個重要因素,有時可能比裸晶更貴。每增加一個DRAM,至少增加100顆錫球;現今有某些晶片連結了8片DRAM連接,就需要1,000顆封裝錫球,導致晶片非常昂貴。

雖然業者意識到不能在晶片上全部配置SRAM,他們也知道不能以過多的DRAM來解決成本難題,真正需要的是用盡可能少的DRAM和SRAM。要想如此,晶片設計者需要研究激勵函數;研究一下64MB的激勵函數,就會發現其實只有一個,大多數激勵函數還是比較小的,所以如果將8MB的SRAM放在晶片上,大多數中間激勵函數可以儲存在晶片上,只需要用DRAM來處理最大的激勵函數。

這是推論晶片的甜蜜點,也是晶片設計工程師應該努力追求的目標。如果你是客戶,就需要開始留意晶片記憶體子系統的問題,因為這是決定晶片在實際應用中性能表現的重要因素。

(參考原文: Why the Memory Subsystem is Critical in Inferencing Chips ,by Geoff Tate)

本文同步刊登於《電子工程專輯》雜誌2020年3月號

發表評論