The prior surveys, and where we disagree with them
Four prior attempts to map this field. A number of our older rows are secondhand from one of them, and we disagree with all of them about four things: what quantization is, what counts as an objective, whether provenance is a curiosity, and how much a comparison table is worth.
An SoK that does not say where it departs from its predecessors is a literature review. This page says.
What each one is
ZKP-VML Survey, the ZKP-VML survey (Peng et al.) is the backbone of the historical
half of this site, and we are in its debt. Its Table VII is a timeline of representative
systems from SafetyNets onward, and its Tables IV, V and VI give proving time,
verification time and proof size, with hardware attached, for training, testing and
inference systems respectively. A number of our older rows are still sourced from it, and each
of those is tagged numbers_source: survey and renders with a hollow provenance dot. Several
that started there, ZEN, ZKML, ZKTorch, have since been promoted to
primary, because we obtained the PDF and re-read the table.
It is a survey, not a system: it reports no original benchmarks, so it is excluded from every plot on this site. That is not a criticism. It is the correct way to use it.
Decentralized ZKML Survey, complementary, and older. Its centre of gravity is decentralized and federated settings rather than the single-prover MLaaS model, which makes it the better entry point for the federated cell and a weaker one for inference.
The Definitive Guide to ZKML (2025), a landscape blog, not a peer-reviewed source, and written
by a Jolt Atlas co-author. We flag it partisan: true in papers.yml and we mean it:
its head-to-head claims favour Jolt Atlas and are recorded here as attributed claims, not
as facts. It is genuinely useful for two things, its framing of the overhead progression
across proof-system generations, and as the secondhand source we leaned on for ZKTorch's
LLM numbers until we obtained the paper, its figure and DeepProve's derived one disagreed,
and ZKTorch's own Table 4 has since retired both.
The Cost of Intelligence, the odd one out, and the one that has aged best. It is not a survey of ML-proving frameworks; it is a benchmark of proof backends (Groth16, Gemini, Winterfell, Halo2, Plonky2, zkCNN) run against MLPs. No transformers, no tokens, so it is deliberately excluded from the LLM throughput graph. What makes it worth reading in 2026 is that it called the shot:
With respect to both proving time and memory, the GKR-based zkCNN prover appears best suited to tackle large models – even without an optimized implementation.
The Cost of Intelligence · §1.1, Paper Motivation and High Level Summary
That was written in January 2023. Three years on, the fastest GPT-2 proving on the LLM inference page belongs to sum-check/GKR systems either way you measure it, zkGPT and Jolt Atlas on time per forward pass, DeepProve on throughput. Meanwhile the Plonkish baseline they measure themselves against, ZKML, says in its own Limitations section that a distilled GPT-2 is the largest model it can prove inside its memory budget, and no Groth16 system in this corpus gets near a transformer at all. Other arithmetizations do reach GPT-2 and past it, Artemis / Apollo via commit-and-prove, Lu et al. via VOLE, ZKTorch all the way to LLaMA-2-7B via proof accumulation, so what Modulus called was the scaling behaviour, not a hard ceiling; the spread is in the table below. Reading that trend three years before the papers proved it is still a better track record than any of the taxonomies have.
| System | Model | Params | Context | Tok/min | Prove (s) | Proof (MB) | Verify (s) | Comm (MB) | Accuracy |
|---|---|---|---|---|---|---|---|---|---|
| DeepProve | GPT-2 | 124M | 512 | 174 | — | 7–27 | 1.2 | — | — |
| DeepProve | Gemma 3 | 270M | 512 | 86 | — | 16–54 | 3.7 | — | — |
| DeepProve | GPT-2 (distributed prover, 16 workers) | 124M | 512 | 1855 | — | 53.81 | — | — | — |
| Jolt Atlas | nanoGPT | 250K | — | 4.3 | 14 | — | 0.517 | — | — |
| Jolt Atlas | GPT-2 | 125M | — | — | 38 | — | — | — | — |
| zkGPT | GPT-2 | 124M | 32 | 2.75 | 21.8 | 0.101 | 0.35 | — | — |
| zkPyTorch | VGG-16 | 15.2M | — | — | 2.2 | — | — | — | — |
| zkPyTorch | Llama-3 8B | 8B | — | 0.4 | 150 | — | — | — | — |
| zkPyTorch | ResNet-50 | — | — | — | — | — | — | — | — |
| zkPyTorch | ResNet-101 | — | — | — | — | — | — | — | — |
| zkLLM | LLaMA-2 13B | 13B | — | — | 900 | 0.2 | 3 | — | — |
| ZKML | GPT-2 (distilled) | 81.3M | — | 0.016 | 3651.67 | 0.028128 | 18.7 | — | — |
| ZKML | GPT-2 (distilled) | 81.3M | — | — | 3949.6 | 0.016512 | 11.98 | — | — |
| Bionetta | MNIST MLP | 2M | — | — | 3.05 | 0.00088 | 0.01 | — | — |
| Bionetta | LeNet5 | — | — | — | 3.75 | 0.00088 | 0.01 | — | — |
| Bionetta | VGG11-mini | — | — | — | 7.7 | 0.00088 | 0.02 | — | — |
| Bionetta | ResNet18 | — | — | — | 14.1 | 0.00088 | 0.015 | — | — |
| Bionetta | MobileNetV2 | — | — | — | 24.5 | 0.00088 | 0.018 | — | — |
| Bionetta | MNIST MLP (iPhone 14 Pro) | 2M | — | — | 2.8 | 0.00088 | — | — | — |
| Bionetta | LeNet5 (iPhone 14 Pro) | — | — | — | 3.55 | 0.00088 | — | — | — |
| Bionetta | VGG11-mini (iPhone 14 Pro) | — | — | — | 7.65 | 0.00088 | — | — | — |
| Bionetta | ResNet18 (iPhone 14 Pro) | — | — | — | 13.6 | 0.00088 | — | — | — |
| Bionetta | MobileNetV2 (iPhone 14 Pro) | — | — | — | 22.96 | 0.00088 | — | — | — |
| SafetyNets | FcNN-3-Quad (TIMIT) | — | — | — | — | 0.008 | — | — | — |
| SafetyNets | CNN-2-Quad (MNIST / MNIST-Back-Rand) | — | — | — | — | — | — | — | — |
| zkCNN | VGG16 | 15M | — | — | 88.3 | 0.341 | 0.0593 | — | — |
| SpaGKR | Sparse linear layers | — | — | — | — | — | — | — | — |
| SpaGKR | Ternary network | — | — | — | — | — | — | — | — |
| Mystique | ResNet-101 (public model, private input) | 42.5M | — | — | 262 | — | — | 990 | — |
| Mystique | ResNet-101 (private committed model, private input) | 42.5M | — | — | 535 | — | — | 1980 | — |
| Mystique | ResNet-50 (private committed model, private input) | 23.5M | — | — | 333 | — | — | 1270 | 0.02% accuracy decrease vs the plaintext model on the full CIFAR-10 test set (same delta reported for ResNet-101) |
| vCNN | VGG16 | — | — | — | 28800 | — | 19.4 | — | — |
| ZEN | ShallowNet / LeNet | — | — | — | 147–4710 | 0.000192 | 0.023–0.47 | — | — |
| Artemis / Apollo | GPT-2 | 124M | — | — | 12000–14400 | 0.015 | 0.014 | — | — |
| Lu et al. | GPT-2 | 117M | — | — | 287.1 | 4500 | 63 | — | — |
| Hao et al. | ReLU (operator) | — | — | — | 2.107 | — | — | 30.137 | — |
| Hao et al. | Softmax (operator, dim 10) | — | — | — | 87.131 | — | — | 816.33 | — |
| Hao et al. | GELU (operator) | — | — | — | 37.628 | — | — | 338.182 | — |
| Hao et al. | Normalization (operator, dim 16) | — | — | — | 192.826 | — | — | — | — |
| ZKTorch | GPT-J | 6B | 2 | — | 1397.52 | 6.54 | 62.64 | — | — |
| ZKTorch | BERT | 340M | 1 | — | 880.42 | 4.88 | 26.67 | — | — |
| ZKTorch | LLaMA-2-7B | 7B | 1 | — | 2645.5 | 22.85 | 100.14 | — | — |
| ZKTorch | GPT-2 | 124M | — | — | 599 | — | 12 | — | — |
| NANOZK | Transformer block (d=128) | — | — | — | 43 | 0.0055 | 0.024 | — | — |
| ZIP | — | — | — | — | — | — | — | — | — |
| ezkl | MNIST MLP | 2M | — | — | 1310 | 0.127 | 5.4 | — | — |
| ezkl | LeNet5 | — | — | — | 535 | 0.127 | 2 | — | — |
| ezkl | VGG11-mini | — | — | — | 2650 | 0.478 | 9.7 | — | — |
| ezkl | ResNet18 | — | — | — | 6840 | 0.18 | 25.3 | — | — |
| ezkl | MobileNetV2 | — | — | — | 14320 | 0.175 | 40.6 | — | — |
| Zator | 510-layer conv backbone (MNIST), 1 layer/step | — | — | — | 26966.8 | — | 24.4 | — | — |
| Zator | 510-layer conv backbone (MNIST), 2 layers/step | — | — | — | 29082 | — | 47.7 | — | — |
| Zator | 510-layer conv backbone (MNIST), 3 layers/step | — | — | — | 30226.8 | — | 62.7 | — | — |
| Range-Arithmetic | DNN (MNIST) | — | — | — | — | — | — | — | — |
| Remainder | Decision forest (128 trees, height 9) | — | — | — | 54 | {'value': None, 'note': 'No single figure. The paper claims proofs "ranging from kilobytes to megabytes" generically, and flags that the Ligero input-layer commitment is "relatively large" -- it sends >=200 columns of field elements. No end-to-end proof size for the 128-tree forest is stated.'} | — | — | — |
Where we disagree
1. Quantization is a confounder, not a footnote
The surveys tabulate proving time, verification time and proof size. They do not tabulate bit width, and bit width is a free parameter that trades model accuracy for proving speed. A system reporting excellent throughput on an aggressively quantized model is not doing the same job as one reporting worse throughput on a faithful one, and nothing in a three-column comparison table makes that visible.
This is not a nitpick, and it is not hypothetical. The largest headline throughput gap in the LLM inference literature is between two systems at different bit widths, on different context lengths, proving different claims (a full sequence versus a single forward pass). Three confounds, all pushing the same direction. The protocol contribution to that gap is smaller than the headline, and nobody has isolated it. See Quantization, it is the largest single methodological difference between this SoK and its predecessors.
Our rule follows from it: quantization.bits: null is a finding, not a hole. Several
of the fastest systems here do not state their bit width. We record the absence rather than
guessing, and a throughput figure with no accuracy claim attached to it is flagged, because
any system can go arbitrarily fast by quantizing to garbage.
2. There is a fourth objective
The ZKP-VML survey divides verifiable ML into training, testing, inference, one bucket per pipeline stage, each proving that a computation ran as declared. The taxonomy is sound and it exhausts its axis.
It has no slot for a claim about the model itself: that it is fair, that it was trained on licensed data, that it is not censoring outputs, that it complies with a regulation. FairProof, FairZK, OATH, zkAudit and the provenance systems are not proving that a computation was performed correctly, and you cannot reach what they prove by proving harder that one was. We call that a fourth objective and give it its own section, along with the argument that it is the objective with the weakest security semantics, because a proof of fairness is only as good as the definition of fairness it encodes, and that definition is contestable in a way arithmetic is not.
3. Provenance is first-class, not adjacent
Related to the above but worth separating. The ZKP-VML survey does name dataset provenance, it gives it a future-work subsection, and says the provenance and integrity of training data "can be just as important as the correctness of the model computation itself", and then leaves it there: no taxonomy slot, no comparison table, not one system reviewed. We think that ordering is close to inverted.
Provenance is the claim with an actual customer. Copyright litigation, licensing compliance and the EU AI Act's data-governance provisions turn on which data went into this model, not on whether the softmax was computed to twelve bits. It is also the cheaper claim, ZKPROV proves which dataset a model was trained on without proving the training computation at all, and, unlike fairness, it has a fact of the matter behind it. A field optimising for the hardest technical problem has spent a decade walking past the easiest valuable one.
4. We do not trust comparison tables, including our own
The methodological disagreement, and the one that produced the most work.
Three of the four sources above contain a table comparing systems the authors did not run.
We reproduced those tables, then went to the primary papers, and found discrepancies. One
proof-size figure differs by an order of magnitude between the paper and the survey
(zkLLM). Another survey figure is smaller than a single pair of group elements, and that
paper we have not obtained, so it stands in papers.yml flagged implausible and unverified
rather than corrected. The difference between those two rows is the point: one we checked, one
we could only mark. Both were invisible from the survey alone.
Where two sources give two numbers, papers.yml records both and the disagreement. Where we
could not obtain the primary paper, it records the survey's figure and says so. That file is
load-bearing for this site's credibility: it is the evidence that the numbers here were checked
rather than copied. It is also the reason every figure on this site renders with a provenance
dot, and the reason a number never appears in prose, a number in a paragraph cannot carry its
provenance, and six months later nobody remembers where it came from.
Is a partisan blog a citable source?
We cite The Definitive Guide to ZKML (2025) and we flag it as partisan, which some readers will find either too generous or too harsh. Our position: a comparison written by a competitor's author is evidence, and for a while it was the only cross-check we had on ZKTorch's LLM performance, until we obtained the paper and read Table 4 ourselves, at which point the primary figures superseded it (and showed that the secondhand throughput number everyone was passing around was a category error, not a measurement). That is what a flagged partisan source is for: it holds a row open until a primary source can close it. The failure would be to launder it, to quote its numbers without the flag, at which point a marketing claim has become a survey figure has become a fact. That laundering pipeline is exactly what a provenance tag exists to break.
We are a survey too
Everything above is a criticism we are also exposed to. Many of this site's older rows are
secondhand from ZKP-VML Survey and we have not opened those PDFs. Several entries carry
authors_verified: false. The honest position is not that this SoK checked everything, it
is that it marks what it did not check, which is a lower bar than it sounds and one the
prior surveys did not clear.