zkMIPS Beta:竞争绩效报告
Share on

概述和理由

在这项工作中,我们开始在a16z先前工作的基础上发布一个通用而公平的zkVM基准测试框架,比较ZKM(zkMIPs)与其他zkVM项目(例如RISC Zero(R0)和SP1)之间的时间和能源成本。

这份初始出版物侧重于将验证时间与R0进行比较,结果显示zkMIPS的性能在76%至317%之间接近,我们还提供了有关慢速案例和即将进行的优化的分析。

我们的目标是让 zkMips 成为市场上最适合量产的 zkVM 之一,也是利用 MIPS 指令集性能最高的 zkVM。

指标

我们试图调查以下问题:

  1. 通用虚拟机用例:评估哪种证明系统最适合通用虚拟机使用。
  2. 更快的证明:比较 ZKM 与 R0 以确定哪种实现可以更快地生成证明。

方法论

注意: 通过展示具体的实例类型和基准,我们实现了 zkvm-benchmark (https://github.com/zkMIPS/zkvm-benchmarks) 基于 a16z/zkvm-benchmark,将 R0 更新到最新的 v1.0.5,以确保结果直接可比且公平。

对于纯 CPU 机器,zkVM 仍然可以使用英特尔的 AVX 指令集来加快 Goldilocks 的操作。根据我们之前的经验,此功能可以帮助实现 6-10% 的加速。zkVM 在基准测试期间通过添加运行时标志启用了此功能 RUSTFLAGS=”-C target-cpu=native”

基准

所有基准测试都可以在以下网址找到 https://github.com/zkMIPS/zkvm-benchmarks

  • sha2 和 sha2-chain:样本 sha2 消化了不同大小的字节,样本 sha2 链使用固定大小(32 字节)的输入运行 n 次 sha2 函数。
  • sha3 和 sha3 链:样本 sha3 消化了不同大小的字节,样本 sha2 链使用固定大小(32 字节)的输入运行 n 次 sha3 函数。
  • 斐波那奇:不同长度的经典斐波那契序列计算
  • bigmem:分配一个 128000 字节的数组,并使用 block_box 来避免编译器的无效代码消除优化。
  • Rust EVM:Bluealloy 在提交时实现的 Rust EVM

bef9edd。(https://github.com/zkMIPS/zkm/tree/main/prover/examples/revme )

环境

CPU 实例:AWS r6a.8xlarge、32 个 vCPU 和 256G 内存、AMD EPYC 7R13 处理器

GPU 实例:64-vCPU、480G 内存、AMD EPYC 9354 32 核处理器、NV GeForce RTX 4090X4

CPU 实例

zkMips 的分段大小为 262144 (2^21)。

SHA2:

SHA2 链:

SHA3:

SHA3 链:

bigmem:

斐波那契:

摘要

通过对比,我们可以看出,在性能和能源成本方面,zkMIPS 与其他顶级 zkVM 相比具有竞争力。

此外,对我们在证明生成过程中的时间分布的分析如图 1 所示:

图 1:单个分段的时间/成本分布

观察不同的分段,我们发现生成跟踪大约占总时间的10%-22%,计算每个表的承诺占用25%-32%,但是CTL(交叉表查询,基于GKR优化的LogUP方案)时间可以忽略不计。

按照设计,跟踪的生成只能在单个 CPU 上运行,但是不同表(如 CPU、算术等)的承诺计算可以在多个 CPU 上并行执行,从现在起减少了 2/3 的时间使用量。

证明生成最多需要大约 45% 的时间。关于证明计算,我们在图 2 中提供了详细的饼图-内存操作和 cpu 操作占总时间的约 72.8%,它与跟踪表的大小相匹配。

图 2:证明计算的时间/成本分布

对于每代 STARK 证明,时间使用分布如下面的表 4,5 和 6 所示。不难看出,“计算辅助多项式承诺” 和 “计算空缺证明” 是最耗时的计算。“计算辅助多项式承诺” 包括基于波塞冬的默克尔·哈希和用于根据系数多项式计算点值格式多项式的 FFT。而 “计算开口证明” 是通过多项式乘法和除法(反转)运算计算开口点上的最终多项式。

表 4:计算单个 STARK 证明所用时间

Compute single STARK proof Time used(s) Ratio
Compute lookup helper columns 2.562 3.38%
Compute auxiliary polynomials commitment 16.8139 22.21%
Compute quotient polys 7.0605 9.33%
Split quotient polys 0.1736 0.23%
Compute quotient commitment 10.5241 13.90%
Compute openings proof 38.5683 50.95%


表 5:计算辅助多项式的计算用时量

Compute auxiliary polynomials commitment Time used(s) Ratio
IFFT 0.9216 5.68%
FFT + blinding 3.6157 22.28%
Transpose LDEs 0.2759 1.70%
Build Merkle tree 11.4121 70.34%


表 6:计算开口证明的时间使用情况

Compute openings proof Time used(s) Ratio
Reduce batch 24.145 66.06%
Perform final FFT 8.72 23.86%
Fold codewords in the commitment phase 3.6842 10.08%

闭幕

与 ZKM 使用的 Plonky2(在 Plonky2 中 FFT 和 Poseidon 是在现场金发姑娘上进行的)不同,RISC0 和 SP1 使用的是更有效的哈希函数和更小的场域,这可以极大地缩短验证时间。我们已经实现了 GPU Plonky2 并实现了 3 的加速。同时,我们正在寻求就地整合 Plonky2 上更有效的哈希函数和较小的字段,预计这将减少大约一半的时间和成本。

通过计划中的优化,我们有信心可以显著提高 zkMIP 的性能,使其与其他领先的 zkVM 更具竞争力。

我们一直在努力使这些基准比较尽可能准确。如果发现任何差异,请通过 contact@zkm.io 联系我们,我们将进行必要的更正。

More articles
ZKM 的证明服务:打破证明生成壁垒
ZKM 很高兴地宣布推出其独家 Proving Service,为开发人员提供访问高性能服务器的权限,这些服务器能够有效地处理生成零知识证明的密集计算需求。该服务专门针对ZKMIPs进行了优化,ZKMIPS是ZKM的专业zkVM软件,旨在促进将ZKP功能集成到各种应用程序中。
你好世界:一月时事通讯
我们欣喜若狂地迎接2024年即将到来的新年。ZKM 在 2023 年结束时对我们的社区深表感激和赞赏——没有你们,我们不可能有如此成功的一年!
zkMIPS Beta:竞争绩效报告

概述和理由

在这项工作中,我们开始在a16z先前工作的基础上发布一个通用而公平的zkVM基准测试框架,比较ZKM(zkMIPs)与其他zkVM项目(例如RISC Zero(R0)和SP1)之间的时间和能源成本。

这份初始出版物侧重于将验证时间与R0进行比较,结果显示zkMIPS的性能在76%至317%之间接近,我们还提供了有关慢速案例和即将进行的优化的分析。

我们的目标是让 zkMips 成为市场上最适合量产的 zkVM 之一,也是利用 MIPS 指令集性能最高的 zkVM。

指标

我们试图调查以下问题:

  1. 通用虚拟机用例:评估哪种证明系统最适合通用虚拟机使用。
  2. 更快的证明:比较 ZKM 与 R0 以确定哪种实现可以更快地生成证明。

方法论

注意: 通过展示具体的实例类型和基准,我们实现了 zkvm-benchmark (https://github.com/zkMIPS/zkvm-benchmarks) 基于 a16z/zkvm-benchmark,将 R0 更新到最新的 v1.0.5,以确保结果直接可比且公平。

对于纯 CPU 机器,zkVM 仍然可以使用英特尔的 AVX 指令集来加快 Goldilocks 的操作。根据我们之前的经验,此功能可以帮助实现 6-10% 的加速。zkVM 在基准测试期间通过添加运行时标志启用了此功能 RUSTFLAGS=”-C target-cpu=native”

基准

所有基准测试都可以在以下网址找到 https://github.com/zkMIPS/zkvm-benchmarks

  • sha2 和 sha2-chain:样本 sha2 消化了不同大小的字节,样本 sha2 链使用固定大小(32 字节)的输入运行 n 次 sha2 函数。
  • sha3 和 sha3 链:样本 sha3 消化了不同大小的字节,样本 sha2 链使用固定大小(32 字节)的输入运行 n 次 sha3 函数。
  • 斐波那奇:不同长度的经典斐波那契序列计算
  • bigmem:分配一个 128000 字节的数组,并使用 block_box 来避免编译器的无效代码消除优化。
  • Rust EVM:Bluealloy 在提交时实现的 Rust EVM

bef9edd。(https://github.com/zkMIPS/zkm/tree/main/prover/examples/revme )

环境

CPU 实例:AWS r6a.8xlarge、32 个 vCPU 和 256G 内存、AMD EPYC 7R13 处理器

GPU 实例:64-vCPU、480G 内存、AMD EPYC 9354 32 核处理器、NV GeForce RTX 4090X4

CPU 实例

zkMips 的分段大小为 262144 (2^21)。

SHA2:

SHA2 链:

SHA3:

SHA3 链:

bigmem:

斐波那契:

摘要

通过对比,我们可以看出,在性能和能源成本方面,zkMIPS 与其他顶级 zkVM 相比具有竞争力。

此外,对我们在证明生成过程中的时间分布的分析如图 1 所示:

图 1:单个分段的时间/成本分布

观察不同的分段,我们发现生成跟踪大约占总时间的10%-22%,计算每个表的承诺占用25%-32%,但是CTL(交叉表查询,基于GKR优化的LogUP方案)时间可以忽略不计。

按照设计,跟踪的生成只能在单个 CPU 上运行,但是不同表(如 CPU、算术等)的承诺计算可以在多个 CPU 上并行执行,从现在起减少了 2/3 的时间使用量。

证明生成最多需要大约 45% 的时间。关于证明计算,我们在图 2 中提供了详细的饼图-内存操作和 cpu 操作占总时间的约 72.8%,它与跟踪表的大小相匹配。

图 2:证明计算的时间/成本分布

对于每代 STARK 证明,时间使用分布如下面的表 4,5 和 6 所示。不难看出,“计算辅助多项式承诺” 和 “计算空缺证明” 是最耗时的计算。“计算辅助多项式承诺” 包括基于波塞冬的默克尔·哈希和用于根据系数多项式计算点值格式多项式的 FFT。而 “计算开口证明” 是通过多项式乘法和除法(反转)运算计算开口点上的最终多项式。

表 4:计算单个 STARK 证明所用时间

Compute single STARK proof Time used(s) Ratio
Compute lookup helper columns 2.562 3.38%
Compute auxiliary polynomials commitment 16.8139 22.21%
Compute quotient polys 7.0605 9.33%
Split quotient polys 0.1736 0.23%
Compute quotient commitment 10.5241 13.90%
Compute openings proof 38.5683 50.95%


表 5:计算辅助多项式的计算用时量

Compute auxiliary polynomials commitment Time used(s) Ratio
IFFT 0.9216 5.68%
FFT + blinding 3.6157 22.28%
Transpose LDEs 0.2759 1.70%
Build Merkle tree 11.4121 70.34%


表 6:计算开口证明的时间使用情况

Compute openings proof Time used(s) Ratio
Reduce batch 24.145 66.06%
Perform final FFT 8.72 23.86%
Fold codewords in the commitment phase 3.6842 10.08%

闭幕

与 ZKM 使用的 Plonky2(在 Plonky2 中 FFT 和 Poseidon 是在现场金发姑娘上进行的)不同,RISC0 和 SP1 使用的是更有效的哈希函数和更小的场域,这可以极大地缩短验证时间。我们已经实现了 GPU Plonky2 并实现了 3 的加速。同时,我们正在寻求就地整合 Plonky2 上更有效的哈希函数和较小的字段,预计这将减少大约一半的时间和成本。

通过计划中的优化,我们有信心可以显著提高 zkMIP 的性能,使其与其他领先的 zkVM 更具竞争力。

我们一直在努力使这些基准比较尽可能准确。如果发现任何差异,请通过 contact@zkm.io 联系我们,我们将进行必要的更正。