智能EDA浪潮即將來襲,ChatGPT如何助力設計芯片
提到 ChatGPT,你會想到什么?提到芯片,你又會想到什么?可以把你腦海中浮現(xiàn)的第一個詞記下來,看完這篇文章,肯定會改變你的看法。如果你是一個科技愛好者,那么你的第一印象是 ChatGPT 是一個高智能的對話模型,可以和人對話,而芯片產業(yè)是個復雜的整體,不止有上層的體系結構設計者,還有底層流片的工程師。你或許不會把兩者結合起來,因為兩者看起來風馬牛不相及。
但實際上,ChatGPT 模型獨有的代碼生成能力極大地加速了設計芯片的速度。由傳統(tǒng) EDA(電子設計自動化)向智能 EDA 的轉型浪潮即將開啟,今天這篇文章,我們就來一窺 ChatGPT 驅動下傳統(tǒng) EDA 是如何演變成智能 EDA 的,ChatGPT 是如何驅動芯片設計產業(yè)鏈的創(chuàng)新。
首先我們來看 ChatGPT 在芯片產業(yè)前沿上的一個應用:量子控制處理器是量子計算機的核心控制部分。用 ChatGPT 合成的一個量子控制處理器的代碼如下所示。
實際上這段代碼也許會有些小問題,比如 ChatGPT 并不能很好地實現(xiàn)時序的控制,會出現(xiàn)浪費時鐘周期的現(xiàn)象,但是這段代碼可以正確編譯,并且是一個有效的設計方案。也許你會很驚奇,這是怎么做的呢?這樣做有什么前景呢?本文接下來的部分會給你答案。
ChatGPT 可能對芯片設計流程帶來的改變
ChatGPT 將為芯片行業(yè)提供足夠的可復用代碼
芯片行業(yè)需要的巨大設計代碼量亟需一個高效的開發(fā)工具。芯片設計是一個需要大量代碼堆砌的行業(yè),比如阿里的玄鐵 OpenC910 的核心開源代碼就有 351KLOC 左右。如圖 1 所示,工業(yè)界一般從最頂端的 verilog 開始設計,使用 EDA 的前端和后端工具生成版圖。verilog 的編寫需要設計時序,通常較為復雜,因此 ChatGPT 生成這一塊的代碼可以降低很大的人力成本。芯片的時序要求較為嚴格,因此也有大量的功能相對固定的時序相關模塊,比如 AXI 接口、FIFO 等。這些模塊都可以使用 ChatGPT 來降低人力成本。雖然目前已經有 Chisel、Spatial、MyHDL 等新的硬件設計語言,但是這些語言很大程度上受制于宿主語言的限制,也無法用接近自然語言的方式描述電路。
ChatGPT 在代碼生成方面顯示出了優(yōu)秀的表達能力。只需要給它一個任務提示,就可以自動生成對應的代碼。相比軟件和算法的合成而言,由于硬件設計代碼并不像軟件業(yè)務代碼具有場景多樣性,并且其參數化和時序控制相對人類的認知能力雖然復雜,但是有固定的模式可以遵循,因此 ChatGPT 做硬件設計代碼自動生成的優(yōu)勢更為明顯。它對于已經有的硬件具有很好的歸納能力,能夠準確地提煉出設計模板中可參數化的配置點。
筆者的指導教師中科院計算所副研究員王穎博士認為,短期內即便是一個完全行業(yè)化的 ChatGPT 也無法帶來理想中的全自動化設計能力,但是配合云化 EDA 的趨勢,有望快作為一個設計助手大幅提升設計驗證效率并降低開發(fā)門檻,尤其對于教學工作將帶來重要改變,此外,ChatGPT 在各項流程中表現(xiàn)出來的自動化水平,eda 領域并非沒有比他更好的 SOTA 點技術,只是在完整性和交互自然上 ChatGPT 有天然的優(yōu)勢。最后,ChatGPT 驗證了大模型在自動化芯片設計領域的潛力,能夠驅動開發(fā)者進一步地在此之上設計 Prompt 范式,從而存在進一步提升設計的功能準確度和生成芯片的性能的空間。
ChatGPT 在芯片設計領域的智力水平遠超之前的相似工作?
ChatGPT 真的有替代人工的準確性嗎?
ChatGPT 和之前最好的代碼自動生成的方法比起來好了多少呢?
可以把之前的代碼生成方法分為三類,一類是以編程語言社區(qū)為代表的基于規(guī)則 [11,12,13] 的方法,第二類是基于測試用例的生成方法 [5, 6, 7, 8, 9, 10],第三類是以自然語言處理社區(qū)為代表的基于文本和模型的生成方法 [1, 2, 3, 4]。
表:比較 OpenAI 兩種最新模型用于代碼生成
?ChatGPT 和 CodeX 都是 OpenAI 公司基于 GPT-3 研發(fā)的模型,從上面的分析中可以看出,ChatGPT 的范圍更廣,并且 Copilot 的用途單一,僅僅為代碼補全。這就為基于 ChatGPT 開發(fā)智能代碼相關工具提供了更廣闊的空間。
ChatGPT 極大地驅動了智能 EDA 技術的發(fā)展?
在 ChatGPT 出現(xiàn)之前,就有許多自動化代碼生成方式,他們?yōu)槭裁床荒軌蝌寗又悄?EDA 技術呢?
ChatGPT 在芯片設計代碼上有一系列潛在的應用
ChatGPT 能夠遠遠地超越傳統(tǒng)方法,并且它可以做到零樣本學習(Zero-shot learning),相比傳統(tǒng)的程序合成并不需要專門的訓練(因為 OpenAI 已經完成了),并且配合細致的功能描述,他龐大的知識儲備也可以使能高正確率的代碼生成。如表 1 所示,ChatGPT 將會逐漸演變?yōu)樾酒岸说淖詣踊鞒讨袠O為關鍵的一步,在未來很有可能演變成為繼 HLS 開創(chuàng) C 語言設計芯片后的又一種新的范式。在后文,我們將會介紹如何使用 ChatGPT 做 Verilog 的代碼生成。
表 1:ChatGPT 在芯片自動生成各個領域的開創(chuàng)性創(chuàng)新(以 Hardware Design Language 為例,軟件語言可以參照分析)
如何使用 ChatGPT 生成芯片代碼
與芯片設計相關的程序合成方法包含兩類,高層次程序生成和時序相關硬件描述代碼生成。高層次程序生成可以生成 HLS 等不具有顯式時序控制的 C/C++ 代碼等,而低層次程序生成可以生成具有顯式時序控制的 Verilog 代碼。由于 HLS 在實際工業(yè)界設計芯片時較少采用,因此我們采用 Verilog 作為主要的目標語言。對于 ChatGPT 而言,我們以自然語言描述作為輸入,就可以獲得符合要求的芯片描述代碼。具體來說,應該如何做呢?我們以 Verilog 為例介紹如何用 ChatGPT 生成代碼。
基于 ChatGPT 的通用生成步驟
因為 ChatGPT 是個通用的代碼生成工具,而 Verilog 是個專用領域,我們需要先 “催眠” ChatGPT,使得它能夠生成 Verilog 程序。向 ChatGPT 中輸入下面的 prompt,之后的生成都會是以 Verilog 代碼為基礎的。
我們接下來的部分都是以片上網絡 NoC 模塊為例闡述代碼生成方法的通用步驟。
由于版面有限,這里就不列舉 ChatGPT 生成的完整代碼了。但是我們可以看出,On-Chip Network 這個關鍵字有很多種不同的理解方式,ChatGPT 選取了基于總線的理解方式。如果我們想要其他的語義理解方式,我們就應該探索出不同的輸入即提問方式。
組合生成模塊步驟
前面只是生成了有限的模塊,但是能否把模塊組合起來呢?我們的目標是用兩個原本不存在的 strange module 組合成一個 no strange module。下面生成一個頂層模塊 strange,底層有兩個加法器,他們的輸出連接著一個減法器,我們把這個東西叫做 strange module。
ChatGPT 為什么能在芯片生成領域取得成功
ChatGPT 能夠在芯片合成上取得成功應該歸功于它對代碼的理解和對自然語言語義的準確辨識。
ChatGPT 生成芯片設計就萬事具備了嗎?
雖然 ChatGPT 模型可以完成芯片設計前端的部分工作,但是還存在如下挑戰(zhàn),需要人工和 EDA 工具鏈的聯(lián)合調優(yōu)才能生成一個符合規(guī)范的芯片。
硅工行業(yè)如何應對智能 EDA 危機?
ChatGPT 作為一種智能 EDA 流程,既是一個危機,也是一種機遇。它能夠替代一部分 EDA 前端的工作,但是由于 EDA 后端很大程度上依賴于確定性和對細節(jié)的分析,才能得到更好的優(yōu)化結構,因此對于支持 EDA 后端優(yōu)化的工作存在困難。但是它也創(chuàng)造了新的崗位,比如可能出現(xiàn)的模型提示工程師,錯誤修正工程師。
圖 5:按照工程師崗位區(qū)分的可替代
為了更清晰地分類不同崗位上硅工行業(yè)的可替代性趨勢,我們按照 EDA 的流程自頂向下劃分了四個階段,即體系結構設計階段 - 芯片代碼實現(xiàn)階段 - 芯片 PPA 調優(yōu)階段 - 芯片驗證階段如圖 5 所示。注意這里的芯片調優(yōu)指的是在前端通過改動部分硬件結構和算法實現(xiàn)的調優(yōu),因此列舉在芯片驗證前面。藍色方框代表很難替代的崗位,黃色方框代表容易被替代崗位,灰色方框代表新增加的崗位。下面分析按照具體流程區(qū)分的替代性,揭示為什么有的崗位的工程師容易被 ChatGPT 替代,而有的崗位的工程師很難被 ChatGPT 替代。
中科院計算所智能計算中心主任韓銀和研究員認為 ChatGPT 不光能輔助加速芯片設計流程,也對芯片本身帶來一系列挑戰(zhàn),也許是當下熱點如存算一體、芯粒集成以及大芯片架構等技術帶來迫切等待的殺手級應用。
較難替代的流程
新增加的流程
- 錯誤修正工程師。由于 ChatGPT 生成的程序可能存在細節(jié)上的問題,有的地方不符合時序或是模塊間的連接標準,因此就需要錯誤修正工程師對其修正。
- 模型提示工程師。ChatGPT 生成代碼的質量和輸入的 prompt 緊密相關,因此需要有一部分熟悉 ChatGPT “脾氣” 的人專門設計 prompt 以便生成符合規(guī)范的代碼。
未來的發(fā)展趨勢?
在智能 EDA 的浪潮下,有些崗位不可避免地會被替代,那么未來會以什么樣的次序被替代呢?從前后端分布上看,后端由于有版圖設計等精細化的任務,因此不可替代性較強。對于前端來說,最先替代的是芯片實現(xiàn)中的模塊工程師,因為從上面生成芯片的實踐中可以發(fā)現(xiàn),基本模塊代碼生成這一部分最為直觀。在它之后會出現(xiàn)的替代崗位有組件設計工程師,這一部分會在工程師們熟悉用 ChatGPT 組裝模塊后替代。對于其他的工程師而言,ChatGPT 更多地只是具有輔助價值,而不能完全地替代。
因而我們可以看到,越是上層的,涉及到架構抽象的部分越不容易替代;越是底層的,涉及正確性的部分也不容易被替代。中間部分的替代順序將會是自底向上,從基本模塊向上層組件逐次地替代。
政策上要搶占智能 EDA 先機?
自力更生與充分吸取世界前沿并非不矛盾。傳統(tǒng) EDA 和大模型在 OpenAI 首發(fā)而其他公司尚未跟上固然有著復雜的原因。但是政策上仍然需要分出一只手,讓部分過熱資本從解決傳統(tǒng) EDA 和大模型問題的項目中抽出,鼓勵企業(yè)抓住智能 EDA 發(fā)展初期行業(yè)壁壘小的時期,勇敢步入業(yè)內,構造出新的技術壁壘。只有這樣,才能解決不斷被新技術取代的問題。否則,過熱資本涌入已經成熟的產業(yè)會造成資本回報率下降,同時創(chuàng)新技術無法獲得更高的資金支持,導致創(chuàng)新型企業(yè)不敢試錯,無形中增加了創(chuàng)新型企業(yè)的試錯成本,使得創(chuàng)新型企業(yè)更傾向于市場證明成熟的技術。因此,政策上應該適當鼓勵企業(yè)基于 ChatGPT 這類大模型做衍生技術,尤其是在大模型已經展示出強大的代碼生成能力之上,基于智能 EDA 技術的企業(yè)更應該搶占先機。
資本市場的投資目光應該由大模型本身向其衍生技術轉向?
在信息技術領域,先進技術不斷從通用走向專用,逐漸走向基于之前技術的衍生技術,以處理器設計領域最為明顯。在上個世紀時,CPU 火爆一時,造出了高性能的計算機,本世紀初,GPU 逐步流行,驅動了游戲的開發(fā),最近十年,NPU 開始走上舞臺,使能高能效的神經網絡訓練和推理。由此推知,當大模型成熟以后,其衍生技術也會在之后幾年走上舞臺。
智能 EDA 技術是大模型技術的衍生技術。雖然衍生技術投資在剛開始看并不占優(yōu)勢,但是從經濟上看,直到那種技術首發(fā)并形成技術壁壘時其投資回報率會較高。隨著 ChatGPT 這一類大模型技術的日漸成熟,對企業(yè)的投資會出現(xiàn)邊際效應遞減的現(xiàn)象。個人投資者和機構投資者應該認識到信息技術的投資規(guī)律,漸漸把目光轉向大模型的衍生領域,尤其是關注基于大模型的算法在芯片領域的應用問題。產業(yè)從業(yè)人員應該充分利用我國為人工智能、集成電路領域設立的大基金優(yōu)勢,積極申報人工智能和 EDA 交叉的基金。因此,無論是從產業(yè)政策上看,還是從投資規(guī)律上看,智能 EDA 領域十分有必要應該成為我國投資者的投資對象。
相關文獻
基于文本模型的代碼生成
[1] Zhangyin Feng, Daya Guo, Duyu Tang, Nan Duan, Xiaocheng Feng, Ming Gong, Linjun Shou, Bing Qin, Ting Liu, Daxin Jiang, and Ming Zhou. 2020. [CodeBERT: A Pre-Trained Model for Programming and Natural Languages]. In Findings of the Association for Computational Linguistics: EMNLP 2020, pages 1536–1547, Online. Association for Computational Linguistics.
[2] [GRAPHCODEBERT: PRE-TRAINING CODE REPRESENTATIONS WITH DATA FLOW]
[3] [CodeT5: Identifier-aware Unified Pre-trained Encoder-Decoder Models for Code Understanding and Generation]
[4] [UniXcoder: Unified Cross-Modal Pre-training for Code Representation]
基于測試用例的代碼生成?
[5] Rajeev Alur, Rastislav Bodík, Garvit Juniwal, Milo M. K. Martin, Mukund Raghothaman, Sanjit A. Seshia, Rishabh Singh, Armando Solar-Lezama, Emina Torlak, Abhishek Udupa, [Syntax-guided synthesis], 2013
[6] Peter-Michael Osera, Steve Zdancewic, [Type-and-example-directed Program Synthesis], 2015
[7] John K. Feser, Swarat Chaudhuri, Isil Dillig, [Synthesizing Data Structure Transformations from Input-output Examples], 2015
[8] Armando Solar-Lezama, [Program Synthesis by Sketching], 2008
[9] [Kensen Shi], [Jacob Steinhardt], [Percy Liang], FrAngel: Component-Based Synthesis with Control Structures, POPL, 2019
[10] Yu Feng, Ruben Martins, Yuepeng Wang, Isil Dillig, Thomas W. Reps, Component-based synthesis for complex APIs, [ACM SIGPLAN Notices], 2017
基于邏輯規(guī)則的代碼生成?
[11] Z. Manna and R. Waldinger, "Synthesis: Dreams → Programs," in IEEE Transactions on Software Engineering, vol. SE-5, no. 4, pp. 294-328, July 1979, doi: 10.1109/TSE.1979.234198.
[12] Bernd Finkbeiner and Sven Schewe, Bounded synthesis, in Int J Softw Tools Technol Transfer, (2013), 15:519–539, DOI: 10.1007/s10009-012-0228-z
[13] Peter Faymonville, Bernd Finkbeiner, and Leander Tentrup, BoSy: An Experimentation Framework for Bounded Synthesis,CAV 2017