作者|Jeff Dean
翻譯|沈佳麗、胡燕君、賈川
為什么芯片設計需要很長時間?能不能加速芯片設計周期?能否在幾天或幾周之內完成芯片的設計?這是一個非常有野心的目標。過去十年,機器學習的發展離不開系統和硬件的進步,現在機器學習正在促使系統和硬件發生變革。
Google在這個領域已率先出發。在第58屆DAC大會上,Google AI負責人Jeff Dean分享了《機器學習在硬件設計中的潛力》,他介紹了神經網絡發展的黃金十年,機器學習如何影響計算機硬件設計以及如何通過機器學習解決硬件設計中的難題,并展望了硬件設計的發展方向。
他的演講重點在于Google如何使用機器學習優化芯片設計流程,這主要包括架構搜索和RTL綜合、驗證、布局與布線(Placement and routing)三大階段。在架構搜索階段,Google提出了FAST架構自動優化硬件加速器的設計,而在驗證階段,他們認為使用深度表示學習可提升驗證效率,在布局與布線階段,則主要采用了強化學習技術進行優化。
以下是他的演講內容,由OneFlow社區編譯。
1、神經網絡的黃金十年
制造出像人一樣智能的計算機一直是人工智能研究人員的夢想。而機器學習是人工智能研究的一個子集,它正在取得很多進步,F在大家普遍認為,通過編程讓計算機變得“聰明”到能觀察世界并理解其含義,比直接將大量知識手動編碼到人工智能系統中更容易。
神經網絡技術是一種非常重要的機器學習技術。神經網絡一詞出現于1980年代左右,是計算機科學術語中一個相當古老的概念。雖然它當時并沒有真正產生巨大的影響,但有些人堅信這是正確的抽象。
本科時,我寫了一篇關于神經網絡并行訓練的論文,我認為如果可以使用64個處理器而不是一個處理器來訓練神經網絡,那就太棒了。然而事實證明,我們需要大約100萬倍的算力才能讓它真正做好工作。
2009年前后,神經網絡技術逐漸火熱起來,因為我們開始有了足夠的算力讓它變得有效,以解決現實世界的問題以及我們不知道如何解決的其他問題。2010年代至今是機器學習取得顯著進步的十年。
是什么導致了神經網絡技術的變革?我們現在正在做的很多工作與1980年代的通用算法差不多,但我們擁有越來越多的新模型、新優化方法等,因此可以更好地工作,并且我們有更多的算力,可以在更多數據上訓練這些模型,支撐我們使用更大型的模型來更好地解決問題。
在探討設計自動化方面之前,我們先來看看一些真實世界的例子。首先是語音識別。在使用深度學習方法之前,語音識別很難得到實際應用。但隨后,使用機器學習和神經網絡技術,大幅降低了詞語的識別錯誤率。
幾年后,我們將錯誤率降低到5%左右,讓語音識別更加實用,而現在,在不聯網的設備里,我們都可以做到僅僅4%左右的錯誤率。這樣的模型被部署在人們的手機里面,隨時隨地幫助人們識別自己的語音。

計算機視覺方面也取得了巨大的進步。2012年左右,Alex Krizhevsky、Ilya Sutskever和Geoffrey Hinton在ImageNet比賽中首次使用了AlexNet,錯誤率得到顯著降低,并在當年奪得桂冠。
后一年的ImageNet比賽中,幾乎所有參賽者都使用深度學習方法,研究人員則進一步放棄了傳統的方法。其中,2015年,由何愷明等微軟研究人員提出ResNet更進一步降低了錯誤率。
當時的斯坦福大學研究生Andrej Karpathy正在幫助運營ImageNet比賽,他想知道如果人工識別這項艱難的任務,錯誤率會是多少。在上千個類別中有40種狗,你必須能夠看著一張照片說:“哦,那是一只羅威納犬,不是一只大力金剛犬,或者其他品種的狗。” 經過一百個小時的訓練,他將錯誤率降到了5%。
這是一項非常艱難的任務,將計算機識別錯誤率從2011年的26%降低到2017年的2%是一件很了不起的事,過去計算機無法識別的東西,現在已經可以識別。自然語言處理、機器翻譯和語言理解中也經歷了類似的故事。

此外,開源框架確實使世界各地的許多人能夠應用機器學習技術,TensorFlow就是其中之一。
大約在2015年11月,我們開源了TensorFlow以及供Google內部使用的工具。TensorFlow對世界產生了相當大的影響,它已經被下載了大約5000萬次,當然也出現了很多其他框架,比如JAX、PyTorch等等。
世界各地的人們能夠將機器學習用于各種了不起的用途,例如醫療保健、機器人技術、自動駕駛等等,這些領域都是通過機器學習方法來理解周圍的世界,進而推動領域的發展。
2、機器學習改變計算機設計方式

ML研究社區中的許多成功源自使用更多算力和更大的模型,更多的算力促進了機器學習研究領域中重要成果的產生。深度學習的發展正在深刻改變計算機的結構,F在,我們想圍繞機器學習計算類型構建專門的計算機。

近年來,我們已經在Google做了很多類似的工作,其中TPU(張量處理單元)是我們構建定制處理器的一種方法,這些處理器專為神經網絡和機器學習模型而設計。
TPU v1是我們第一個針對推理的產品,當你擁有經過訓練的模型,并且只想獲得已投入生產使用的模型的預測結果,那它就很適合,它已經被用于神經機器翻譯的搜索查詢、AlphaGo比賽等應用中。
后來我們還構建了一系列處理器。TPU v2旨在連接在一起形成稱為Pod的強大配置,因此其中的256個加速器芯片通過高速互聯緊緊連接在一起。TPU v3則增加了水冷裝置。
TPU v4 Pod不僅可以達到ExaFLOP級的算力,它還讓我們能夠在更大的模型訓練中達到SOTA效果,并嘗試做更多的事情。
以ResNet-50模型為例,在8塊P100 GPU上訓練完ResNet-50需要29小時,而在2021年6月的MLPerf競賽中,TPU v4 pod僅耗時14秒就完成了訓練。但我們的目的不僅僅是在14秒內訓練完ResNet,而是想把這種強大的算力用于訓練其他更先進的模型。
可以看到,從一開始的29小時到后來的14秒,模型的訓練速度提高了7500倍。我認為實現快速迭代對于機器學習非常重要,這樣才能方便研究者試驗不同想法。
基于機器學習的計算方式越來越重要,計算機也正在往更適應機器學習計算方式的方向上演進。但深度學習有可能影響計算機的設計方式嗎?我認為,答案是肯定的。
3、機器學習縮短芯片設計周期
目前,芯片的設計周期非常長,需要幾十甚至幾百人的專業團隊花費數年的努力。從構思到完成設計,再到成功生產,中間的時間間隔十分漫長。但如果將來設計芯片只需要幾個人花費幾周時間呢?這是一個非常理想的愿景,也是研發人員當前的目標。

如上圖所示,芯片設計包含四個階段:架構探索→RTL綜合→驗證→布局和布線。完成設計之后,在制作生產環節需要進行布局和布線(Placement & Routing),有沒有更快、更高質量的布局和布線方法?驗證是非常耗時的一步,能不能用更少的測試次數涵蓋更多的測試項目?有沒有自動進行架構探索和RTL綜合的方法?目前,我們的芯片架構探索只針對幾種重要的應用,但我們終將要把目光擴大。
布局與布線
首先,關于布局和布線,Google在2020年4月發表過一篇論文Chip Placement with Deep Reinforcement Learning,2021年6月又在Nature上發表了A graph placement methodology for fast chip design。
我們知道強化學習的大致原理:機器執行某些決定,然后接收獎勵(reward)信號,了解這些決定帶來什么結果,再據此調整下一步決定。
因此,強化學習非常適合棋類游戲,比如國際象棋和圍棋。棋類游戲有明確的輸贏結果,機器下一盤棋,總共有50到100次走棋,機器可以根據最終的輸贏結果評定自己和對手的整套走棋方法的有效性,從而不斷調整自己的走棋,提高下棋水平。
那么ASIC芯片布局這項任務能不能也由強化學習智能體來完成呢?

這個問題有三個難點。第一,芯片布局比圍棋復雜得多,圍棋有10^{360}種可能情況,芯片布局卻有10^{9000}種。
第二,圍棋只有“贏”這一個目標,但芯片布局有多個目標,需要權衡芯片面積、時序、擁塞、設計規則等問題,以找到最佳方案。
第三,使用真實獎勵函數(true reward function)來評估效果的成本非常高。當智能體執行了某種芯片布局方案后,就需要判斷這個方案好不好。如果使用EDA工具,每次迭代都要花上很多個小時,我們希望將每次迭代所需時間縮減為50微秒或50毫秒。

利用強化學習進行芯片布局的步驟如下:首先從空白底座開始,運用分布式PPO算法(強化學習的常用算法)進行設計,然后完成每個節點的布局放置,最后進行評估。
評估步驟使用的是代理獎勵函數(proxy reward function),效果和真實獎勵函數相近,但成本低得多。在一秒或半秒內就可以完成對本次布局方案的評估,然后指出可優化之處。

構建獎勵函數需要結合多個不同的目標函數,例如線長、擁塞和密度,并分別為這些目標函數設定權重。

如上圖所示,布局優化采取的是混合方式。強化學習智能體每次放置宏(macro),然后通過力導向方法(force-directed method)放置標準單元。

上圖來自前面提到的Nature論文,展示了更多芯片架構的細節。

上圖展示了一個TPU設計塊的布局與布線結果。白色區域是宏,綠色區域是標準單元群(standard cell clusters)。
圖中左邊是人類專家完成的設計,從中可以看出一些規律。人類專家傾向于把宏沿邊緣放置,把標準單元放在中間。一名人類專家需要6~8周完成這個布局,線長為57.07米。圖中右邊是由智能體(ML placer)完成的布局,耗時24小時,線長55.42米,違反設計規則的地方比人類專家略多,但幾乎可以忽略。
可以看出,智能體并不像人類專家一樣追求直線布局。為了優化布局,智能體更傾向于弧形布局。我們也希望能訓練智能體高效地創造一些前所未有的布局方式。

為了實現這個目標,首先,我們運用強化學習算法優化某個芯片設計塊的布局,期間需要經歷上萬次迭代;然后,重復前一步驟,在多個不同的設計塊上預訓練出一套布局規則,最終讓算法在面對前所未見的新設計塊時也能給出布局方案。

預訓練好的策略有助于在推理時做更少的迭代,進行“零次(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非常好,相比之下它更快,能聚焦覆蓋范圍,還能節省在運行計算模擬器(本身很昂貴)上的開銷。

驗證是芯片設計在理論和實踐上長期面臨的一個挑戰。我們認為,深度表示學習能夠顯著提高驗證效率和質量,并且在設計中實現泛化。
即使設計發生了一些改變,這個新設計的版本也能運用之前在眾多設計上訓練出來的系統,提高驗證效率。正如在布局與布線階段,經過訓練后的算法即使面對新設計也能夠預測不同測試的覆蓋點,以帶來好的結果。
架構探索和RTL綜合

在芯片設計中,另一個比較耗時的方面是要清楚你究竟想要構建何種設計。此時你需要做一些架構探索(architectural exploration),然后做RTL綜合。目前計算機架構師和其他芯片設計師等具有不同專業知識的人花費大量時間來構建他們真正想要的設計,然后驗證、布局和布線,那么我們可以學習自動做架構探索和綜合嗎?
現在我們正在研究的就是如何為已知的問題實行架構探索。如果我們有一個機器學習模型,并且想要設計一個定制芯片來運行這個模型,這個過程能否實現自動化,并提出真正擅長運行該特定模型的優秀設計。
關于這項工作,我們在arXiv發表了論文《A Full-stack Accelerator Search Technique for Vision Applications》,它著眼于很多不同的計算機視覺模型。另外一個進階版本的論文被ASPLOS大會接收了《A Full-stack Search Technique for Domain Optimized Deep Learning Accelerators》。

這里要解決的問題是:當你設計一個機器學習加速器時,需要考慮你想在哪個加速器上運行什么樣的機器學習模型,而且這個領域的變化非常之快。
上圖中的紅線是指引入的不同計算機視覺模型,以及通過這些新模型實現的ImageNet識別準確率提升。
但問題是,如果你在2016年想要嘗試設計一個機器學習加速器,那么你需要兩年時間來設計芯片,而設計出來的芯片三年后就會被淘汰。你在2016年做的決定將會影響計算,要保證在2018年-2021年高效運行,這真的很難。比如在2016年推出了Inception-v3模型,但此后計算機視覺模型又有四方面的大改進。
因此,如果我們能使設計周期變得更短,那么也許單個工作負載加速器能變得可用。如果我們能在諸多流程中實現自動化,那么我們或許能夠得到正反饋循環,即:縮短機器學習加速器的上市時間,使其能更適合我們當下想要運行的模型,而不用等到五年后。
4、用機器學習探索設計空間

實際上,我們可以使用機器學習來探索設計空間。有兩個因素影響加速器性能,一是設計中內置的硬件數據通道,二是工作負載如何通過編譯器而不是更高級別的軟件映射到該數據通道。通常,設計空間探索實際上只考慮當前編譯器優化的數據通道,而不是協同設計的編譯器優化和優化數據通道時可能會做的事。
因此,我們能否同時優化數據通道、調度(schedule)和一些編譯器決策,并創建一個搜索空間,探索出你希望做出的共同設計的決策。這是一種覆蓋計算和內存瓶頸的自動搜索技術,探索不同操作之間的數據通道映射和融合。通常,你希望能夠將事物融合在一起,避免內存傳輸的每次內存負載中執行更多操作。

根本上說,我們在機器學習加速器中可能做出的設計決策創建了一種更高級別的元搜索空間,因此,可以探索乘法的脈沖列陣(systolic array)在一維或二維情況下的大小,以及不同的緩存大小等等。

如前所述,考慮編譯器優化與硬件設計的協同設計也很重要,因為如果默認編譯器不會更改,就無法真正利用處理器中底層設計單元的變化。實際上,不一定要考慮特定設計的所有效果和影響。

接下來看看這種方式產生的一系列結果,將這些結果與TPUv3芯片的baseline(上圖藍條)進行比較。實際上這是假定型TPUv3芯片,其中模擬器已停止了運行。我們已經將其縮小到了sub-10納米工藝。我們還將研究TPUv3的軟件效用,以及共同探索在設計空間中的編譯器優化。
紅條和藍條表示的內容是一致的,但一些探索過的編譯器優化不一定在藍條中得以體現,而這里的綠條則表示的是為單一計算機視覺模型定制的假定型設計。EfficientNet-B0...B7表示相關但規模不同的計算機視覺模型。與藍條baseline相比,(綠條的)Perf/TDP的改進大約在3到6倍之間。

那么除EfficientNet-B0...B7外,其他模型的情況如何?在此前所述的ASPLOS論文中提出更廣泛的模型集,尤其是那些計算機視覺以外的BERT-seq 128和BERT-seq 1024等NLP模型。

實際上,定制化芯片不只是適用于單個機器學習模型,而是使其適用于一組機器學習模型。你可能不想使你的加速器芯片設計僅針對某一項任務,而是想涵蓋你所關注的那一類任務。
上圖的黃條代表為五種不同模型設計的定制化芯片,而我們想要一個能同時運行這五種模型(紅色箭頭所指)的芯片,然后就能看出其性能能達到何種程度?上驳氖,從中可以看到,黃條(單一負載)并不比綠條(多負載)的性能低多少。所以你實際上可以得到一個非常適合這五種模型的加速器設計,這就好比你對其中任何一個模型都進行了優化。它的效果可能不是最好的,但已經很不錯了。

而且,如果你關注的點是性能而非Perf/TDP,得到的結果實際上會更好。所以結果如何取決于你關注的是什么,是絕對性能還是每瓦性能?在Perf//TDP指標中,性能結果甚至提升了2.6到8.8倍,而非Perf/TDP指標下的1.8到6.4倍。
因此,我們能夠針對特定工作負載進行定制和優化,而不用構建更多通用設備。我認為這將會帶來顯著改進。如果能縮短設計周期,那么我們將能以一種更自動化的方式用定制化芯片解決更多問題。
當前的一大挑戰是,如果了解下為新問題構建新設計的固定成本,就會發現固定成本還很高,因此不能廣泛用于解決更多問題。但如果我們能大幅降低這些固定成本,那么它的應用面將會越來越廣。
5、總結

我認為,在計算機芯片的設計過程中,機器學習將大有作為。
如果機器學習在合適的地方得以正確應用,那么在學習方法(learning approaches)和機器學習計算的加持下,芯片設計周期能不能縮短,只需要幾個人花費幾周甚至幾天完成呢?我們可以用強化學習使得與設計周期有關的流程實現自動化,我認為這是一個很好的發展方向。
目前人們正通過一組或多組實驗來進行測驗,并基于其結果來決定后續研發方向。如果這個實驗過程能實現自動化,并且能獲取滿足該實驗正常運行的各項指標,那么我們完全有能力實現設計周期自動化,這也是縮短芯片設計周期的一個重要方面。

這是本次演講的部分參考文獻以及相關論文,主要涉及機器學習在芯片設計和計算機系統優化中的應用。

機器學習正在很大程度上改變人們對計算的看法。我們想要的是一個可以從數據和現實世界中學習的系統,其計算方法與傳統的手工編碼系統完全不同,這意味著我們要采取新方式,才能創建出我們想要的那種計算設備和芯片。同時,機器學習也對芯片種類和芯片設計的方法論產生了影響。
我認為,加速定制化芯片設計過程中應該將機器學習視為一個非常重要的工具。那么,到底能否將芯片設計周期縮短到幾天或者幾周呢?這是可能的,我們都應該為之奮斗。
文章內容僅供閱讀,不構成投資建議,請謹慎對待。投資者據此操作,風險自擔。
海報生成中...
海藝AI的模型系統在國際市場上廣受好評,目前站內累計模型數超過80萬個,涵蓋寫實、二次元、插畫、設計、攝影、風格化圖像等多類型應用場景,基本覆蓋所有主流創作風格。
IDC今日發布的《全球智能家居清潔機器人設備市場季度跟蹤報告,2025年第二季度》顯示,上半年全球智能家居清潔機器人市場出貨1,2萬臺,同比增長33%,顯示出品類強勁的市場需求。