原标题:胶合和协处理器架构
原文作者:以太坊创始人Vitalik Buterin
原文翻译:邓彤,金色财经
特别感谢 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 用于支付哈希)。其余执行是业务逻辑:交换调用数据的位以提取我试图设置的记录的 ID 和我设置的哈希值等。在代币转移中,这将包括添加和减去余额,在更高级的应用程序中,这可能包括循环等。
在 EVM 中,这两种执行形式的处理方式不同。高级业务逻辑用更高级的语言编写,通常是 Solidity,它会编译到 EVM。昂贵的工作仍然由 EVM 操作码(SLOAD 等)触发,但超过 99% 的实际计算是在直接在客户端代码(甚至是库)内编写的专用模块中完成的。
为了加强对这种模式的理解,让我们在另一个背景下探索它:使用 torch 用 Python 编写的 AI 代码。
Transformer 模型一个块的前向传递
我们在这里看到了什么?我们看到了用 Python 编写的相对少量的“业务逻辑”,它描述了正在执行的操作的结构。在实际应用中,会有另一种类型的业务逻辑来确定细节,例如如何获取输入以及对输出执行哪些操作。但是,如果我们深入研究每个单独的操作本身(self.norm、torch.cat、+、*、self.attn 等中的各个步骤),我们会看到矢量化计算:相同的操作并行计算大量值。与第一个例子类似,一小部分计算用于业务逻辑,大部分计算用于执行大型结构化矩阵和向量运算 - 事实上,它们中的大多数只是矩阵乘法。
就像 EVM 示例一样,这两种类型的工作以两种不同的方式处理。高级业务逻辑代码用 Python 编写,这是一种高度通用和灵活的语言,但也非常慢,我们只是接受低效率,因为它只涉及总计算成本的一小部分。同时,密集型操作用高度优化的代码编写,通常是在 GPU 上运行的 CUDA 代码。我们甚至越来越多地开始看到在 ASIC 上进行 LLM 推理。
现代可编程密码学,如 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 时钟速度提升的极限,因此只有通过并行化才能进一步提高。然而,并行化很难推理,因此对于开发人员来说,继续按顺序推理并让并行化在后端发生往往更为实际,并封装在为特定操作构建的专用模块中。
直到最近,计算速度才变得如此之快,以至于业务逻辑的计算成本才变得真正可以忽略不计。在这个世界中,优化运行业务逻辑的虚拟机也是有意义的,目的不仅仅是计算效率:开发人员友好性、熟悉性、安全性和其他类似目标。与此同时,专用协处理器模块可以继续以效率为目标进行设计,并通过其相对简单的绑定接口获得安全性和开发人员友好性。
哪些是最重要的昂贵操作变得越来越清晰。这在密码学中最为明显,其中最有可能使用特定类型的昂贵操作:模运算、椭圆曲线线性组合(又称多标量乘法)、快速傅里叶变换等。这在人工智能中也变得越来越清晰,二十多年来,大多数计算主要是矩阵乘法(尽管精度水平各不相同)。其他领域也出现了类似的趋势。(计算密集型)计算中的未知未知数比 20 年前少得多。
这意味着什么?
关键点在于,胶水应该优化为好的胶水,协处理器也应该优化为好的协处理器。我们可以在几个关键领域探索这一点的含义。
以太坊虚拟机
区块链虚拟机(例如 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 模块中完成,而 ASIC 模块对正在执行的计算了解的信息较少(可能通过加密盲化,甚至在某些情况下为零信息)。
加密
另一个关键点是,所有这些都对密码学,尤其是可编程密码学成为主流持非常乐观的态度。我们已经在 SNARK、MPC 和其他设置中看到了某些特定高度结构化计算的超级优化实现:一些哈希函数的成本仅比直接运行计算高几百倍,而 AI(主要是矩阵乘法)的开销也很低。GKR 等进一步的改进可能会进一步降低这一成本。完全通用的 VM 执行,特别是在 RISC-V 解释器中执行时,可能会继续产生大约一万倍的开销,但出于本文所述的原因,这并不重要:只要使用高效、专门的技术分别处理计算中最密集的部分,总开销就是可控的。
矩阵乘法专用 MPC 的简化图,这是 AI 模型推理中最大的组件。请参阅本文了解更多详细信息,包括如何保持模型和输入的私密性。
粘合层只需要熟悉而不需要高效,但有一个例外,那就是延迟,以及数据带宽(在较小程度上)。如果计算涉及对同一数据进行数十次繁重的操作(如密码学和人工智能),那么由低效粘合层引起的任何延迟都可能成为运行时的主要瓶颈。因此,粘合层也有效率要求,尽管这些要求更为具体。
综上所述
总体而言,我认为上述趋势从多个角度来看都是非常积极的发展。首先,这是一种在保持开发人员友好性的同时最大化计算效率的合理方法,能够同时获得更多两者对每个人都有好处。特别是,通过在客户端启用专业化来提高效率,它提高了我们在用户硬件上本地运行敏感且性能要求高的计算(例如,ZK 证明、LLM 推理)的能力。其次,它创造了一个巨大的机会之窗,以确保追求效率不会损害其他价值,最明显的是安全性、开放性和简单性:计算机硬件中的侧通道安全性和开放性、ZK-SNARKs 中电路复杂性的降低以及虚拟机中复杂性的降低。从历史上看,对效率的追求导致这些其他因素退居次要地位。有了胶水和协处理器架构,就不再需要这样做了。机器的一部分优化效率,另一部分优化通用性和其他价值,两者协同工作。
这种趋势对密码学来说也非常好,因为密码学本身就是昂贵的结构化计算的一个典型例子,而这种趋势加速了它的发展。这为提高安全性又增加了一个机会。在区块链世界中,提高安全性也是可能的:我们可以少担心优化虚拟机,而更多地关注优化预编译和与虚拟机共存的其他功能。
第三,这一趋势为规模较小、较新的参与者提供了参与的机会。如果计算变得不那么单一,而更加模块化,这将大大降低进入门槛。即使是使用一种计算类型的 ASIC 也有可能有所作为。在 ZK 证明和 EVM 优化领域也是如此。编写具有近乎前沿效率的代码变得更容易、更容易。审计和正式验证此类代码也变得更容易、更容易。最后,由于这些非常不同的计算领域正在趋同于一些共同模式,因此它们之间有更多的合作和学习空间。
本文来源于网络:Vitaliks新文章:胶水与协处理器架构,提升效率与安全的新思路
原文作者:shaofaye 123,前瞻新闻 UniSat团队又出手了,Fractal Bitcoin引发市场热潮,测试网钱包地址数突破1000万,Pizza、Sats相继崛起,是比特币生态的下一个爆点还是BSV 2.0?FUD与FOMO并存,主网即将发布。本文带你纵览Fractal Bitcoin早期生态。关于Fractal Bitcoin Fractal Bitcoin是UniSat团队研发的又一款比特币扩容方案,利用BTC核心代码,在主链上创新无限扩容层,提升交易处理能力和速度,同时完全兼容现有比特币生态。其…