機器之心專欄
作者:常開顔(中科院計算所處理器全國重點實驗室博士生)
除了人機對話,ChatGPT 的代碼生成能力或許能讓它在 EDA 領域大顯身手。
提到 ChatGPT,你會想到什麼?提到晶片,你又會想到什麼?可以把你腦海中浮現的第一個詞記下來,看完這篇文章,肯定會改變你的看法。如果你是一個科技愛好者,那麼你的第一印象是 ChatGPT 是一個高智能的對話模型,可以和人對話,而晶片産業是個複雜的整體,不止有上層的體系結構設計者,還有底層流片的工程師。你或許不會把兩者結合起來,因為兩者看起來風馬牛不相及。
但實際上,ChatGPT 模型獨有的代碼生成能力極大地加速了設計晶片的速度。由傳統 EDA(電子設計自動化)向智能 EDA 的轉型浪潮即将開啟,今天這篇文章,我們就來一窺 ChatGPT 驅動下傳統 EDA 是如何演變成智能 EDA 的,ChatGPT 是如何驅動晶片設計産業鍊的創新。
首先我們來看 ChatGPT 在晶片産業前沿上的一個應用:量子控制處理器是量子計算機的核心控制部分。用 ChatGPT 合成的一個量子控制處理器的代碼如下所示。
module QuantumControlProcessor (
input clk,
input reset,
input [7:0] instruction,
input [7:0] control,
output reg [7:0] qubit_pulse,
output reg [7:0] timing_pulse
);
// 此處因為篇幅原因省略實作
endmodule
實際上這段代碼也許會有些小問題,比如 ChatGPT 并不能很好地實作時序的控制,會出現浪費時鐘周期的現象,但是這段代碼可以正确編譯,并且是一個有效的設計方案。也許你會很驚奇,這是怎麼做的呢?這樣做有什麼前景呢?本文接下來的部分會給你答案。
ChatGPT 可能對晶片設計流程帶來的改變
ChatGPT 将為晶片行業提供足夠的可複用代碼
晶片行業需要的巨大設計代碼量亟需一個高效的開發工具。晶片設計是一個需要大量代碼堆砌的行業,比如阿裡的玄鐵 OpenC910 的核心開源代碼就有 351KLOC 左右。如圖 1 所示,工業界一般從最頂端的 verilog 開始設計,使用 EDA 的前端和後端工具生成版圖。verilog 的編寫需要設計時序,通常較為複雜,是以 ChatGPT 生成這一塊的代碼可以降低很大的人力成本。晶片的時序要求較為嚴格,是以也有大量的功能相對固定的時序相關子產品,比如 AXI 接口、FIFO 等。這些子產品都可以使用 ChatGPT 來降低人力成本。雖然目前已經有 Chisel、Spatial、MyHDL 等新的硬體設計語言,但是這些語言很大程度上受制于宿主語言的限制,也無法用接近自然語言的方式描述電路。
圖 1:智能 EDA 和傳統 EDA 流程圖
ChatGPT 在代碼生成方面顯示出了優秀的表達能力。隻需要給它一個任務提示,就可以自動生成對應的代碼。相比軟體和算法的合成而言,由于硬體設計代碼并不像軟體業務代碼具有場景多樣性,并且其參數化和時序控制相對人類的認知能力雖然複雜,但是有固定的模式可以遵循,是以 ChatGPT 做硬體設計代碼自動生成的優勢更為明顯。它對于已經有的硬體具有很好的歸納能力,能夠準确地提煉出設計模闆中可參數化的配置點。
筆者的指導教師中科院計算所副研究員王穎博士認為,短期内即便是一個完全行業化的 ChatGPT 版本也無法帶來理想中的全自動化設計能力,但是配合雲化 EDA 的趨勢,有望快作為一個設計助手大幅提升設計驗證效率并降低開發門檻,尤其對于教學工作将帶來重要改變,此外,ChatGPT 在各項流程中表現出來的自動化水準,eda 領域并非沒有比他更好的 SOTA 點技術,隻是在完整性和互動自然上 ChatGPT 有天然的優勢。最後,ChatGPT 驗證了大模型在自動化晶片設計領域的潛力,能夠驅動開發者進一步地在此之上設計 Prompt 範式,進而存在進一步提升設計的功能準确度和生成晶片的性能的空間。
ChatGPT 在晶片設計領域的智力水準遠超之前的相似工作
ChatGPT 真的有替代人工的準确性嗎?
ChatGPT 和之前最好的代碼自動生成的方法比起來好了多少呢?
可以把之前的代碼生成方法分為三類,一類是以程式設計語言社群為代表的基于規則 [11,12,13] 的方法,第二類是基于測試用例的生成方法 [5, 6, 7, 8, 9, 10],第三類是以自然語言處理社群為代表的基于文本和模型的生成方法 [1, 2, 3, 4]。
表:比較 OpenAI 兩種最新模型用于代碼生成
ChatGPT 和 CodeX 都是 OpenAI 公司基于 GPT-3 研發的模型,從上面的分析中可以看出,ChatGPT 的範圍更廣,并且 Copilot 的用途單一,僅僅為代碼補全。這就為基于 ChatGPT 開發智能代碼相關工具提供了更廣闊的空間。
ChatGPT 極大地驅動了智能 EDA 技術的發展
在 ChatGPT 出現之前,就有許多自動化代碼生成方式,他們為什麼不能夠驅動智能 EDA 技術呢?
ChatGPT 在晶片設計代碼上有一系列潛在的應用
ChatGPT 能夠遠遠地超越傳統方法,并且它可以做到零樣本學習(Zero-shot learning),相比傳統的程式合成并不需要專門的訓練(因為 OpenAI 已經完成了),并且配合細緻的功能描述,他龐大的知識儲備也可以使能高正确率的代碼生成。如表 1 所示,ChatGPT 将會逐漸演變為晶片前端的自動化流程中極為關鍵的一步,在未來很有可能演變成為繼 HLS 開創 C 語言設計晶片後的又一種新的範式。在後文,我們将會介紹如何使用 ChatGPT 做 Verilog 的代碼生成。
表 1:ChatGPT 在晶片自動生成各個領域的開創性創新(以 Hardware Design Language 為例,軟體語言可以參照分析)
如何使用 ChatGPT 生成晶片代碼
與晶片設計相關的程式合成方法包含兩類,高層次程式生成和時序相關硬體描述代碼生成。高層次程式生成可以生成 HLS 等不具有顯式時序控制的 C/C++ 代碼等,而低層次程式生成可以生成具有顯式時序控制的 Verilog 代碼。由于 HLS 在實際工業界設計晶片時較少采用,是以我們采用 Verilog 作為主要的目智語言。對于 ChatGPT 而言,我們以自然語言描述作為輸入,就可以獲得符合要求的晶片描述代碼。具體來說,應該如何做呢?我們以 Verilog 為例介紹如何用 ChatGPT 生成代碼。
基于 ChatGPT 的通用生成步驟
act as a professional verilog programmer
因為 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 模型可以完成晶片設計前端的部分工作,但是還存在如下挑戰,需要人工和 EDA 工具鍊的聯合調優才能生成一個符合規範的晶片。
矽工行業如何應對智能 EDA 危機
ChatGPT 作為一種智能 EDA 流程,既是一個危機,也是一種機遇。它能夠替代一部分 EDA 前端的工作,但是由于 EDA 後端很大程度上依賴于确定性和對細節的分析,才能得到更好的優化結構,是以對于支援 EDA 後端優化的工作存在困難。但是它也創造了新的崗位,比如可能出現的模型提示工程師,錯誤修正工程師。
圖 5:按照工程師崗位區分的可替代
為了更清晰地分類不同崗位上矽工行業的可替代性趨勢,我們按照 EDA 的流程自頂向下劃分了四個階段,即體系結構設計階段 - 晶片代碼實作階段 - 晶片 PPA 調優階段 - 晶片驗證階段如圖 5 所示。注意這裡的晶片調優指的是在前端通過改動部分硬體結構和算法實作的調優,是以列舉在晶片驗證前面。藍色方框代表很難替代的崗位,黃色方框代表容易被替代崗位,灰色方框代表新增加的崗位。下面分析按照具體流程區分的替代性,揭示為什麼有的崗位的工程師容易被 ChatGPT 替代,而有的崗位的工程師很難被 ChatGPT 替代。
中科院計算所智能計算中心主任韓銀和研究員認為 ChatGPT 不光能輔助加速晶片設計流程,也對晶片本身帶來一系列挑戰,也許是當下熱點如存算一體、芯粒內建以及大晶片架構等技術帶來迫切等待的殺手級應用。
較難替代的流程
新增加的流程
- 錯誤修正工程師。由于 ChatGPT 生成的程式可能存在細節上的問題,有的地方不符合時序或是子產品間的連接配接标準,是以就需要錯誤修正工程師對其修正。
- 模型提示工程師。ChatGPT 生成代碼的品質和輸入的 prompt 緊密相關,是以需要有一部分熟悉 ChatGPT “脾氣” 的人專門設計 prompt 以便生成符合規範的代碼。
未來的發展趨勢
在智能 EDA 的浪潮下,有些崗位不可避免地會被替代,那麼未來會以什麼樣的次序被替代呢?從前後端分布上看,後端由于有版圖設計等精細化的任務,是以不可替代性較強。對于前端來說,最先替代的是晶片實作中的子產品工程師,因為從上面生成晶片的實踐中可以發現,基本子產品代碼生成這一部分最為直覺。在它之後會出現的替代崗位有元件設計工程師,這一部分會在工程師們熟悉用 ChatGPT 組裝子產品後替代。對于其他的工程師而言,ChatGPT 更多地隻是具有輔助價值,而不能完全地替代。
因而我們可以看到,越是上層的,涉及到架構抽象的部分越不容易替代;越是底層的,涉及正确性的部分也不容易被替代。中間部分的替代順序将會是自底向上,從基本子產品向上層元件逐次地替代。
政策上要搶占智能 EDA 先機
自力更生與充分吸取世界前沿并非不沖突。傳統 EDA 和大模型在 OpenAI 首發而其他公司尚未跟上固然有着複雜的原因。但是政策上仍然需要分出一隻手,讓部分過熱資本從解決傳統 EDA 和大模型問題的項目中抽出,鼓勵企業抓住智能 EDA 發展初期行業壁壘小的時期,勇敢步入業内,構造出新的技術壁壘。隻有這樣,才能解決不斷被新技術取代的問題。否則,過熱資本湧入已經成熟的産業會造成資本回報率下降,同時創新技術無法獲得更高的資金支援,導緻創新型企業不敢試錯,無形中增加了創新型企業的試錯成本,使得創新型企業更傾向于市場證明成熟的技術。是以,政策上應該适當鼓勵企業基于 ChatGPT 這類大模型做衍生技術,尤其是在大模型已經展示出強大的代碼生成能力之上,基于智能 EDA 技術的企業更應該搶占先機。
資本市場的投資目光應該由大模型本身向其衍生技術轉向
在資訊技術領域,先進技術不斷從通用走向專用,逐漸走向基于之前技術的衍生技術,以處理器設計領域最為明顯。在上個世紀時,CPU 火爆一時,造出了高性能的計算機,本世紀初,GPU 逐漸流行,驅動了遊戲的開發,最近十年,NPU 開始走上舞台,使能高能效的神經網絡訓練和推理。由此推知,當大模型成熟以後,其衍生技術也會在之後幾年走上舞台。
智能 EDA 技術是大模型技術的衍生技術。雖然衍生技術投資在剛開始看并不占優勢,但是從經濟上看,直到那種技術首發并形成技術壁壘時其投資回報率會較高。随着 ChatGPT 這一類大模型技術的日漸成熟,對企業的投資會出現邊際效應遞減的現象。個人投資者和機構投資者應該認識到資訊技術的投資規律,漸漸把目光轉向大模型的衍生領域,尤其是關注基于大模型的算法在晶片領域的應用問題。産業從業人員應該充分利用大陸為人工智能、內建電路領域設立的大基金優勢,積極申報人工智能和 EDA 交叉的基金。是以,無論是從産業政策上看,還是從投資規律上看,智能 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
基于邏輯規則的代碼生成
[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