可以看出,智能體并不像人類專家一樣追求直線布局。為了優化布局,智能體更傾向于弧形布局。我們也希望能訓練智能體高效地創造一些前所未有的布局方式。
為了實現這個目標,首先,我們運用強化學習算法優化某個芯片設計塊的布局,期間需要經歷上萬次迭代;然后,重復前一步驟,在多個不同的設計塊上預訓練出一套布局規則,最終讓算法在面對前所未見的新設計塊時也能給出布局方案。
預訓練好的策略有助于在推理時做更少的迭代,進行“零次(zero-shot)布局”。我們實際上還沒有新算法來優化這個特定的設計,當然我們可以做數百次迭代以得到更好的結果。
上圖展示了使用不同方法時的布局成本。藍線表示不經過預訓練的從頭訓練策略的布局成本,綠線表示用已預訓練的算法優化新設計塊的布局,X軸表示訓練時間,可以看到,藍線在經過20多小時的訓練后方可大幅降低布局成本,此后仍需經過一段時間才能達到收斂。而綠線只用了極少的訓練時間就達到了更低的布局成本并很快收斂。
最令我感到興奮的是圈紅部分。調優預訓練策略在短時間內就可實現相當不錯的布局,這種實現就是我所說的,在一兩秒內完成芯片設計的布局。
上圖展示了更詳細的不同設計的情況。Y軸表示線長成本(越低越好)。綠色表示使用商業工具的線長成本,可以看到,從淺藍色(零次布局)→藍色(2小時微調)→深藍色(12小時微調),線長成本越來越低。深藍色一直比黃色的線長成本要低,因為通過12小時的微調能從其他設計中學到最佳布局。
上圖中,左邊和右邊分別展示了從頭訓練的策略和經過微調預訓練策略的芯片布局過程。每個小方塊表示一個宏的中心,空白部分表示為標準單元預留的位置。可以看到,右邊從一開始就將宏放在邊緣,將大片中間區域留空。而左邊則要經過很多次迭代才能形成這樣的格局。
我們利用強化學習工具針對TPU v5芯片的37個設計塊進行了布局與布線。其中,26個設計塊的布局與布線質量優于人類專家,7個設計塊的質量與人類專家相近,4個設計塊的質量不如人類專家。目前我們已經把這個強化學習工具投入到芯片設計流程中了。
總的來說,用機器學習進行芯片布局與布線的好處包括:可以快速生成多種布局方案;即使上游設計有重大改動也可以迅速重新布局;大幅減少開發新ASIC芯片所需的時間和精力。
驗證
接下來是芯片設計的驗證階段。我們希望用較少的測試次數覆蓋多個測試項目。驗證是阻礙芯片設計提速的主要瓶頸。據估計,芯片設計過程中,80%的工作量在于驗證,而設計本身僅占20%。因此,驗證技術的任何一點進步都會產生重大作用。
Google在2021年NeurIPS(神經信息處理系統大會)上發表了論文《Learning Semantic Representations to Verify Hardware Designs》,我們能不能運用機器學習生成在更短時間內覆蓋更廣狀態空間的測試用例?
驗證階段的基本問題是可達性(reachability)。目前的芯片設計能否讓系統達成需要的狀態?我們的想法是,根據當前的芯片設計生成一個連續的表示,從而預測對系統的不同狀態的可達性。
我們可以通過RTL將芯片設計抽象為一張圖,然后運用基于圖的神經網絡去了解該圖的特性,從而了解其對應芯片設計的特性,繼而決定測試覆蓋率和測試用例,這給了我們一個很好的設計的抽象表示。
當然,如何將這種方法應用到實際芯片設計中將是另外一個重要話題。用RTL生成圖表示之后,我們在圖神經網絡中運用一種叫Design2Vec的技術進行深度表示學習,從而幫助我們作出預測。
目前,芯片的驗證環節需要大量人力,例如,找bug、查找測試覆蓋率漏洞、分析和解決bug等,還需要經歷多次如上圖所示的流程循環。我們希望上述步驟可以實現自動化,自動生成新的測試用例以解決重要的問題。
后來我們發現,可以把這個問題轉化為一個監督學習問題。如果之前進行了一系列測試,并知道這些測試覆蓋哪些測試點,就可以將這些數據用作監督學習中的訓練數據。
然后,當出現新的測試點時,假設進行一個新的測試,我們需要預測這個測試能否覆蓋新的測試點。我們希望能結合之前的訓練數據以及芯片設計本身,來實現這種預測。
我們有兩個Baseline,其中一個能夠看到測試點(test points)和覆蓋點(cover points)的數據,這是一個黑盒測試。
而Design2Vec除了能夠處理上述數據外,還能處理實際設計、設計的圖結構等等。如果你使用一半的測試點作為訓練數據,并且設置多個大小不同的訓練集,然后對其它測試點進行預測,那么將會得到非常出色的結果,即使是對于相對較少的覆蓋點,也能泛化得非常好。相比之下,Baseline這種方法就不能對此進行很好地泛化。
但使用圖神經網絡來學習設計、覆蓋率和測試屬性的方法,實際上比NeurIPS論文中的其他所有Baseline都要好。
例如,我們常會遇到很多難以生成測試的覆蓋點。工程師們發現使用RISC-V Design和TPU Design這兩種不同的設計也很難為這些特定的覆蓋點生成測試,于是我們又轉向使用貝葉斯優化器來嘗試生成測試。
上圖右邊這一列是貝葉斯優化器覆蓋的不同測試點、覆蓋點所需的模擬器調用數(simulator calls),中間一列是使用Design2Vec所需的模擬器調用數。從中可以看到,為覆蓋這些有挑戰性的覆蓋點,Design2Vec生成的測試要少于貝葉斯優化器。所以Design2Vec非常好,相比之下它更快,能聚焦覆蓋范圍,還能節省在運行計算模擬器(本身很昂貴)上的開銷。
驗證是芯片設計在理論和實踐上長期面臨的一個挑戰。我們認為,深度表示學習能夠顯著提高驗證效率和質量,并且在設計中實現泛化。
即使設計發生了一些改變,這個新設計的版本也能運用之前在眾多設計上訓練出來的系統,提高驗證效率。正如在布局與布線階段,經過訓練后的算法即使面對新設計也能夠預測不同測試的覆蓋點,以帶來好的結果。
-
Google
+關注
關注
5文章
1766瀏覽量
57617 -
芯片設計
+關注
關注
15文章
1023瀏覽量
54933 -
硬件設計
+關注
關注
18文章
398瀏覽量
44591 -
機器學習
+關注
關注
66文章
8424瀏覽量
132766 -
神經網絡技術
+關注
關注
0文章
6瀏覽量
5303
發布評論請先 登錄
相關推薦
評論