ZK Section 9是什么?

Olivia
Cortex Labs
Published in
11 min readDec 5, 2022

大数据的爆炸式增长及其可用性推动了人工智能(AI)的发展。但人工智能模型在应用于现实世界的场景时需要格外谨慎,因为人工智能模型可能在关键应用中造成不正确或误导性的结果。人工智能模型的执行也会占用过多的资源,包括内存、磁盘和CPU/GPU。更不用说,在大多数情况下,结果本身不能被复制验证。所有的不足导致开发人员找到了一种被称为模型量化的通用解决方案。在量化过程之后,人工智能模型可以重现执行,用于推理。有了零知识证明(ZKP)系统之后,人工智能模型甚至可以在恒定的时间内快速地对结果进行验证。

目前,zk-SANRKS 的证明时间太慢,无法应用于现实世界的人工智能使用,许多项目一直在努力解决这个问题。 vCNN[1] 提出了一种新的高效可验证卷积神经网络框架,以提高 2020 年的证明性能。 ZEN[2] 团队提出了一种 SIMD 编译器优化,可以在大型有限域元素中编码多个 8 位整数,而不会产生压倒性的提取成本。同时,zkCNN[3] 创建了一个 ZKP 方案,允许 CNN 模型的所有者向其他人证明模型确实可以计算数据样本的预测,而不会泄露有关模型本身的任何信息。 Mystique[4] 提出了一种改进的用于矩阵乘法的 ZK 协议,与最先进的技术相比,它产生了 7* 的改进。并且在 2021 年,zk-ml[5] 发布了一个实现 zk-SNARK 电路的演示,其中证明了私有模型可以在公共数据集下具有一定的准确性。 2022 年,著名的 zk-SNARK 语言 circom 在 circomlib-ml[6] 和 zk-mnist[7] 中创建了机器学习库,用于基于区块链 DApp 的手绘数字识别。

AIGC设计

AIGC,也被称为AI-Generated Content,最近开始流行起来。该服务提供基于人工智能和深度学习的文本到图像生成功能。 DALL-E 2、Stable Diffusion 和 Midjourney 等项目都在 AIGC 上工作,侧重点略有不同。 CortexLabs 认为,如果我们能够将这些 AI 模型带入 Web3 的世界,将会大有裨益。

三个关键的利益相关者(AI 创造者、ML 工程师、ZKP 开发者)目前不互相交谈。但AI + ZKP + Blockchain 合作意义重大。

AI 艺术越来越受欢迎,AI 电影赢得了主要的国际奖项,但 AI 创作者缺乏对 Web3 的指导。同时,机器学习模型很难训练并产生惊人的结果。此外,ML 工程师不了解将算法转换为区块链友好格式的方法和要求。最后,ZKP 开发人员缺乏对 AIGC 模型功能和性能/生态系统/采用差距的可见性。

在 ETHSANFRANCISCO 2022 竞赛中,我们提出了 ZK Section 9,用于链上人工智能内容生成(AIGC)和 Succinct ZK Proofs。在撰写本文时,我们赢得了以下奖项:

ETHSanFrancisco 入围

ENS 的集成赏金

乐观主义的前 10 名已部署

通过ZK Section 9,可以用AI模型生成图像,用ZKP证明,将输出内容提交到区块链合约上。区块链可以轻松验证图像是由作曲家生成的。对于 CortexLabs,ZK Section 9 是进入 zkCVM 的主要基石:一个完整​​的链上 AI 模型的 zkRollup 解决方案。

这是演示文稿:https://docs.google.com/presentation/d/1CIxGfM_oySgWkgdNZqh-hoeH8C8zJDxnEpHx_VK6-KQ/

机器学习模型庞大而多样,对于复杂的模型来说是巨大的,例如FastBERT[1]:~1800 MFLOPS(百万浮点运算),模型类型不同,例如自然语言处理、CNN、GAN。 ZKP 很难生成或操作:仪式、贡献、信标等。并且不要忘记速度。将庞大且不同的 AI 模型转换为 ZKP 友好格式是一项具有挑战性的工作。 Translator和后续的链上AI模型证明带来了几个需要解决的问题,我们已经开始攻克难关,虽然到现在还不完善。更多解决方案细节将在下一节介绍。

重点

正如开头提到的,从 AI 模型到 ZKP 电路的转换对开发人员来说一直是一个挑战。有很多要点要谈。

模型量化

多年来,人工智能量化得到了发展和优化。 Int8 量化已成为内存、计算资源和功率有限的流行方法。量化趋势不仅针对 TensorFlow、PyTorch 和 TVM 等机器学习框架,也针对硬件工具链。例如,来自 Coral 的 USB 加速器 TPU,具有 int8 精度的推理设备,包括 Intel 加速 DL Boost 指令,NVIDIA TensorRT,Xilinx DNNDK,以及许多其他用于机器学习的 int 边缘设备。

这些要求可能相当大,并且已经进行了大量研究。但是没有通用的一体化量化框架方案。许多目标设备和框架已经应用于模型推理,但每个执行者对量化目标的关注点不同。大多数量化甚至不是用于加速目的的全整数。

TVM 专注于目标设备部署,包括量化。 TVM 的内部中继表示是量化模型的起点。它的前端可以连接许多 ML 框架,包括 ONNX 和 PyTorch。

因此,我们使用 PyTorch 来训练 AIGC 模型并将其转换为 TVM IR 表示。然后,我们量化模型并将其转储到磁盘中。

翻译器

预发的ZKML论文或项目几乎都是model-specified schemes,zk-SNARKS的实现多种多样,无法适配任意AI模型。所以我们设计了一个统一的模型来绕过翻译程序:

从 TVM 中间中继 IR 解析,它是从 PyTorch、TensorFlow 等其他模型框架生成的。

构造一个临时模型表示,它可以转储到磁盘或从磁盘加载。

为 zk-SNARK 生成一致的 circom 代码。

深入研究翻译器,你会发现事情并没有那么简单。解析器应该接受从 TVM QAT 模型转储的任意 IR 表示。很难在模型通用性和误差容忍度之间取得平衡。至于自建的内部符号,我们参考了 MxNet 符号图表示,这种表示很容易和可扩展地应用模型转换。

大多数工作负载位于 circom 生成器处。首先,解析所有现有的 circom ML 运算符并存储有关运算符的必要信息,例如依赖文件路径、运算符参数和输入/输出。然后是时候将最后一个内部符号映射到正确的 circom 运算符生成器。符号和生成器不是一对一的映射,我们必须为所有支持的运算符编写有效的映射规则。最后是将适当的 circom 代码注入模板。

Circom 机器学习库

在此竞争案例中,仅量化整数目标是 ML circom 运算符,类似于英特尔 DL Boost 指令。我们参考 cvm-runtime 编写 ML-complete circom 运算符。 ZKP circom 约束与 CVM 运营商的设计略有不同,但基本相同。

此外,我们为 circom ML 运算符实现了一个不完整的推理引擎。 circom 程序正确性验证所必需的。

ZKP优化

ZKP 约束太大,无法在有限的时间内生成证明。以前的论文设计了很多类似SIMD的方法。但由于游戏时间限制,这些优化没有被考虑。我们在模型翻译器中进行了尝试,以减少生成的 circom 中的约束。

合约优化

最后一步,还有一个问题需要解决。那就是区块链上的合约 Gas limit。以太坊区块最大 Gas 限制为 8000K,以避免图灵停机和区块同步延迟问题。但是一个普通的AIGC模型生成32*32的图像尺寸是远远不够的。有几种解决方案:一种是像ZEN一样使用SIMD将许多输出元素嵌入到一个字段中。另一个是将模型输出截断为不同的部分,并在许多块中分别部署合约。我们尝试了后一种方法。

未来的工作

我们在 AIGC 的设计上做了一些关键的创新,但还不足以达到最终的目标。由于时间限制,有些点实现了,有些被忽略了或者不够完善。在这里,我们列出了一些可扩展的作品,这些作品可以在未来扩展。

ZK 友好量化

在 ZK 第 9 节项目中,量化应用了 TVM 和 PyTorch 的内部量化感知训练 (QAT) 方法。 QAT target是为机器学习加速器等特定设备设计的,这种设计不能很好地适应零知识证明。我们必须在我们的翻译器中制作一个临时符号表示,以便将许多融合通道应用于 ZK 兼容量化。这些通道可能包括批量大小调整、circom 运算符的形状适配器、更紧凑的常量融合等。

这些现有的 ML 框架具有不同的后端表示和不同的实现。对于我们统一的量化目标,我们希望统一模型中间表示 (IR) 成为现实。如果没有,我们就选择普适性最好的,足够稳定的,容量足够的。那么ONNX就摆在我们面前了。我们之前选择 NNVM 是因为它是最古老、最稳定的机器学习后端。然而,出于灵活性和容量目的,大多数现代 AI 框架都放弃了它并接受 ONNX 兼容方案作为表示。

至于量化过程,许多论文已经就此主题进行了研究。量化根据量化的场合和代价主要分为量化感知训练(QAT)和训练后量化(PTQ)。 CortexLabs 在 MRT 中使用了 PTQ 方法,并在 int32 最大量化上得到了不错的精度损失。将来,将 PTQ 从 MxNet 转换为 ONNX 格式是必要的,对于 QAT 实现也是如此。

推理机

在这个项目中,我们用python做了一个粗略的推理引擎。该引擎以 NumPy 格式和一些 MxNet ndarray 参考代码编写。由于缺乏代码细节检查和测试数据,此实现不足以进行交叉验证。幸运的是,CortexLabs 已经发布了一个经过良好测试的纯整数推理引擎:cvm-runtime,它是用 C++ 编写的,并使用 CPU、GPU 和形式化版本实现。未来,更多的测试用例和算子将被应用到这个推理引擎中,以提高安全性和可扩展性。

优化

ZKP 产生的约束自然是太大了,这对 ZKP 应用来说是个大问题。 ZKP 生成的约束数越多,ZKP 证明过程所花费的时间和计算资源就越多。 AI模型中一个简单的线性层会导致~10M的约束,后续的snarkJS证明过程在96核2.7GHz CPU、1.5T内存的机器上几乎消耗200G内存和一个小时的证明时间!此外,一个朴素的 ResNet 有 18 层,层约束之间的关系是乘法而不是加法。因此优化势在必行,幸运的是,之前的研究人员已经在这些方面付出了努力。

SIMD[2]

将多输入元素嵌入到一个大的 int256 字段中。这将使用搁浅编码进行矩阵乘法。

符号位分组[2]

使用 unsigned int 量化而不是整数,这种量化对 R1CS 更友好。 ZKP使用椭圆曲线密码学(ECC)生成证明,所有运算数据均为256位无符号整数。有符号的算子可以申请ZKP,但是约束会比无符号的大很多。

基于余数的验证[2]

有时除法运算符在 AI 模型中无法避免,它比加法、减法或乘法更复杂。使用一个额外的矩阵R来存储除法余数,并利用这个余数来避免除法。

项目架构

本节我们简单介绍一下项目架构,GitHub目录结构如下:

.
├── circuits/
│ ├── Arithmetic.circom
│ ├── circomlib/
│ ├── circomlib-matrix/
│ ├── operators
│ └── util.circom
├── contracts/
├── frontend/
├── integer_only_gan/
├── main.py
├── python/
└── README.md

interger_only_gan。

模型翻译器和推理引擎位于`python`中,cmd是`main.py`,使用command -h打印用法。

Circom ML 运营商位于电路/运营商。

前端演示位于 infrontend。

区块链合约调试和部署代码位于合约中。

未来的应用

我们这次比赛的目标是AIGC,但应用的未来远不止于此。就像 AI 模型的无限空间一样,我们的项目对扩展区块链的能力有着深远的影响:

(显示)视觉模型 -> AIGC

语言模型 -> 聊天机器人,写作助手

线性模型和决策树 -> 欺诈检测,Sybil 攻击预防

多模态模型 -> 推荐系统

并考虑了一些场景供参考:

将机器学习模型转换为零知识证明,使欠发达国家的人们能够通过链上 AIGC 或 ZK-ML 增强的无信任自由职业者创收。

共识中的治理技术很棘手。我们的工具可以通过允许基于 ML 的方法来增强现有的投票和女巫抵抗技术:想象一个由神经网络驱动的自我进化的 DAO 智能合约。

DEX 中的清洗交易检测器。

可证明的生物识别 ID。就像在世界币中一样。

可以验证链下世界数据的 AI 预言机。比如步数、健康数据、环境数据等。

人工智能竞赛。人们可以先提交他们的模型权重哈希,然后再显示输入。

GameFi NPC。我们可以使用 AI 角色来代替普通的老式脚本 NPC。

动态代币经济学。通过 AI 控制的代币经济学,我们可以拥有可能更好的算法稳定币。

AI DAO。 AI 可以参与 DAO 的决策。

自动交易员。尽管链上人工智能在与现实世界对冲基金的竞争中很可能会失败,但它可以成为一个展示。

DeFi 中的反欺诈。就像贷款协议和保险协议一样。

NFT。就像我们在这个项目中构建的一样。

自我进化的区块链。最终,ZKML 可用于根据收集的数据确定区块链的关键参数,例如区块间隔、区块大小和区块奖励。

更多的可能性在你的想象中。

--

--