0
| 本文作者: 我在思考中 | 2021-11-22 10:39 |

編輯 | 青暮
第54屆IEEE/ACM計算機體系結(jié)構(gòu)頂會MICRO 2021于2021年10月16-20日作為全球在線活動舉辦。希臘雅典作為主辦城市進行轉(zhuǎn)播。
IEEE/ACM 微體系結(jié)構(gòu)國際研討會(IEEE/ACM International Symposium on Microarchitecture)是介紹和討論先進計算和通信系統(tǒng)創(chuàng)新微架構(gòu)思想和技術(shù)的主要論壇。本次研討會匯集了與微架構(gòu)、編譯器、芯片和系統(tǒng)等相關(guān)領(lǐng)域的研究人員,就傳統(tǒng)微結(jié)構(gòu)主題和新興研究領(lǐng)域進行技術(shù)交流。
來自杜克大學的謝知遙介紹了他們團隊的最新工作《 APOLLO: An Automated Power Modeling Framework for Runtime Power Introspection in High-Volume Commercial Microprocessors 》,該論文獲得了MICRO2021最佳論文獎(Best Paper Award)。

謝知遙是杜克大學計算機工程專業(yè)的博士生、 致力于EDA/VLSI 設(shè)計機器學習算法,擅長機器學習、電子設(shè)計自動化、VLSI設(shè)計、編程。
他的導師是陳怡然教授。陳怡然教授是杜克大學電子與計算機工程系教授,計算進化智能中心主任,致力于新型存儲器及存儲系統(tǒng),機器學習與神經(jīng)形態(tài)計算,以及移動計算系統(tǒng)等方面的研究。

他們的工作APOLLO是針對于現(xiàn)代化的商業(yè)CPU或Micro processors所研發(fā)的一個自動化的功耗模擬架構(gòu)(Power-Modeling Framework)。
AI科技評論有幸邀請到謝知遙,為我們親自解讀這篇論文的來龍去脈。
以下,AI科技評論對謝知遙的分享進行了不改變原意的整理:
該工作是在CPU設(shè)計或運行中所遇到的現(xiàn)實性問題的基礎(chǔ)之上進行研究的。
首先第一個也是最大的問題。在CPU設(shè)計時期需要對power有更多的了解,而我們現(xiàn)在對power了解是不夠的。這取決于設(shè)計時的trade off,即權(quán)衡或取舍。芯片設(shè)計最大的一個trade off是performance and power,即要好的性能,還是要低的功耗。
設(shè)計師在設(shè)計每一代芯片時都要提升芯片的性能,通常反應(yīng)在提升IPC或者最大頻率等方面。在過去幾十年間,因為摩爾定律,性能的提升較為容易。
但由于摩爾定律效用放緩,導致性能提升變得不再那么容易。在這種情況下,設(shè)計師就需要在微架構(gòu)上有更多的創(chuàng)新,但在這個過程中,伴隨運行速度的增加,功耗往往也不斷增加。
另一方面輸電資源(power delivery sources)技術(shù)的發(fā)展非常緩慢。首先輸電線上的電阻很大,導致不能提供足夠的power。另外封裝技術(shù)有限,封裝上面的電感(inductance)會導致無法提供所需的快速變化的電流或power。
power和電流通常成正比,因此很難得到一個快速變化的電流。要一瞬間電流突然增大,只能慢慢的增大,不能一瞬間增大那么多。
結(jié)合兩方面因素,促使我們不僅想要在設(shè)計時對功耗有更多的了解,而且在運行中要對power進行管理,而不能出現(xiàn)很多不想要的情況。

運行管理中最常見問題在于peak power mitigation。最大功耗有一個閾值,如果超過了閾值,就需要進行管理,使功耗壓降低,否則會出現(xiàn)一系列的問題。管理power的峰值通常要準確實時計算power。在CPU運行時,根據(jù)power的計算減少給定CPU的指令,隨之功耗就會降低。
但現(xiàn)在在設(shè)計CPU時,很多情況下都是人工在芯片上找能夠模擬功耗的信號,這種方式不僅困難而且非常不準確。
此外,更重要的一個問題是快速電流的變化(或者power的變化)會導致一個很快的電壓降叫做voltage-droop。

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

工業(yè)界標準的 Power模擬流程

不同類型的power simulation的方法
首先,它在設(shè)計和運行時,都能夠?qū)ower進行既快又準地預(yù)測。在商業(yè)化的CPU上能夠做到90%~95%的正確率,我們把它在Neoverse N1 CPU上進行實現(xiàn),我們發(fā)現(xiàn)它面積的overhead只有0.2%。
其次,對于任何一個設(shè)計該模型都可以自動生成。
不僅如此,每個cycle都能得到一個準確的power,時間分辨率非常好。
而且我們認為APOLLO模型可以延展到更高層次的模擬。

我們在Neoverse N1商業(yè)化的CPU上面,運行了一個workload。這個workload非常大,一共有1700萬個時鐘周期。我們對這1700萬個時鐘周期的每一個cycle都進行預(yù)測,上圖展示的是4萬個。在工業(yè)界用傳統(tǒng)的方法可能需要兩個星期的時間,而用我們的方法的,幾分鐘就可以做完。
準確率高、速度快的同時,對存儲的要求減少了100倍以上,只需要存我們感興趣的信號,這也是一個非常大的提升。保持這樣的速度、準確度,得到每個周期的power這在之前的工作中幾乎是做不到的。

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

基于此,每個cycle就可以進行這樣處理。每個cycle中,對每個信號(ABCDE)用1表示它翻轉(zhuǎn)了,0表示沒有翻轉(zhuǎn),要翻轉(zhuǎn)就肯定會有功耗。這是cycle0,同樣可以得到cycle1、cycle2等等,翻轉(zhuǎn)活動就是模型的輸入,然后來預(yù)測功耗。
如圖,得到的矩陣的寬度是M, M表示design里面一共有M個signal,因此一共有M個輸入,每個cycle就是一個sample。接著每個cycle都會做power simulation,得到最準確的power(p0、p1、p2……),將此作為一個vector。vector也是從p0開始的準確的功耗,有x、y,有輸入有l(wèi)abel,就可以訓練一個machine learning模型,得出F(x)=y。
我們想要做的是訓練出既準確又效率高的F。強調(diào)一點,我們的工作始終主要關(guān)注的是動態(tài)的power。由于當代CPU都非常復雜,并不是那么容易做,因此我們就要簡化F模型。
核心思想
但是即使我們有一個線性模型,但這個線性模型還是M個input,M依然非常大,還是很復雜。
我們的第二個核心的思想是:一小部分cycle就能夠提供足夠的信息。因為很多信號都是相關(guān)的并不是完全相互獨立,很多信號甚至完全一樣。只需要看一部分最有代表性的信號,就足夠作為模型的輸入。

因此我們從M個信號中自動選取Q個有代表性的信號,我們把它叫做power proxies,然后讓Q遠小于M,這樣模型就會變得很簡單。

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

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

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

我們測了它的error,MAE(mean absolute error)和RMSE(這兩個值是越小越好)小于10%,(該值越大越好)高于0.95,說明準確率非常高。
同時我們計算了每個workload的MAE,發(fā)現(xiàn)所有類型的workload的MAE都少于10%,這說明了它的準確性。并且即使是7%的錯誤,也是由于清晰度太高,導致每個cycle之間有一個小錯誤這個是很難避免的。如果從一個更大的measurement window來算平均power,就會更準確。
事實上,APOLLO可以對任何一個measurement window進行計算,而不僅僅是 per-cycle。

如上圖,如果現(xiàn)在不需要per-cycle,只要一個average power ,over128個cycle,在這種情況下,只需要70個input,就可以做出一個準確的預(yù)測。預(yù)測結(jié)果error小于3%,如果能夠容忍一個更大的measurement window,準確度將會幾乎接近100%,因此在降低條件的情況下,它的性能可以有進一步的提升。
將APOLLO植入CPU
考慮到它的input數(shù)量少,同時模型簡單、準確度高,因此我們要把它做到CPU里面。
首先有Q個輸入作為input,輸入全都是0或者1,因此這個模型里面不需要乘法器,這樣可以節(jié)省很大一筆開銷。

同時weight作為quantization,不需要64位的weight那么準,只要需要十幾位的weight,就可以很準確,因此開銷又變得小了。
基于這個模型,用c++就可以很簡單實現(xiàn)這個OMP模型,然后基于 C++的template,進行Hign-Level Synthesis,獲得 design的RTL,如果這個RTL 可以和CPU的RTL合在一起,然后我們?nèi)プ?tape out,這是一個最基本的思路,而流程本身也很簡單。
同時基于C++的硬件設(shè)計,還可以verifying,可以驗證硬件設(shè)計也是準確的。

上面的圖是APOLLO在軟件上運行的結(jié)果。下面是硬件設(shè)計做的verification
但注意下面這張圖首先沒有乘法器,另外它的weight現(xiàn)在不是64位,只有11位。在硬件已經(jīng)優(yōu)化的情況下它幾乎沒有準確率的損失,這說明硬件設(shè)計非常好。
硬件一定有trade off,在accuracy和hardware cost之間尋求一個平衡,因此我們計算了一下它到底是如何trade off的,然后來輔助我們設(shè)計一個這樣的模塊。

如圖所示,我們用y軸來表示它的accuracy in error,然后用這個顏色來表示它在硬件上的代價(area overhead),即占CPU比例是多少。
首先可以改變input的數(shù)量,另外一方面可以改變 quantization bits,我們改變這兩個值觀察它對accuracy和area overhead的trade off。
如上圖,測量的結(jié)果中每個點都會有一個accuracy對應(yīng)的hardware cost。當W繼續(xù)小于10時,area會飛快的上升,即quantization 加的太大了,已經(jīng)使原來的X扭曲掉了。所以quantization不能加的過大,并且W沒必要大于12。因此我們策略是保持 W在10~12之間。
如果需要不同的solution,可以改變Q。比如我們根據(jù)這個策略,我們現(xiàn)在選到1個solution。如上圖,OPM的Q是159,weight是11位,error大概是10%,在Neoverse N1上它的area overhead小于0.2%。所以我們認為它的實現(xiàn)代價非常低,并且準確率足夠高,因此我們認為這是一個非常不錯的 solution。
所以到現(xiàn)在我已經(jīng)介紹了它在設(shè)計時期,作為一個軟件的準確率,和它在片上作為一個硬件的準確率以及實現(xiàn)的代價。
它開啟了一些新的應(yīng)用領(lǐng)域。舉兩個例子:

在設(shè)計時期它可以給設(shè)計師很多反饋,如上圖可以幫助設(shè)計師來了解 CPU里面功耗的組成。
為了進一步利用這個性質(zhì),我們可以允許CPU的設(shè)計師或架構(gòu)師,自己限制來源范圍,從里面找最有代表性的信號等,可以使設(shè)計師更容易理解這些信號。通過這種方法,這個模型的可解釋性就變得更強,然后更能夠輔助設(shè)計師來進行設(shè)計的決策。這當然這個是有一定代價的,如果限制了輸入,它的準確率會有一定的下降,但下降非常少。
那么另外一個應(yīng)用是上面所講的voltage-droop電壓降的問題,面對這個問題也可以用OMP來解決。

上圖是用OPM來預(yù)測di/dt的值,橫坐標是我們測到的真實值,縱坐標是預(yù)測的值。當di/dt是正的時候,電流和power需求在不斷的增加,那么這個時候有一個voltage-droop,電流需求增加,它的電壓就會突然下降。當然,如果電流需求突然減少,它電壓就會突然上升。
相當于我們有四個象限,如圖兩個藍色區(qū)域預(yù)測和實際值完全相反,這兩個是錯的預(yù)測。而這兩個錯的預(yù)測的區(qū)域,幾乎沒有點是落在這個地方,就說明預(yù)測錯的很少。而在預(yù)測對的區(qū)域里面,我們的預(yù)測非常準的。
因此我們的OPM可以在實際芯片運行的時候來指導我們?nèi)ヌ幚磉@些情況,因為它可以準確的預(yù)測。
中間很多的這些點,大家可能認為它的correlation看起來并不好。但請注意,我們的橫軸和縱軸都是log scale,并不是linear scale,其實中間這個點它的值是非常小的,我們只是主動的去把它放大,把這些correlation不好的地方讓大家去看清楚一些,實際上這些值非常小,所以實際上運行的時候影響是不大的。這點我們也可以從pearson simulation看出來,pearson只有0.946,這說明我們的預(yù)測是非常準確的,因此我們認為我們的這個模型可以用于voltage-droop的motivation。同時大家注意這是CPU內(nèi)部主動避免這個行為,相當于是預(yù)防。因此就比再加一套電路去阻止它會有效得多。
快速的power-madelling對設(shè)計和部署CPU產(chǎn)生了實質(zhì)性的影響
該方法與micro-architecture無關(guān),且是自動化的,可以擴展到多個計算解決方案--CPU、GPU、NPU,甚至是子塊。
潛在應(yīng)用范圍:從多核SoC中的power/thermel管理擴展到CPU驅(qū)動的主動降壓緩解。
ML/Data-Science方法是在設(shè)計中的許多方面擁有巨大潛力。

雷峰網(wǎng)(公眾號:雷峰網(wǎng))
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。