Google的「泛晶片」科技藍圖


Google的「泛晶片」科技藍圖

2021-01-06 騰訊網

新智元報導

來源:StarryHeavensAbove

編輯:直子

【新智元導讀】Google自研晶片已經有幾年時間,Jeff Dean也已經是晶片頂會邀請的常客。今年的Hotchips,Dan Belov(DeepMind)的keynote,闡述了Google對未來AI系統和晶片的看法,和來自Intel的keynote是完全不同的思路,這也代表了進入晶片領域的科技新貴和傳統巨頭站在不同的視角對於晶片設計未來的不同理解。

除了晶片本身,在晶片設計工具和方法學上(EDA領域),我們也越來越多的看到Google的影子:把AI引入晶片後端設計[2][3];開展Cloud上的晶片驗證,參與CHIP Alliance;CIRCT(MLIR for hardware)[4]和XLS(高層次綜合)[5]這樣的開源項目。

雖然有些工作還只是一些初步的嘗試,但其探索的方向有重要的意義,而Google的系統性技術優勢和號召力也讓這些探索更具成功的可能。

系統 · 晶片

我們還是先從晶片說起。Google的TPU已經開發了好幾代了(最新的TPU4已經在MLPerf露了臉,「AI訓練晶片巔峯對決,如何正確『圍觀』?」),今年的Hot Chips上也介紹了架構的演進「Google’s Training Chips Revealed: TPUv2 and TPUv3」(可以參考「Google TPUv2/v3架構及其設計演化」)。

而同樣在Hot Chips上,Dan Belov的keynote,「AI Research at Scale – Opportunities on the Road Ahead」,從更宏觀的角度分析了未來AI系統和晶片的趨勢。

就在一天前,Raja M. Koduri在Hot Chips上介紹了Intel怎麼實現到2025年把算力提升1000X,相信很多朋友都看過了,我就不多說了。

資料來源:Intel @ Hot Chips 2020

回到Dan Belov的keynote,同樣在講爲了支持大規模AI研究,怎樣實現1000X的算力提升。結合Google的背景,他很自然的強調系統而非單個晶片的優化,其中有一些觀點值得我們思考。

資料來源:DeepMind @ Hot Chips 2020

首先是對大規模AI研究任務的總體優化目標的分析。根據他們的觀察,優化最好的項目最多能夠達到70%的利用率,而平均情況是只能用的峯值算力的20%,而造成這種情況的原因很多,包括硬體限制,比如memory和I/O;軟體棧效率問題,比如編譯器,python runtime的性能;還有任務本身的問題,比如Startup time,Contention以及Amdahl’s law等等。因此,只看單個設備的峯值效率(perf/$)意義不大,而解決方法是從數據中心規模做自頂向下的系統優化。

當然,我不認同「Chip performance」真的「does not matter」,應該說,除了晶片性能之外,還有很多其它需要優化的地方,或者說有能夠優化的機會。

資料來源:DeepMind @ Hot Chips 2020

從硬體角度來看,兩個最重要的機會包括,「Move everything into Si」和「Paradigm Shift」。在第一個方向,我們是否可以期待未來出現Datacenter-on-Chip,Datacenter-on-Wafer或者Datacenter-in-Package?也許Chiplet和Wafer-Scale-Engine能夠實現。

進一步看所謂「Paradigm Shift」,它會帶來巨大的收益,同樣也意味著著我們必須付出巨大的代價,即需要設計「significantly different systems」。由於整個軟硬體基礎設施的複雜性和不靈活性,要進行「Paradigm Shift」當然不是說說這麼簡單。

資料來源:DeepMind @ Hot Chips 2020

同時,硬體的多樣性也會帶來很大的軟體移植開銷。

資料來源:DeepMind @ Hot Chips 2020

當然,好消息是,AI應用本身的特徵,在一定程度上簡化了問題。到此,其實就是我們這幾年面向AI應用優化系統和晶片的一個基本邏輯:應用的需求驅動計算範式的轉變,而應用的特徵使這種轉變成爲可能。這後面Dan Belov還給出了一些其它的機會,比如編譯技術(MLIR)和把AI用於編譯優化等等,感興趣的朋友可以去看看,我就不贅述了。

TPU引發的EDA試驗

我這幾年一直有一個觀點,就是AI晶片的熱潮帶來很多side effect,大大促進的相關技術和產業的發展。Google在做TPU的過程中,除了晶片和軟體棧(XLA/MLIR等等)的探索,也涉及到了晶片設計工具和方法學。

首先是一個大家可能都聽過的新聞:「Google用AI設計晶片」。當然,這個說法有很多誇大的成分,這項工作更準確的說法是「Reinforcement Learning for Placement Optimization」,即用增強學習的方法進行布局(晶片設計流程中的後端設計的一個任務)優化。Jeff Dean在今年的ISSCC專門介紹了這項工作。

資料來源:Jeff Dean @ ISSCC 2020

關心更詳細信息的朋友可以去看看[3],有這個項目的開發者的講解和相關討論。

資料來源:Azalia Mirhoseini和Anna Goldie @DAWN event1

作者Azalia Mirhoseini之前就嘗試用增強學習來優化計算系統里的任務分配(Hierarchical Planning for Device Placement),我在之前的文章(ML + System = ?)中也提到過。這項工作本身只是解決晶片後端布局布線中的一個問題,並不像宣傳的那麼誇張。

但這個工作是近幾年「把AI用於EDA這個大願景裡面的一個比較成功的例子,再加上Google的背景,所以受到很大關注。我還記得之前在一個EDA學者羣里,對這項工作有過很熱烈的討論。當然,不管大家怎麼評價,Google應該還是會繼續探索下去。畢竟Jeff Dean已經說了「Anywhere We’re Using Heuristics To Make a Decision」都是機器學習的用武之地。

第二個可能會對晶片和EDA產業產生更深遠影響的是Google所作的Cloud EDA嘗試,這個我之前做過一個簡單的分析,「爲雲而生又生於雲中的晶片給我們的啓示」。這中間的一個核心實踐是利用cloud上近乎「無限」的資源進行晶片驗證,可以大大加速晶片開發的時間,這可能也是TPU系列晶片能夠相對快速疊代的原因之一。Cloud EDA最近的關注度也很高,下面這張slide,介紹它的優勢,來自Chips Alliance最近的一個workshop。

來源:Dan Ganousis,Metrics @ CHIP聯盟研討會

最近,我的一個在EDA公司工作了十多年的前同事加入Google Cloud,做相關工作,這可能也是Google的系統性優勢的一點體現吧。總之,在Cloud EDA方向,Google的推動值得關注。

除了Cloud商業項目,Google還非常積極的參與了開源EDA的工作,是CHIP Alliance的發起者。相信大家都關注到Google和Skywater的開源PDK項目,以及Google支持的免費投片。此外還有例如RISCV-DV的開源項目,有興趣的讀者可以看看最近的Chip Alliance Workshop。

資料來源:CHIPS聯盟研討會-2020年9月17日

編譯器開發者跨界晶片設計工具

下面要介紹的開源項目CIRCT時間不長,相對也小衆很多,不過很有意思,值得關注。

嚴格的說,這個項目並不是Google主導的項目,但卻和Google發起的MLIR項目關係密切,也是MLIR Ecosystem的一部分。大家知道,MLIR是Chris Lattner在Google發起的編譯器項目,我在之前的文章中也多次提到。Chris Lattner之後離開了Google,加入SiFive,並對硬體設計產生了極大興趣,因此發起了CIRCT項目。CIRCT的基本思路就是利用MLIR/LLVM中的編譯器技術和基礎設施來改進硬體設計語言和工具(特別是開源工具)

我們知道,EDA工具的目標是產生可生產的晶片設計。一個晶片設計流程,一般從一個DSL(Domain Specific Language),比如System Verilog/VHDL這樣的硬體描述語言開始;然後會經過幾個抽象層次的變化(類似軟體編譯的過程);在每個層次需要進行相應的驗證,層次間的轉換需要進行等價性驗證。這個過程中的幾個要素:程式語言,編譯技術,驗證技術,並不是硬體設計獨有,很多都是和軟體領域相通的。CIRCT這個項目最有趣的地方是軟體編譯器的開發者開始關注硬體設計工具,而且是從DSL/IR/Compiler這個角度切入,肯定不會只是修修補補的工作。

在進一步討論CIRCT項目之前,我們先看看另一個Google發起的項目XLS[5],這是一個高層次綜合(HLS:High Level Synthesis)項目。HLS是EDA領域中學術研究比較多的內容,其目標是通過提升設計輸入的抽象層次來實現算法/應用直接到硬體的自動化設計實現,從而提高晶片開發的效率,我在之前的一篇文章中(在體系結構黃金期,ESL設計方法學能否「煥發青春」?)簡單介紹過這個方向。

首先,這個項目自己定義了一個DSL來描述硬體。這裡使用了類似Rust語言的DSLX。此外,XLS項目設計了自己的IR和編譯工具,驗證工具(包括Logic Equivalence),最終生成Verilog語言,進入傳統的晶片設計流程。其實,和XLS項目類似的HLS項目在EDA學術界挺多的。

由於HLS的抽象層次高於RTL級的硬體描述,不合適使用Verilog/VHDL來作爲DSL的,一般會直接使用描述算法的C/C++這樣的語言,但直接使用這些語言也有很多困難,這裡就不展開講了。最近幾年,大家比較喜歡參考(或基於)有函數式編程特徵的語言(Scala,Rust或者Haskell)來設計DSL,出現各式各樣的語言([6]中就有「Golden Age of Hardware Description Languages」的提法)。

這也是吸取軟體領域經驗的一種方式,但目前還沒有一種高層次的DSL能夠真正成爲主流。順便提一下,Chisel語言(基於Scala)可能是近幾年在硬體設計語言上最成功的嘗試,但Chisel還是RTL層次的語言,並不是爲HLS任務設計的。

另一個可以參考的學術項目是斯坦福的Agile Hardware Project[7]。其目標是自動化設計面向圖像處理的CGRA(Coarse-Grained Reconfigurable Architecture),使用Halide作爲DSL,自己定義的CoreIR作爲中間表達,並在此基礎上建立相應的工具鏈。

通過XLS和AHA的兩個例子,我想強調的是設計一個好的DSL/IR系統對於一個特定領域的EDA任務是至關重要的。而目前的晶片設計工具和方法,主要還是圍繞抽象層次比較低的Verilog/VHDL來建立的。除了設計和驗證效率低的問題,對於軟硬體的聯合優化也非常不友好。這個問題並不是什麼新問題,十幾年前就有很多討論,但到目前爲止並沒有太多的變化。

一些嘗試,比如SystemC,Bluespec,都不怎麼成功。這個現象有很多的原因,其中之一是設計DSL/IR和相應的編譯器(包括驗證工具)的門檻和成本很高。這有點類似於本文第一部分說的,我們要做面向「新的計算範式」的硬體,其軟體棧開發的難度和成本很高。

這就回到我想討論的CIRCT這個項目的意義:是否可能利用MLIR的多層IR的思想及其提供編譯器基礎架構來拉低建立一個DSL/IR系統和相應的編譯器的成本?從而讓我們有可能在晶片設計工具和方法學上做更多的創新。現在CIRCT這個項目還是剛剛開始,很難說能未來發展到什麼程度,但它至少讓我們看到更多的可能。

參考資料

[1] 丹·貝洛夫(Dan Belov),“大規模AI研究-未來之路”,《 Hot Chips 2020》

[2] Jeff Dean,“深度學習革命及其對計算機體系結構和芯片設計的影響”,ISSCC 2020

[3] Azalia Mirhoseini,Anna Goldie,“佈局優化的強化學習”,設計自動化網絡研討會(DAWN),https://duke-cei-lab.github.io/DAWN/event1

[4] “ CIRCT” /“電路IR編譯器和工具”,https://github.com/llvm/circt

[5] “ XLS:加速的硬件綜合”,https://github.com/google/xls

[6] Lenny Truong,Pat Hanrahan,“硬件描述語言的黃金時代:應用編程語言技術提高設計生產率”,SNAPL 2019

[7] “斯坦福大學AHA!敏捷硬件中心”,https://aha.stanford.edu/

AI芯片清單

https://basicmi.github.io/AI-Chip/

AI芯片論文列表

https://github.com/BirenResearch/AIChip_Paper_List