☰
稀疏矩阵能省多少工作:CSR 操作计数与证明成本的分界
2026/10/26 10:12:21 网站建设 项目流程

把一层权重的 90% 置零,就能让证明器快十倍吗?不能直接这样推。先要知道零权重是否真的从计算图中被消掉、权重是公开常数还是私有见证,以及证明系统最后为哪些关系付出了成本。数组里零的比例,不等于整个证明过程省下的比例。

ezkl 的项目说明展示了把计算图带入零知识证明的工程路线;它不是“模型参数量乘一个固定系数就能得到证明耗时”的换算器。项目说明 对比任何实现之前,都需要固定模型、量化方式、证明系统、输入与软硬件版本。

先做一个可以手工核对的矩阵

取三行四列的矩阵,非零元素分别为[2,1]、[3]、[4,5]。CSR 用values保存值,用columns保存列号,用row_ptr标明每行的起止位置。与输入[1,2,3,4]相乘,输出应为[6,6,19]。

def csr_mul(values, columns, row_ptr, x): if len(values) != len(columns) or not row_ptr: raise ValueError("invalid CSR lengths") if row_ptr[0] != 0 or row_ptr[-1] != len(values): raise ValueError("invalid CSR endpoints") if any(a > b for a, b in zip(row_ptr, row_ptr[1:])): raise ValueError("row pointers must be monotone") if any(c < 0 or c >= len(x) for c in columns): raise ValueError("column outside vector") y, products = [], 0 for start, end in zip(row_ptr, row_ptr[1:]): y.append(sum(values[k] * x[columns[k]] for k in range(start, end))) products += end - start return y, products v, c, r = [2,1,3,4,5], [0,3,1,0,2], [0,2,3,5] assert csr_mul(v, c, r, [1,2,3,4]) == ([6,6,19], 5) assert csr_mul([], [], [0,0,0], [1,2]) == ([0,0], 0) try: csr_mul([1], [4], [0,1], [1,2]) except ValueError: pass else: raise AssertionError("invalid column accepted") print("3 CSR cases checked; no prover benchmark")

保存为csr.py,运行python3 csr.py。这里比较的是算术工作量:密集写法会枚举 12 个系数,稀疏写法执行 5 个非零乘积。这个计数不包含内存布局、并行度、索引开销,也没有证明生成器参加。

电路中还会发生什么

在 R1CS 里,固定常数与变量的乘法可以写在线性组合中;不能一概算作非线性乘法约束。若权重是私有的,还必须证明这些权重与承诺模型一致,不能让证明者临时选一组更容易计算的权重。arkworks 将关系与证明构造分开,正适合在这里分别清点。关系接口

结构化剪枝也可能改变模型的输出质量。只报告约束减少而不报告精度误差,无法说明方案适用;只报告证明耗时而不说明是否把 setup、见证计算和验证排除在外,同样难以比较。

把实验表格留给真实实验

一份可复核记录应包含模型与输入哈希、非零模式、量化参数、工具版本、设备、计时范围、重复次数和失败样本。稀疏度要同时说明按参数、块还是通道统计;内存值要说明是进程峰值还是设备峰值。

本文已验证 CSR 结果、空行和非法列号三个离线用例,未运行 ezkl、SNARK 证明器或 GPU,也没有测量 Gas。因而只给出“12 个枚举位置中有 5 个非零乘积”的教学结果,不给出加速倍数。把工作量和实测性能分开,才可能知道优化究竟省在了哪里。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询