zkVM:設計ZK ASIC的新範式
原文標題:New Paradigm in Designing ZK-ASICs, the zkVM way
原文作者:Cysic 團隊
感謝 Justin Drake 和 Luke Pearson 的深刻討論。
TL;DR
實時零知識證明生成需要端到端的硬件加速。zkVM 不僅簡化了 ZK ASIC 的設計,還使硬件性能更高,成本更低。
引言
零知識證明(ZKP)允許一方(證明者)向另一方(驗證者)證明某個聲明是真實的,且無需透露除聲明本身的有效性之外的任何信息。
零知識證明的發明人之一 Silvio Micali(他與 Goldwasser 和 Rackoff 共同發明)曾表示,正如加密會混淆數據一樣,零知識證明會混淆計算。更具體地說,加密算法(如 AES 或 RSA)可以將數據轉換成相應的密文,這種密文隱藏了底層數據。零知識證明則將計算性聲明轉換為證明,這種證明不僅隱藏了計算的細節,而且驗證了該聲明的正確性。
ZKP 擁有兩個良好的特性——零知識性和簡潔性。這也讓其成為了最廣泛使用的高級密碼學原語之一。
零知識性意味着證明本身不會泄露任何關於計算過程以及私有輸入的信息。這一特性對於構建一些以隱私為導向的應用程序非常有用。例如 Aleo,它與比特幣、以太坊和其他公鏈不同,能夠隱藏交易細節。
簡潔性則指的是證明的小尺寸以及短驗證時間,這意味着復雜的計算過程可以轉換為一小塊數據(即“證明”,“proof”)。並且幾乎可以在弱計算設備(比如手機、甚至樹莓派)上即時驗證。這一特性在擴展以太坊時極為有用,我們可以將對應 1000 筆交易的 EVM 計算轉換為一個微小的證明,然後將此證明發布在以太坊上。如果這樣一個小證明(可能只有 100 字節)得到以太坊的驗證,那么整個 1000 筆交易便得以最終確認。私有區塊鏈和擴展解決方案只是區塊鏈社區中 ZKP 熱潮的兩個例子。利用這兩個關鍵屬性還可構建很多 ZK 項目,如 ZK 協處理器、ZK 橋、ZK 機器學習(ZKML)。
ZK 硬件加速的現狀
ZKP 廣泛部署的一個重大障礙是證明生成過程中對計算時間和資源的巨大需求。
通常,更復雜的計算需要更多的時間和資源。例如,在 Daniel Kang 及其團隊的 ZKML 項目中,使用一臺強大的 64 线程 CPU 進行 GPT-2 推理的證明生成需要超過 9000 秒。另一方面,Scroll 中的 ZK-EVM 電路的證明生成需要超過 280 GB 的 RAM。
由於這些令人望而卻步的資源要求,社區正在尋求更有效的、針對 ZK 計算(指證明生成)定制的硬件。硬件選項包括CPU、GPU、FPGA和ASIC。這些選項從現已可用到不確定的等待期不盡相同。
CPU 通常被視為基线實現,用於與其他三個選項進行比較。硬件加速有兩個常見的指標,下面是一些直觀的解釋:
性價比(Performance per dollar):這意味着用戶需要支付多少錢來購买這種硬件。購买決策取決於許多因素,其中最重要的一點是同樣的开銷可獲得的最大性能。基本而言,這一指標衡量了硬件的成本效益。通常,如果使用更先進的工藝來制造芯片,則我們可以獲得更高的性能,但它往往更昂貴。
能耗比(Performance per watt):這意味着運行這種硬件需要多少能量。例如,比特大陸最新的比特幣礦機 T 21 只使用 19 焦耳就能完成 1 TH 的計算,性能超過了其競爭對手的產品。
產品的優勢主要取決於上述兩個因素,以及部分非技術因素(如保修和殘值)。通常,由於定制化的特性,基於 ASIC 的硬件在這兩個指標上超過了其他三種硬件。
我們想象一下,現在已經設計出了一款專門的 ZK ASIC,其每美元和每瓦特的性能均遠超現有的 GPU 和 FPGA。這款 ASIC 可以支持多種模塊,如多標量乘法(MSM)、數論變換(NTT)、默克爾樹等,但我們如何將這款硬件與當前的技術棧集成呢?
最常見的方法是用加速部件替換 CPU 代碼中相應的計算,這種簡單的替代方法通常無法實現令人滿意的性能加速。我們在 ethCC’ 23 上發布了有關這種方法的發現(更多細節在這條推文中)。
CPU 和 FPGA/CPU 性能對比
與 CPU 性能相比,我們通過結合使用 CPU 和我們定制的 FPGA 機器取得了實質性進展,但性能仍遠未達到最終目標——實時 ZK 證明。
這種次優的表現是由於阿姆達爾定律和不同硬件組件之間的交互成本所致。阿姆達爾定律顯示,通過優化系統的單一部分獲得的整體性能提升是有限的,而不同硬件模塊之間的通信成本則進一步惡化了這一情況(來源於維基百科)。為了實現相對於 CPU 的顯著加速,需要在單一硬件上加速每一個可能的組件。
然而,由於ZK 算法的多樣性(明確地說,ZK 算法指的是 ZK 證明生成中的計算操作),這似乎是不可能的。例如,上述推特截圖展示了三個 ZK 電路,即 Poseidon Hash、EVM 和 GPT-2 ,盡管使用了相同的證明後端(Halo 2-KZG),其中計算差異仍很大,尤其是在見證生成部分。截圖還沒有包括不同的證明後端(如 Plonky 2/3 和 Gnark)。
我們在這裏想要表達的觀點是,硬件需要足夠通用,以適應 ZK 算法的各種片上計算操作。這種通用性可以通過 FPGA 和 ASIC 的混合結構實現,正如我們在 2022 年的這條推文中所提議的:
FGPA-ASIC 混合架構
在這種混合結構中,ASIC執行常見操作,而FPGA進行特定電路的計算。這兩種硬件設備隨後被安裝在同一塊PCB板上,並通過高帶寬的SerDes通道連接。另外,像基於RISC-V或基於ARM的片上CPU核心,也可用於類似目的。這些混合方法通常在成本和制造質量上有極高的要求。在過去的半年裏,我們一直在問自己:
“混合”是否是我們能想到的最佳結構?我們能否依靠ZK社區的技術進步來改進我們的設計?下面,我們對以上問題給出了積極的答案。
Cysic的解決之道,過去與現在
在深入技術細節之前,我們首先需要介紹一些關於零知識證明(ZKP)的基本知識。Plonkish證明系統的典型證明生成過程可以分為以下幾個階段(有關證明生成的詳細解析,請閱讀Scroll的這篇博客):
記錄見證:見證,也被成為trace。它指的是一些數據,這些數據與其他數據共同顯示了一個聲明為什么是真實的。記錄通過一個稱為trace表的二維矩陣完成。該表中的每一個條目都是有限字段的一個元素。填充trace表的過程稱為“見證生成”,這需要遍歷表中的每個單元格並填入正確的值。這個過程需要在有限字段上進行算術運算,並針對特定的ZK電路進行定制。
提交見證:見證生成之後,我們獲得了一個trace表,表中的每一列都通過拉格朗日插值被解釋為一個多項式。然後可以使用不同的承諾機制來對這些多項式進行承諾,例如KZG和FRI。這裏涉及的主要計算包括多項式乘法(MSM)、數論變換((I)NTT)、多項式拍平和默克爾樹。由於在大型有限字段上進行復雜的計算,並且所需的數據量巨大,這成為了證明生成的瓶頸。
證明見證為真: 現在trace表填寫完成,承諾也已經計算出來。剩下唯一要做的事情是展示trace是有效的。這意味着滿足了某些特定的約束。涉及的計算包括數論變換((I)NTT)、多項式乘法(MSM)和多項式拍平。
總結來說,證明生成中的計算包括幾個常見模塊:如多項式乘法(MSM)、數論變換(NTT)、默克爾樹和多項式拍平,以及一些額外的模塊。
在我們之前的博客中,我們展示了優化這些常見模塊的一些高級策略。過去幾年,社區也提出了一些有望加速這些常見模塊的技術(參見Ulvetanna、Ingonyama和其他團隊的作品)。我們在這裏不重復這些技術。
這些模塊在性能方面已不再是瓶頸,但端到端的證明加速遠未達到令人滿意的程度。這種半成品加速器可以看作是具有一些性能提升的專用GPU版本。大致比較如下:
優勢:除了傳統的GPU風格的SIMD/SIMT並行計算模型,還專門支持ZK計算。這使我們能夠在不依賴尖端CUDA編程技能(例如使用CUDA編寫大整數操作)的情況下,全性能實施ZK操作。
缺點:編程復雜性
對於加速器來說,我們提供了類似於AI中PyTorch風格的高級編程模型,目標是提供一種“仿佛直接從論文翻譯過來”的編碼體驗,當部分證明者被放置在加速器上時。盡管我們在硬件層面提供靈活的調度和控制能力,這仍需要理解底層的硬件設計。
對於使用CUDA的GPU用戶,他們在直接使用時有相對完整的控制自由。他們可以進行任意優化。但這也意味着他們必須從零开始一切。
顯然,這種半成品加速器沒有實現最佳的端到端證明加速或用戶友好的編程界面。我們顯然需要在我們的方案中加入一些新元素。
這個新元素就是zkVM!
zkVM是什么?
虛擬機(VM)是計算機科學中的古老話題,這大體是一個可運行其他程序的程序。比如,以太坊虛擬機(EVM)就可運行以太坊智能合約,其支持的指令在這篇黃皮書中有所規定。我們知道,零知識證明系統涉及電路,因此,zkVM就是一個可以運行一系列支持指令的電路。除了執行結果,zkVM還輸出一個證明,顯示與指令序列相對應的VM執行軌跡是有效的。
簡而言之,zkVM是一個可運行VM的ZK電路(總結自David Wong的文章)。
在zkVM設計中有兩部分值得考慮:
支持的指令集:這意味着VM能執行的操作。在這個領域有幾個既有的參與者,如Risc0, Succinct, Starknet, Polygon, Metis等,他們工作於不同的指令集,如RISC-V、MIPS或定制的指令集。
ZK架構:這部分涉及到與執行結果一起生成的ZK證明。ZK架構幾乎與底層VM設計無關,但仍需考慮一些微妙的平衡。
zkVM設計中有一個很好的功能被稱為延續(continuation)(來自RISC0)。在zkVM執行中,延續是一種機制,用於將大程序分割成幾個片段,這些片段可以獨立計算和證明,如下圖所示:
分段的過程(源:Risc 0)
這個功能之所以對硬件友好,原因如下:
並行性:由於這些切分後的片段之間互不依賴,它們可以分布到多個硬件上同時生成相應的證明。
最小化 I/O 帶寬需求:zkVM 的證明生成遵循“小進小出”的模式。例如,在 Risc 0 中,證明生成的片段大小約為 50 MB,輸出是一個基於 FRI 的證明,大小大約為 250 KB。這種特殊模式大大減少了 I/O 帶寬的需求。
可控的內存需求:盡管每個證明生成核心的輸入和輸出都很小,但內存需求較大,範圍在數十 GB。然而,所需內存的大小取決於片段的大小,這可以根據 zkVM 的設計進行調整。
基於這些對硬件友好的特性,我們在下文中描述了我們的硬件設計。
基於 zkVM 的硬件設計
系統的架構相對簡單,由一個執行器負責執行程序,硬件負責控制並分配各個“片段(如前文所述)”,以及可配置數量的專用芯片,為每個部分的程序生成 ZK 證明。
這種簡單的架構使我們的硬件能夠具有靈活的形式。我們可以將執行器(使用弱 CPU 或片上 CPU 核心)、一定數量的 zkVM 芯片以及其他必要的硬件組件(如內存)打包到一個機箱中。一個更簡單的情況是將多個芯片打包在一個便攜式機器中,就像 Macbook 充電器一樣。
zkVM 硬件包括幾個計算核心:
一臺可編程的向量機用於向量化操作。
專用的 NTT 模塊,適用於 31 位、 64 位和 256 位字段。
專用的 MSM 模塊,支持 BN 254、BLS 12 – 377 和 BLS 12 – 388 曲线。
可配置的哈希函數單元,用於基於字段操作的哈希函數。
除了 zkVM 帶來的優勢外,這種設計 ZK-ASIC 的新範式也轉化為了衆多優秀的產品,可供個人或企業使用,如下所示:
ZK ASIC 產品
誠摯歡迎合作
Cysic 這一 zkVM 硬件項目旨在構建一個性能成本效益高效的硬件,適用於廣泛的用例、性能和开發生產力。我們尋求多樣化的視角、創新的想法以及堅定的投入,以改善和拓展我們的硬件設計。我們期待社區的參與和意見,並准備為有意參與的任何人提供指導和支持。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。
7月23:Mt. Gox 比特幣錢包在市場緊縮的情況下轉移了價值 28.2 億美元的 BTC
7月23:Mt. Gox 比特幣錢包在市場緊縮的情況下轉移了價值 28.2 億美元的 BTC一個引...
悅盈:比特幣68000的空完美落地反彈繼續看跌 以太坊破前高看回撤
一個人的自律中,藏着無限的可能性,你自律的程度,決定着你人生的高度。 人生沒有近路可走,但你走的每...