原標題:Glue and coprocessor architectures
作者:Vitalik,以太坊創辦人;編譯:鄧通,金色財經
特別感謝Justin Drake、Georgios Konstantopoulos、Andrej Karpathy、Michael Gao、Tarun Chitra 和各種Flashbots 貢獻者提供的回饋和評論。
如果您以中等程度的細節分析現代世界中正在進行的任何資源密集型計算,您會一次又一次發現的一個特點是,計算可以分為兩個部分:
-
相對少量的複雜但計算量不大的「業務邏輯」;
-
大量密集但高度結構化的“昂貴工作”。
這兩種計算形式最好用不同的方式處理:前者,其架構可能效率較低但需要具有非常高的通用性;後者,其架構可能具有較低的通用性,但需要具有非常高的效率。
實踐中這種不同方式的例子有哪些?
首先,讓我們來了解我最熟悉的環境:以太坊虛擬機器(EVM)。這是我最近進行的以太坊交易的geth 調試跟踪:在ENS 上更新我的部落格的IPFS 哈希。該交易總共消耗了46924 gas,可以按以下方式分類:
-
基本成本:21,000
-
呼叫資料:1,556
-
EVM 執行:24,368
-
SLOAD 操作碼:6,400
-
SSTORE 操作碼:10,100
-
LOG 操作碼:2,149
-
其他:6,719
ENS 哈希更新的EVM 追蹤。倒數第二列是gas 消耗。
這個故事的寓意是:大部分執行(如果只看EVM,則約為73%,如果包括涵蓋計算的基本成本部分,則約為85%)集中在極少數結構化的昂貴操作中:儲存讀寫、日誌和加密(基本成本包括3000 用於支付簽名驗證,EVM 還包括272 用於支付雜湊)。其餘執行是「業務邏輯」:換calldata 的位元以提取我試圖設定的記錄的ID 和我將其設定為的哈希,等等。在代幣轉移中,這將包括添加和減去餘額,在更高級的應用程式中,這可能包括循環,等等。
在EVM 中,這兩種執行形式以不同的方式處理。高階業務邏輯用更高階的語言寫,通常是Solidity,它可以編譯到EVM。昂貴的工作仍然由EVM 操作碼(SLOAD 等)觸發,但99% 以上的實際計算是在直接在客戶端程式碼(甚至是庫)內部編寫的專用模組中完成的。
為了加強對這種模式的理解,讓我們在另一個背景下探索它:使用torch 用python 編寫的AI 程式碼。
變壓器模型的一個塊的前向傳遞
我們在這裡看到了什麼?我們看到了用Python 編寫的相對少量的“業務邏輯”,它描述了正在執行的操作的結構。在實際應用中,還會有另一種類型的業務邏輯,它決定了諸如如何取得輸入以及對輸出執行的操作等細節。但是,如果我們深入研究每個單獨的操作本身(self.norm、torch.cat、+、*、self.attn 內部的各個步驟…),我們會看到向量化計算:相同的運算並行計算大量值。與第一個範例類似,一小部分計算用於業務邏輯,大部分計算用於執行大型結構化矩陣和向量運算—— 事實上,大多數只是矩陣乘法。
就像在EVM 範例中一樣,這兩種類型的工作以兩種不同的方式處理。高階業務邏輯程式碼是用Python 編寫的,這是一種高度通用和靈活的語言,但也非常緩慢,我們只是接受低效率,因為它只涉及總計算成本的一小部分。同時,密集型操作是用高度最佳化的程式碼編寫的,通常是在GPU 上執行的CUDA 程式碼。我們甚至越來越多地開始看到LLM 推理在ASIC 上進行。
現代可程式密碼學,如SNARK,在兩個層面上再次遵循類似的模式。首先,證明器可以用高階語言編寫,其中繁重的工作是透過向量化操作完成的,就像上面的AI 範例一樣。我在這裡的圓形STARK 代碼展示了這一點。其次,在密碼學內部執行的程序本身可以以一種在通用業務邏輯和高度結構化的昂貴工作之間進行劃分的方式編寫。
要了解其工作原理,我們可以看看STARK 證明的最新趨勢之一。為了通用且易於使用,團隊越來越多地為廣泛採用的最小虛擬機器(如RISC-V)建立STARK 證明器。任何需要證明執行情況的程式都可以編譯成RISC-V,然後證明者可以證明該程式碼的RISC-V 執行情況。
來自RiscZero 文檔的圖表
這非常方便:這意味著我們只需要編寫一次證明邏輯,從那時起,任何需要證明的程式都可以用任何「傳統」程式語言編寫(例如RiskZero 支援Rust)。但是,有一個問題:這種方法會產生很大的開銷。可程式加密已經非常昂貴;在RISC-V 解譯器中增加運行程式碼的開銷太多了。因此,開發人員想出了一個竅門:確定構成大部分計算的特定昂貴操作(通常是哈希和簽名),然後創建專門的模組來非常有效地證明這些操作。然後,您只需將低效但通用的RISC-V 證明系統和高效但專業的證明系統結合在一起,就可以兩全其美。
除了ZK-SNARK 之外的可程式加密,例如多方運算(MPC) 和完全同態加密(FHE),可能會使用類似的方法進行最佳化。
整體來說,現像是怎樣的?
現代運算越來越遵循我所說的黏合和協處理器架構:你有一些中央「黏合」組件,它具有高通用性但效率低,負責在一個或多個協處理器組件之間傳送數據,這些協處理器組件具有低通用性但效率高。
這是一種簡化:在實踐中,效率和通用性之間的權衡曲線幾乎總是有兩個以上的層次。 GPU 和其他在業界通常被稱為「協處理器」的晶片不如CPU 通用,但比ASIC 通用。專業化程度的權衡很複雜,這取決於對演算法的哪些部分在五年後仍將保持不變,哪些部分在六個月後會發生變化的預測和直覺。在ZK 證明架構中,我們經常看到類似的多層專業化。但對於廣泛的思考模型,考慮兩個層次就足夠了。在許多計算領域都有類似的情況:
從上述例子來看,計算當然可以以這種方式分割,這似乎是一種自然法則。事實上,你可以找到幾十年來計算專業化的例子。然而,我認為這種分離正在增加。我認為這是有原因的:
我們最近才達到CPU 時脈速度提升的極限,因此只有透過並行化才能獲得進一步的收益。但是,並行化很難推理,因此對於開發人員來說,繼續按順序推理並讓並行化在後端發生往往更為實際,並包裝在為特定操作構建的專用模組中。
計算速度最近才變得如此之快,以至於業務邏輯的計算成本已經變得真正可以忽略不計。在這個世界中,優化業務邏輯運作的VM 以達到運算效率以外的目標也是有意義的:開發人員友善性、熟悉性、安全性和其他類似目標。同時,專用的「協處理器」模組可以繼續為效率而設計,並從它們與黏合劑的相對簡單的「介面」中獲得其安全性和開發人員友好性。
最重要的昂貴操作是什麼變得越來越清晰。這在密碼學中最為明顯,其中最有可能使用哪些類型的特定昂貴操作:模數運算、橢圓曲線線性組合(又稱多標量乘法)、快速傅立葉變換等等。在人工智慧中,這種情況也變得越來越明顯,二十多年來,大部分計算都是「主要是矩陣乘法」(儘管精度水平不同)。其他領域也出現了類似的趨勢。與20 年前相比,(計算密集型)計算中的未知未知數要少得多。
這意味著什麼?
一個關鍵點是,膠合器應最佳化以成為好的膠合器,而協處理器也應最佳化以成為好的協處理器。我們可以在幾個關鍵領域中探索這一點的含義。
EVM
區塊鏈虛擬機器(例如EVM)不需要高效,只需要熟悉即可。只要加入正確的協處理器(又稱「預編譯」),低效VM 中的運算其實可以與本機高效VM 中的運算一樣有效率。例如,EVM 的256 位元暫存器所產生的開銷相對較小,而EVM 的熟悉度和現有開發者生態系統帶來的好處是巨大且持久的。優化EVM 的開發團隊甚至發現,缺乏並行化通常不是可擴展性的主要障礙。
改進EVM 的最佳方法可能只是(i) 添加更好的預編譯或專用操作碼,例如EVM-MAX 和SIMD 的某種組合可能是合理的,以及(ii) 改進儲存佈局,例如,Verkle 樹的更改作為副作用,大大降低了存取彼此相鄰的儲存槽的成本。
以太坊Verkle 樹提案中的儲存優化,將相鄰的儲存金鑰放在一起並調整gas 成本以反映這一點。 像這樣的最佳化,加上更好的預編譯,可能比調整EVM 本身更重要。
安全計算和開放硬體
在硬體層面上提高現代運算安全性的一大挑戰是其過於複雜和專有的性質:晶片設計為高效,這需要專有優化。後門很容易隱藏,側通道漏洞不斷被發現。
人們繼續從多個角度努力推動更開放、更安全的替代方案。一些計算越來越多地在受信任的執行環境中完成,包括在用戶的手機上,這已經提高了用戶的安全性。推動更開源的消費硬體的行動仍在繼續,最近取得了一些勝利,例如運行Ubuntu 的RISC-V 筆記型電腦。
運行Debian 的RISC-V 筆記型電腦
然而,效率仍然是一個問題。上述連結文章的作者寫道:
RISC-V 等較新的開源晶片設計不可能與已經存在並經過數十年改進的處理器技術相媲美。進步總有一個起點。
更偏執的想法,例如這種在FPGA 上建構RISC-V 電腦的設計,面臨更大的開銷。但是,如果膠合和協處理器架構意味著這種開銷實際上並不重要,那會怎麼樣?如果我們接受開放和安全晶片將比專有晶片慢,如果需要甚至放棄推測執行和分支預測等常見優化,但試圖透過添加(如果需要,專有)ASIC 模組來彌補這一點,這些模組用於最密集的特定類型的計算,那會怎麼樣?敏感運算可以在「主晶片」中完成,該晶片將針對安全性、開源設計和側通道阻力進行最佳化。更密集的計算(例如ZK 證明、AI)將在ASIC 模組中完成,這將了解有關正在執行的計算的更少資訊(可能,透過加密盲化,在某些情況下甚至可能為零資訊)。
密碼學
另一個關鍵點是,這一切都對密碼學,尤其是可程式密碼學成為主流非常樂觀。我們已經在SNARK、MPC 和其他設定中看到了一些特定的高度結構化計算的超優化實現:某些雜湊函數的開銷僅比直接運行計算貴幾百倍,而且人工智慧(主要是矩陣乘法)的開銷也非常低。 GKR 等進一步的改進可能會進一步降低這一水平。完全通用的VM 執行,特別是在RISC-V 解釋器中執行時,可能會繼續產生大約一萬倍的開銷,但出於本文中描述的原因,這並不重要:只要使用高效的專用技術分別處理計算中最密集的部分,總開銷就是可控的。
矩陣乘法專用MPC 的簡化圖,這是AI 模型推理中最大的組件。請參閱本文以了解更多詳細信息,包括如何保持模型和輸入的私密性。
「膠合層只需要熟悉,不需要高效」這個想法的一個例外是延遲,以及在較小程度上的數據頻寬。如果計算涉及對相同數據進行數十次重複的繁重操作(就像密碼學和人工智慧一樣),那麼由低效膠合層導致的任何延遲都可能成為運行時間的主要瓶頸。因此,膠合層也有效率要求,儘管這些要求更為具體。
結論
整體而言,我認為上述趨勢從多個角度來看都是非常正面的發展。首先,這是在保持開發人員友好性的同時最大化計算效率的合理方法,能夠同時獲得更多兩者對每個人都有好處。特別是,透過在客戶端實現專業化以提高效率,它提高了我們在用戶硬體本地運行敏感且性能要求高的計算(例如ZK 證明、LLM 推理)的能力。其次,它創造了一個巨大的機會之窗,以確保對效率的追求不會損害其他價值,最明顯的是安全性、開放性和簡單性:電腦硬體中的側通道安全性和開放性、降低ZK-SNARK 中的電路複雜性以及降低虛擬機器中的複雜性。從歷史上看,對效率的追求導致這些其他因素退居次要。有了膠合和協處理器架構,它不再需要。機器的一部分優化效率,另一部分優化通用性和其他價值,兩者協同工作。
這一趨勢對密碼學也非常有利,因為密碼學本身就是「昂貴的結構化計算」的一個主要例子,而這一趨勢加速了這一趨勢的發展。這為提高安全性又增加了一個機會。在區塊鏈世界中,安全性的提高也成為可能:我們可以少擔心虛擬機器的最佳化,而更專注於優化預編譯和與虛擬機器共存的其他功能。
第三,這一趨勢為規模較小、較新的參與者提供了參與的機會。如果計算變得不那麼單一,而更加模組化,這將大大降低進入門檻。即使使用一種類型的計算的ASIC,也有可能有所作為。在ZK 證明領域和EVM 優化中也是如此。編寫具有近乎前沿水平效率的程式碼變得更加容易和易於存取。審計和形式化驗證此類程式碼變得更加容易和易於存取。最後,由於這些非常不同的運算領域正在趨同於一些共同模式,因此它們之間有更多的協作和學習空間。