自從1971年費德里科?法金(Federico Faggin)用直尺和彩色鉛筆繪制出了首款商用微處理器英特爾4004后,芯片設計取得了長足進步?,F在的設計師可以選擇很多軟件工具來規劃和測試新的集成電路。然而,隨著芯片越來越復雜,部分芯片包含了數千億個晶體管,設計師必須解決的問題也日益復雜。現有的工具并非總能解決這些問題。
現代芯片工程是一個迭代過程,包括從系統規范到封裝的9個階段。每個階段又包含多個子階段,根據問題的規模及其約束條件,每個子階段可能需要數周甚至數月的時間才能完成。許多設計問題有10100到101000種解決可能性,但其中可行的非常少,這無異于大海撈針。今天的自動化工具通常無法解決這種規模的實際問題,這意味著需要人工介入,從而導致這一過程的繁瑣和耗時程度超出了芯片制造商的期望。
毫不意外的是,人們對利用機器學習加速芯片設計的興趣與日俱增。然而,我們的英特爾人工智能(AI)實驗室團隊發現,僅靠機器學習算法往往不足以解決問題,特別是在需要滿足多個約束條件的情況下。
事實上,我們最近在嘗試開發一種基于人工智能的解決方案來應對一個名為“布圖規劃”(floorplanning)的棘手設計任務(稍后將詳細介紹),但最后發現,基于非人工智能方法(如經典搜索)的工具更成功。這表明,行業不應過早放棄傳統技術。我們現在認為,將兩者優勢結合起來的混合方法(盡管目前研究尚少)可能是最富有成效的發展道路。原因如下。
芯片設計最主要的瓶頸之一在物理設計階段,此時架構已經確定,邏輯和電路設計也已完成。物理設計涉及對芯片布局和連接性的幾何優化。第一步是將芯片劃分為高級的功能模塊,例如CPU核心、存儲模塊等。這些大的分區隨后被進一步細分為更小的部分,即宏單元和標準單元。一個典型的片上系統(SoC)大約有100個高級模塊,這些模塊由數百到數千個宏單元以及數千到數十萬個標準單元組成。
接下來是布圖規劃,在這個階段,需要按照特定設計目標來排列功能模塊,例如高性能、低功耗和成本效益。這些目標通常通過將線長(連接電路元件的納米導線總長度)和空白區域(未被電路占用的芯片總面積)降到最小來實現。這些布圖規劃問題屬于數學規劃中的組合優化類別。如果玩過俄羅斯方塊,那么你就解決過非常簡單的組合優化問題。
芯片布圖規劃就像“加強版”的俄羅斯方塊。首先,可能的解決方案的數量是一個天文數字。一個典型的片上系統布圖規劃中,要排列120個高級模塊,大約有10250種可能的排列方式,而宇宙中的恒星總數大概也僅為1024。宏單元和標準單元的可能排列方式則還要多好幾個數量級。
在目標單一的情況下,比如將功能模塊塞進最小的硅片面積里,商業布圖規劃工具可以在短短幾分鐘內解決這種規模的問題。然而,涉及多個目標和約束條件時,比如特定模塊的位置規則、模塊形狀的限制,或者必須要將某些模塊放置在一起時,這些工具往往難以應付。因此,人類設計師需要頻繁依靠試驗和自身的創造力,這會導致生產進度延長數小時甚至數天。而這僅僅是一個子階段的工作。
雖然過去十年機器學習取得了巨大成功,但它對芯片設計的影響仍然相對有限。英偉達等公司已經開始訓練大語言模型(支持Copilot和ChatGPT等服務的人工智能形式),用于編寫硬件設計程序的腳本和分析漏洞。然而,這些編程任務與解決布圖規劃等復雜的優化問題相去甚遠。
乍一看,將transformer模型(大語言模型的基礎)應用于物理設計問題好像也很有吸引力。理論上,我們可以訓練transformer模型來逐步預測芯片上每個模塊的物理坐標,就像人工智能聊天機器人逐步預測句子中的單詞那樣,從而創建一個基于人工智能的布圖規劃工具。然而,如果試圖教模型安排模塊位置使其不重疊,我們很快就會遇到問題。雖然這個概念對人類而言簡單易懂,對計算機來說卻并非易事,需要耗費大量的訓練數據和時間。其他設計約束中也存在同樣的困難,例如將模塊放置在一起或靠近某個邊緣的要求。
因此,我們采取了不同的方法。我們的首要任務是選擇一種有效的數據結構來表示布圖規劃中的模塊位置。最終,我們選擇了一種稱為B*-樹的結構。在這種結構中,每個模塊都用二叉樹上的一個節點來表示。布圖規劃左下角的模塊是樹的根節點。右側的模塊是一個分支;上方的模塊是另一個分支。每個新節點繼續使用這種模式。因此,隨著二叉樹的生長,它會逐步向右和向上擴展,從而涵蓋整個布局。
B*-樹結構的一個顯著優勢是它能確保布局無重疊,因為模塊的位置是相對的而非絕對的,例如“在另一個模塊的上方”,而不是“在這個位置”。因此,基于人工智能的布圖規劃工具無需預測每個模塊的確切坐標,而是可以根據模塊的尺寸以及其相鄰模塊的坐標和尺寸輕松計算出位置。這樣一來,就不會發生重疊問題。
確定了數據結構后,接下來我們利用包含數百萬個最優布圖規劃方案的數據集訓練了幾種機器學習模型,具體包括圖神經網絡、擴散模型和基于transformer的模型。這些模型學習了預測在已放置模塊的上方或右側應該放置哪個模塊才能生成面積和線長最優的布局。但是,我們很快發現,這種循序漸進的方法并不可行。我們將布圖規劃問題擴展到大約100個模塊的規模,并在“無重疊”規則以外增加了其他硬性約束,包括要求某些模塊必須放置在邊緣等預定的位置,或將共用同一電壓源的模塊分為一組。結果,我們的人工智能模型在追求次優解上浪費了大量時間。
我們推測,問題在于模型無法回溯:模塊是按順序放置的,因此模型無法修正早期不合理的放置。我們可以通過強化學習代理等技術來跨越這一障礙,但要訓練出一個好的模型,這種代理需要進行大量探索,實踐起來非常困難。在走入死胡同后,我們決定放棄逐塊決策的方法,嘗試一種新的策略。
解決大規模組合優化問題的一種常見方法是模擬退火(SA)。這項技術最早提出于1983年,受到了冶金學的啟發,其中,退火是指將金屬加熱至高溫后再緩慢冷卻的過程。受控的能量減少能使原子有序排列,相較于快速冷卻,可使材料更堅固且更柔韌。同樣,模擬退火可逐步找到優化問題的最佳解決方案,無需繁瑣地檢查每種可能性。
其工作原理如下。算法從一個隨機解決方案開始,就我們的情況而言,這個隨機解決方案是一個隨機布圖規劃,用B*-樹表示。然后,我們讓算法再次隨機采取以下3種操作之一:交換兩個模塊、將一個模塊從一個位置移動到另一個位置,或調整一個模塊的寬高比(保持面積不變)。我們會根據總面積和線長的加權平均值來評估生成的布圖規劃的質量。這個數值代表了操作的“成本”。
如果新生成的布圖規劃更好,也就是說,它降低了成本,我們便接受它。如果更差,我們一開始也會接受它,因為某些“糟糕”的決策可能會引導出更優的方向。不過,隨著時間的推移和算法不斷隨機調整模塊,我們接受增加成本操作的頻率逐漸降低。正如金屬加工那樣,我們希望逐步完成轉變。就像金屬快速冷卻會導致原子陷入無序排列一樣,過早限制算法的探索會讓它困在次優解(局部最小值)中。通過在早期給予算法足夠的余地來規避這些陷阱,我們可以引導它找到我們真正想要的解決方案,即全局最小值(或它的充分近似值)。
在解決布圖規劃問題時,我們使用模擬退火取得的結果比使用任何機器學習模型都更成功。模擬退火算法對模塊放置順序沒有限制,因此它可以隨時修改任意模塊,基本上能夠糾正早期的錯誤。沒有了約束條件,我們發現它能在幾分鐘內解決包含數百個模塊的復雜布圖規劃問題。相比之下,使用商業工具的芯片設計師可能需要數小時才能解決同樣的難題。
當然,現實中的設計問題存在約束條件。因此,我們給模擬退火算法增加了一些與機器學習模型相同的約束條件,包括對某些模塊位置的限制以及模塊分組要求。最初,我們嘗試通過在我們的成本函數中加入布圖規劃違反硬性約束的次數來應對這些約束。這樣一來,當算法隨機調整模塊,導致違反約束的次數增加時,我們就更可能拒絕這些操作,從而引導模型避開它們。
可惜的是,這一策略適得其反。將約束條件納入成本函數意味著算法需要在滿足約束與優化面積和線長之間找到平衡。然而,硬性約束本質上是不可妥協的。當我們增加約束變量的權重以強調其剛性時,算法在優化方面的表現很差。模型并沒有努力修復違規,產生全局最小值(最優布圖規劃),而是反復產生模型無法逃脫的局部最小值(次優布局)。
于是我們回到規劃設計階段,設計了一種新的模擬退火方法,稱之為“約束感知模擬退火”(CA-SA)。這種變體采用了兩個算法模塊。第一個是SA模塊,專注于優化面積和線長這一模擬退火最擅長的任務。第二個模塊會隨機選擇一個約束違規并修復它。這個修復模塊很少啟動(大約每執行一萬次操作才啟動一次),但一旦啟動,無論對面積和線長有什么樣的影響,其決策總是能夠被接受。因此,我們可以引導CA-SA算法找到滿足硬性約束的解決方案,而不阻礙該算法。
使用這種方法,我們開發了一款開源布圖規劃工具,能夠同時運行多個CA-SA迭代。我們稱之為“并行約束感知模擬退火”(Parsac)。人類設計師可以從Parsac的解決方案中選擇最佳方案。我們根據含有多達300個模塊的主流布圖規劃基準測試了Parsac,它輕松超越了其他已發布的方法,包括其他基于SA的算法和機器學習模型。
不過,這些既定基準已有20多年的歷史,無法反映現代的片上系統設計。其主要缺點是缺乏硬性約束。為了解Parsac在更現實的設計中的表現,我們在這些基準問題中加入了自己定義的約束條件,包括模塊放置和分組要求。讓我們高興的是,Parsac在15分鐘內成功解決了商業規模(約100個模塊)的高級布局問題,成為了同類中最快的布圖規劃工具。
我們現在正在開發另一種基于幾何搜索的非人工智能方法,用于處理含有不規則形狀模塊的布圖規劃問題,進一步深入到現實場景中。不規則布局過于復雜,無法用B*-樹表示,因此我們回到了依次放置模塊的辦法。初步結果表明,這種新方法甚至可能比Parsac更快,但由于無法回溯,所得解決方案可能不是最優方案。
與此同時,我們也在努力調整Parsac以適應宏單元布局,該布局比塊級布局的細粒度更高,這意味著元件規模從數百個擴展到數千個,同時仍要遵守約束。單靠CA-SA可能太慢,無法高效解決如此大規模和高復雜度的問題,而這正是機器學習能發揮作用的地方。
例如,給定一個SA生成的布圖規劃,我們可以訓練人工智能模型來預測哪些操作可以改善布局的質量。然后,我們可以利用這個模型來指導CA-SA算法的決策。算法不再僅僅采取隨機或“簡單”的操作(同時遵守約束),而是以一定的概率接受模型的“智能”操作。通過與高復雜度模型配合,我們推測Parsac可以大幅減少尋找最優解決方案所需的操作次數,大大縮短運行時間。然而,允許某些隨機操作仍然至關重要,因為它能使算法全面地探索問題,否則它可能會陷入次優解的陷阱,就像我們之前失敗的和高復雜度布圖規劃工具一樣。
除布圖規劃外,這種方法或類似方法也可能對解決其他復雜的組合優化問題有幫助。在芯片設計中,這類問題包括核心的互連路由優化和布爾電路最小化,其中的挑戰是用最少的門和輸入來構建執行功能的電路。
使用Parsac的經驗也啟發我們創建了布圖規劃樣本開放數據集,我們期望這些數據集能夠成為該領域的新基準。隨著研究人員想要驗證新的芯片設計工具,對這類現代基準的需求也愈加迫切。例如,近期有項研究根據老舊基準或專有布局對新型機器學習算法的性能提出了要求,引發了對這些要求合法性的質疑。
我們已經發布了FloorSet-Lite和FloorSet-Prime兩個數據集,目前可以在GitHub上找到。每個數據集包含100萬個布局,用于訓練機器學習模型,并提供了100個優化了面積和線長的測試布局。在設計這些布局時,我們力圖全面覆蓋現代片上系統布圖規劃的廣泛性和復雜性。它們包含的模塊數量從20個到120個不等,并且包括實際的設計約束條件。
這兩個數據集的復雜性不同。FloorSet-Lite使用了矩形模塊,反映了模塊通常被配置為簡單形狀的早期設計階段。FloorSet-Prime則使用了不規則模塊,在設計過程的后期更常見。在這個階段,模塊內的宏單元、標準單元和其他組件的布局已優化,形成了不規則的模塊形狀。
雖然這些數據集是人工創建的,但我們特別注意加入了商業芯片的特征。為此,我們創建了布圖規劃屬性的詳細統計分布,如模塊尺寸和約束類型。然后我們從這些分布中抽樣,以生成合成布圖規劃,模擬真實的芯片布局。
這些穩健的開放數據集可以顯著推動機器學習在芯片設計中的應用。然而,我們不太可能用完全依賴和人工智能的解決方案來解決布圖規劃這類復雜的優化問題。深度學習模型之所以能夠在對象識別和語言生成等任務中占優勢,是因為它們特別擅長捕捉訓練數據中的統計規律,并將這些模式與所需的輸出關聯起來。但這種方法不太適用于硬性組合優化問題,它們需要模式識別以外的技術來解決。
相反,我們預計混合算法將成為最終的贏家。通過學習識別最有前景的解決方案類型以便進行探索,人工智能模型可智能地引導Parsac等搜索代理,從而提高其效率。芯片設計師可以更快地解決問題,推動制造更復雜、更節能的芯片,甚至可以將多個設計階段合并為一個單一的優化問題,或同時進行多個設計。人工智能可能無法完全獨立地設計芯片,甚至不能解決單一設計階段的所有問題,但結合其他創新方法后,它將改變該領域的游戲規則。
作者:Somdeb Majumdar, Uday Mallappa, Hesham Mostafa
IEEE Spectrum
《科技縱覽》
官方微信公眾平臺
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.