既快又准並且低開銷!一作親解MICRO 2021最佳論文:一種自動化功耗模擬架構
- 2021 年 11 月 22 日
- AI
編輯 | 青暮
第54屆IEEE/ACM電腦體系結構高峰會MICRO 2021於2021年10月16-20日作為全球在線活動舉辦。希臘雅典作為主辦城市進行轉播。
IEEE/ACM 微體系結構國際研討會(IEEE/ACM International Symposium on Microarchitecture)是介紹和討論先進計算和通訊系統創新微架構思想和技術的主要論壇。本次研討會彙集了與微架構、編譯器、晶片和系統等相關領域的研究人員,就傳統微結構主題和新興研究領域進行技術交流。
來自杜克大學的謝知遙介紹了他們團隊的最新工作《 APOLLO: An Automated Power Modeling Framework for Runtime Power Introspection in High-Volume Commercial Microprocessors 》,該論文獲得了MICRO2021最佳論文獎(Best Paper Award)。
謝知遙是杜克大學電腦工程專業的博士生、 致力於EDA/VLSI 設計機器學習演算法,擅長機器學習、電子設計自動化、VLSI設計、編程。
他的導師是陳怡然教授。陳怡然教授是杜克大學電子與電腦工程系教授,計算進化智慧中心主任,致力於新型存儲器及存儲系統,機器學習與神經形態計算,以及移動計算系統等方面的研究。
他們的工作APOLLO是針對於現代化的商業CPU或Micro processors所研發的一個自動化的功耗模擬架構(Power-Modeling Framework)。
AI科技評論有幸邀請到謝知遙,為我們親自解讀這篇論文的來龍去脈。
以下,AI科技評論對謝知遙的分享進行了不改變原意的整理:
該工作是在CPU設計或運行中所遇到的現實性問題的基礎之上進行研究的。
首先第一個也是最大的問題。在CPU設計時期需要對power有更多的了解,而我們現在對power了解是不夠的。這取決於設計時的trade off,即權衡或取捨。晶片設計最大的一個trade off是performance and power,即要好的性能,還是要低的功耗。
設計師在設計每一代晶片時都要提升晶片的性能,通常反應在提升IPC或者最大頻率等方面。在過去幾十年間,因為摩爾定律,性能的提升較為容易。
但由於摩爾定律效用放緩,導致性能提升變得不再那麼容易。在這種情況下,設計師就需要在微架構上有更多的創新,但在這個過程中,伴隨運行速度的增加,功耗往往也不斷增加。
另一方面輸電資源(power delivery sources)技術的發展非常緩慢。首先輸電線上的電阻很大,導致不能提供足夠的power。另外封裝技術有限,封裝上面的電感(inductance)會導致無法提供所需的快速變化的電流或power。
power和電流通常成正比,因此很難得到一個快速變化的電流。要一瞬間電流突然增大,只能慢慢的增大,不能一瞬間增大那麼多。
結合兩方面因素,促使我們不僅想要在設計時對功耗有更多的了解,而且在運行中要對power進行管理,而不能出現很多不想要的情況。
運行管理中最常見問題在於peak power mitigation。最大功耗有一個閾值,如果超過了閾值,就需要進行管理,使功耗壓降低,否則會出現一系列的問題。管理power的峰值通常要準確實時計算power。在CPU運行時,根據power的計算減少給定CPU的指令,隨之功耗就會降低。
但現在在設計CPU時,很多情況下都是人工在晶片上找能夠模擬功耗的訊號,這種方式不僅困難而且非常不準確。
此外,更重要的一個問題是快速電流的變化(或者power的變化)會導致一個很快的電壓降叫做voltage-droop。

圖註:電流的快速變化導致的電壓的急劇變化
既然輸電上存在這麼多問題,因此在晶片設計時,就要充分模擬晶片CPU上會遇到的各種問題。但如果要做到真實模擬代價是非常大。

工業界標準的 Power模擬流程

不同類型的power simulation的方法
-
首先,它在設計和運行時,都能夠對power進行既快又准地預測。在商業化的CPU上能夠做到90%~95%的正確率,我們把它在Neoverse N1 CPU上進行實現,我們發現它面積的overhead只有0.2%。
-
其次,對於任何一個設計該模型都可以自動生成。
-
不僅如此,每個cycle都能得到一個準確的power,時間解析度非常好。
-
而且我們認為APOLLO模型可以延展到更高層次的模擬。
我們在Neoverse N1商業化的CPU上面,運行了一個workload。這個workload非常大,一共有1700萬個時鐘周期。我們對這1700萬個時鐘周期的每一個cycle都進行預測,上圖展示的是4萬個。在工業界用傳統的方法可能需要兩個星期的時間,而用我們的方法的,幾分鐘就可以做完。
準確率高、速度快的同時,對存儲的要求減少了100倍以上,只需要存我們感興趣的訊號,這也是一個非常大的提升。保持這樣的速度、準確度,得到每個周期的power這在之前的工作中幾乎是做不到的。

圖註:APOLLO的組成部分
在設計時,它是一個又快又準的 power 模型。如圖所示假如對訊號模擬追蹤,所有訊號都在不停的運動,根據這些可以得到一個準確的power估計。
在CPU運行時,它就會成為一個片上功率表(on-chip power meter)。我可以直接把它做的到CPU裡面變成CPU的一個模組,相當於一個監測工具,可以每時每刻提供CPU的功耗。

基於此,每個cycle就可以進行這樣處理。每個cycle中,對每個訊號(ABCDE)用1表示它翻轉了,0表示沒有翻轉,要翻轉就肯定會有功耗。這是cycle0,同樣可以得到cycle1、cycle2等等,翻轉活動就是模型的輸入,然後來預測功耗。
如圖,得到的矩陣的寬度是M, M表示design裡面一共有M個signal,因此一共有M個輸入,每個cycle就是一個sample。接著每個cycle都會做power simulation,得到最準確的power(p0、p1、p2……),將此作為一個vector。vector也是從p0開始的準確的功耗,有x、y,有輸入有label,就可以訓練一個machine learning模型,得出F(x)=y。
我們想要做的是訓練出既準確又效率高的F。強調一點,我們的工作始終主要關注的是動態的power。由於當代CPU都非常複雜,並不是那麼容易做,因此我們就要簡化F模型。
核心思想
但是即使我們有一個線性模型,但這個線性模型還是M個input,M依然非常大,還是很複雜。
我們的第二個核心的思想是:一小部分cycle就能夠提供足夠的資訊。因為很多訊號都是相關的並不是完全相互獨立,很多訊號甚至完全一樣。只需要看一部分最有代表性的訊號,就足夠作為模型的輸入。
因此我們從M個訊號中自動選取Q個有代表性的訊號,我們把它叫做power proxies,然後讓Q遠小於M,這樣模型就會變得很簡單。

我們用一種叫做剪枝的演算法——pruning,比如開始是一個linear model,在 Linear model上面還要加一個penalty term,這個penalty term會懲罰所有的weight,如果weight過大,loss就會增加,使weight減少。這樣就可以讓絕大部分weight變為0,剩下則是不是0的weight,我認為這些不是零的weight很重要。
即使加了penalty之後,weight還必須要不是0,將不是0的weight保留,對應的訊號就是要選取的訊號。
在選取的過程中,會加一個非常強的penalty strength,使99.9%的weight全都變成0,這樣可以使選取的訊號最具有代表性。對penalty加的是一個叫做Minimax concave penalty(MCP),用於剪枝演算法。
選取有代表性的訊號,基於這些訊號,重新訓練一個線性的模型,這個線性的模型就是最終的模型。這是第一步,也是最重要的一步。
選用 MCP演算法的原因
在剪枝的時候,選用的是 MCP演算法,而不是很多人熟悉的Lasso或是其它的。是因為要讓選取的Q遠小於M,penalty實際上就要加的非常大,因此懲罰很大。

圖註:對不同的weight,Lasso和MCP的懲罰
為了避免這種情況,所以我們使用了MCP。而使用MCP,當weight大到一定程度時,不會繼續增大penalty。用MCP訓練的模型,在整個訓練過程中準確率都是比較高的,基於準確的模型做的剪枝,我們認為也是比較準確的。
另外我們觀察到MCP選擇的訊號,彼此之間的相關性更小,這說明我們選的訊號是有代表性的。
除了APOLLO的演算法之外,我們還有一套演算法來提供訓練數據來源。我們用純機器自動生成很多workload,基於這些workload,來生成上述的input x 、label y等等,workload的生成有一套遺傳演算法。
開始有一些隨機 workload,由於是隨機生成的,因此它的功耗比較低。我們選取裡面功耗高的做crossover或mutate,這就是遺傳演算法基本操縱。然後生成一些更高功耗的workload,一代又一代功耗會不斷增加。

首先我們的實驗是基於Neoverse N1和Crotex A77這兩個CPU來做的,因此我們既測了伺服器端,又測了移動端的CPU,讓保證它在所有的CPU上都有很好的表現。
測試的時候也需要workload,這些workload是工程師手動寫出來的,非常具有代表性。我們選選擇了12個,既有有低功耗也有高功耗,還有快速變化的和保持不變的,覆蓋了各種類型。

我們測了它的error,MAE(mean absolute error)和RMSE(這兩個值是越小越好)小於10%,(該值越大越好)高於0.95,說明準確率非常高。
同時我們計算了每個workload的MAE,發現所有類型的workload的MAE都少於10%,這說明了它的準確性。並且即使是7%的錯誤,也是由於清晰度太高,導致每個cycle之間有一個小錯誤這個是很難避免的。如果從一個更大的measurement window來算平均power,就會更準確。
事實上,APOLLO可以對任何一個measurement window進行計算,而不僅僅是 per-cycle。
如上圖,如果現在不需要per-cycle,只要一個average power ,over128個cycle,在這種情況下,只需要70個input,就可以做出一個準確的預測。預測結果error小於3%,如果能夠容忍一個更大的measurement window,準確度將會幾乎接近100%,因此在降低條件的情況下,它的性能可以有進一步的提升。
將APOLLO植入CPU
考慮到它的input數量少,同時模型簡單、準確度高,因此我們要把它做到CPU裡面。
首先有Q個輸入作為input,輸入全都是0或者1,因此這個模型裡面不需要乘法器,這樣可以節省很大一筆開銷。
同時weight作為quantization,不需要64位的weight那麼准,只要需要十幾位的weight,就可以很準確,因此開銷又變得小了。
基於這個模型,用C++就可以很簡單實現這個OMP模型,然後基於 C++的template,進行Hign-Level Synthesis,獲得 design的RTL,如果這個RTL 可以和CPU的RTL合在一起,然後我們去做 tape out,這是一個最基本的思路,而流程本身也很簡單。
同時基於C++的硬體設計,還可以verifying,可以驗證硬體設計也是準確的。

上面的圖是APOLLO在軟體上運行的結果。下面是硬體設計做的verification
但注意下面這張圖首先沒有乘法器,另外它的weight現在不是64位,只有11位。在硬體已經優化的情況下它幾乎沒有準確率的損失,這說明硬體設計非常好。
硬體一定有trade off,在accuracy和hardware cost之間尋求一個平衡,因此我們計算了一下它到底是如何trade off的,然後來輔助我們設計一個這樣的模組。
如圖所示,我們用y軸來表示它的accuracy in error,然後用這個顏色來表示它在硬體上的代價(area overhead),即佔CPU比例是多少。
首先可以改變input的數量,另外一方面可以改變 quantization bits,我們改變這兩個值觀察它對accuracy和area overhead的trade off。
如上圖,測量的結果中每個點都會有一個accuracy對應的hardware cost。當W繼續小於10時,area會飛快的上升,即quantization 加的太大了,已經使原來的X扭曲掉了。所以quantization不能加的過大,並且W沒必要大於12。因此我們策略是保持 W在10~12之間。
如果需要不同的solution,可以改變Q。比如我們根據這個策略,我們現在選到1個solution。如上圖,OPM的Q是159,weight是11位,error大概是10%,在Neoverse N1上它的area overhead小於0.2%。所以我們認為它的實現代價非常低,並且準確率足夠高,因此我們認為這是一個非常不錯的 solution。
所以到現在我已經介紹了它在設計時期,作為一個軟體的準確率,和它在片上作為一個硬體的準確率以及實現的代價。
它開啟了一些新的應用領域。舉兩個例子:

在設計時期它可以給設計師很多回饋,如上圖可以幫助設計師來了解 CPU裡面功耗的組成。
為了進一步利用這個性質,我們可以允許CPU的設計師或架構師,自己限制來源範圍,從裡面找最有代表性的訊號等,可以使設計師更容易理解這些訊號。通過這種方法,這個模型的可解釋性就變得更強,然後更能夠輔助設計師來進行設計的決策。這當然這個是有一定代價的,如果限制了輸入,它的準確率會有一定的下降,但下降非常少。
那麼另外一個應用是上面所講的voltage-droop電壓降的問題,面對這個問題也可以用OMP來解決。
上圖是用OPM來預測di/dt的值,橫坐標是我們測到的真實值,縱坐標是預測的值。當di/dt是正的時候,電流和power需求在不斷的增加,那麼這個時候有一個voltage-droop,電流需求增加,它的電壓就會突然下降。當然,如果電流需求突然減少,它電壓就會突然上升。
相當於我們有四個象限,如圖兩個藍色區域預測和實際值完全相反,這兩個是錯的預測。而這兩個錯的預測的區域,幾乎沒有點是落在這個地方,就說明預測錯的很少。而在預測對的區域裡面,我們的預測非常準的。
因此我們的OPM可以在實際晶片運行的時候來指導我們去處理這些情況,因為它可以準確的預測。
中間很多的這些點,大家可能認為它的correlation看起來並不好。但請注意,我們的橫軸和縱軸都是log scale,並不是linear scale,其實中間這個點它的值是非常小的,我們只是主動的去把它放大,把這些correlation不好的地方讓大家去看清楚一些,實際上這些值非常小,所以實際上運行的時候影響是不大的。這點我們也可以從pearson simulation看出來,pearson只有0.946,這說明我們的預測是非常準確的,因此我們認為我們的這個模型可以用於voltage-droop的motivation。同時大家注意這是CPU內部主動避免這個行為,相當於是預防。因此就比再加一套電路去阻止它會有效得多。
-
快速的power-madelling對設計和部署CPU產生了實質性的影響
-
該方法與micro-architecture無關,且是自動化的,可以擴展到多個計算解決方案–CPU、GPU、NPU,甚至是子塊。
-
潛在應用範圍:從多核SoC中的power/thermel管理擴展到CPU驅動的主動降壓緩解。
-
ML/Data-Science方法是在設計中的許多方面擁有巨大潛力。
雷峰網