Proving inference · The landscape

The landscape

Proving inference is the most crowded cell in the 2x2, and the only one with a live leaderboard. That leaderboard is not measuring one thing.

The claim

Proving inference means producing a string a stranger can check, which certifies: this model, the one committed to earlier, produced this output on this input. Nothing about the training. Nothing about the model's quality. One computation, executed faithfully.

That is the cheapest of the four verification objectives, and it is cheap for a reason worth internalizing before reading any benchmark: the prover already knows the answer. A proof does not compute the forward pass, it checks one. Every serious speedup in this section is downstream of exploiting that asymmetry, the result-as-witness paradigm, output certification, batched token proving. A system that merely re-executed the model inside a circuit would be uncompetitive by orders of magnitude.

The threat model is MLaaS. You pay for a frontier model and the provider silently serves a smaller, more aggressively quantized one; or the model runs on a cloud you do not control; or the output settles money on-chain and the counterparty is anonymous. All of these are model substitution, and it is the concrete thing this literature exists to prevent, NANOZK and DeepProve both name it directly.

With exactly one exception, and it is worth stopping on, because it turns out the threat model is the dominant term in the cost. Bionetta runs the whole thing backwards: the model is public, the input is private, and the client is the prover, on a phone, proving that their face matches an enrolled template without surrendering the face. Once the weights are public they stop being circuit signals and become circuit constants, and R1CS charges nothing for multiplication by a constant. Every linear layer therefore costs zero constraints, and ResNet18 falls from 37.85M constraints to 1.16M.

Hold that number next to the rest of this page. Five years of protocol work, sum-check for convolution, lookup arguments, result-as-witness, circuit squeeze, buys large constant factors. Making the weights public buys a factor of thirty-two on its own, and it is unavailable to every other system here for the simple reason that the weights are the thing they exist to hide. A great deal of what this table reads as cryptographic progress is the price of a security property, and nobody separates the two.

Who is in the race

SystemModelParamsContextTok/minProve (s)Proof (MB)Verify (s)Comm (MB)Accuracy
DeepProve GPT-2124M5121747–271.2
DeepProve Gemma 3270M5128616–543.7
DeepProve GPT-2 (distributed prover, 16 workers)124M512185553.81
Jolt Atlas nanoGPT250K4.3140.517
Jolt Atlas GPT-2125M38
zkGPT GPT-2124M322.7521.80.1010.35
zkPyTorch VGG-1615.2M2.2
zkPyTorch Llama-3 8B8B0.4150
zkPyTorch ResNet-50
zkPyTorch ResNet-101
zkLLM LLaMA-2 13B13B9000.23
ZKML GPT-2 (distilled)81.3M0.0163651.670.02812818.7
ZKML GPT-2 (distilled)81.3M3949.60.01651211.98
Bionetta MNIST MLP2M3.050.000880.01
Bionetta LeNet53.750.000880.01
Bionetta VGG11-mini7.70.000880.02
Bionetta ResNet1814.10.000880.015
Bionetta MobileNetV224.50.000880.018
Bionetta MNIST MLP (iPhone 14 Pro)2M2.80.00088
Bionetta LeNet5 (iPhone 14 Pro)3.550.00088
Bionetta VGG11-mini (iPhone 14 Pro)7.650.00088
Bionetta ResNet18 (iPhone 14 Pro)13.60.00088
Bionetta MobileNetV2 (iPhone 14 Pro)22.960.00088
SafetyNets FcNN-3-Quad (TIMIT)0.008
SafetyNets CNN-2-Quad (MNIST / MNIST-Back-Rand)
zkCNN VGG1615M88.30.3410.0593
SpaGKR Sparse linear layers
SpaGKR Ternary network
Mystique ResNet-101 (public model, private input)42.5M262990
Mystique ResNet-101 (private committed model, private input)42.5M5351980
Mystique ResNet-50 (private committed model, private input)23.5M33312700.02% accuracy decrease vs the plaintext model on the full CIFAR-10 test set (same delta reported for ResNet-101)
vCNN VGG162880019.4
ZEN ShallowNet / LeNet147–47100.0001920.023–0.47
Artemis / Apollo GPT-2124M12000–144000.0150.014
Lu et al. GPT-2117M287.1450063
Hao et al. ReLU (operator)2.10730.137
Hao et al. Softmax (operator, dim 10)87.131816.33
Hao et al. GELU (operator)37.628338.182
Hao et al. Normalization (operator, dim 16)192.826
ZKTorch GPT-J6B21397.526.5462.64
ZKTorch BERT340M1880.424.8826.67
ZKTorch LLaMA-2-7B7B12645.522.85100.14
ZKTorch GPT-2124M59912
NANOZK Transformer block (d=128)430.00550.024
ZIP
ezkl MNIST MLP2M13100.1275.4
ezkl LeNet55350.1272
ezkl VGG11-mini26500.4789.7
ezkl ResNet1868400.1825.3
ezkl MobileNetV2143200.17540.6
Zator 510-layer conv backbone (MNIST), 1 layer/step26966.824.4
Zator 510-layer conv backbone (MNIST), 2 layers/step2908247.7
Zator 510-layer conv backbone (MNIST), 3 layers/step30226.862.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.'}
primary — read in the paper survey — secondhand vendor claim, or provenance unrecorded

Both axes log. A point is one reported benchmark, not one system — and the points are not making the same claim. Marker size is the strength of the claim: a large dot certified a whole generated sequence, a small one proved a single forward pass, and a dashed one did not say. Reading this chart as a leaderboard is the mistake it is drawn to prevent.

Three groups of entries hide inside that table, and mixing them is the single most common error in this field.

The LLM systems. DeepProve, zkGPT, zkLLM, zkPyTorch, Jolt Atlas, and, with a warning label, NANOZK. These are the systems whose papers are pitched at LLM inference. They are not the only entries in the table that have run a transformer, ZKTorch, ZKML, Artemis / Apollo and Lu et al. all report GPT-class benchmarks, but they are the ones for which an LLM is the design target rather than a coverage datapoint. They span an enormous range of hardware: a laptop for Jolt Atlas, CPU-only for zkGPT, a datacenter GPU for zkLLM, and a many-core server CPU for DeepProve whose distributed prover is simulated, not deployed. They also span an enormous range of what they prove, which is the subject of the next page and the reason the throughput column should be read with suspicion.

The compilers. ZKML, ZKTorch, ezkl, and zkPyTorch are pipelines from an ONNX or TFLite graph down to a circuit. Most of them compete on coverage and engineering rather than cryptographic novelty, zkPyTorch says so in as many words:

Therefore, rather than introducing new optimization approaches, ZKPyTorch integrates existing techniques for primitive operations to enhance efficiency, ensuring compatibility with state-of-the-art methods while maintaining scalability for large-scale machine learning models.

zkPyTorch · §3.4, Hierarchical ZKP circuit optimizer

That is an honest and useful thing for a compiler paper to say. It also means a compiler's headline number is a statement about its backend and its quantization, not about a new way to prove a matmul. ZKTorch is the exception in this group: it is a compiler that also ships a new accumulation protocol.

The pre-LLM generation. zkCNN, vCNN, ZEN, Mystique, SafetyNets, convolutional nets, no attention, and no shared choice of field. They are not obsolete; they are the foundation, and their assumptions are still load-bearing. See Vision and trees.

Several entries sit outside all three groups. Bionetta is the one described above, a client-side prover for a public model, running on a phone, with no softmax and therefore no transformer, which is why it appears in none of the LLM comparisons and should never be put on the tokens-per-minute axis. Hao et al. proves operators (ReLU, Softmax) rather than models, which makes it a component supplier rather than a competitor. ZIP refuses to quantize at all: its honest prover computes activations in native IEEE-754 double precision. What the proof enforces is weaker, that the value lies within a bounded relative error of a certified polynomial approximation, but as a design it is the counter-thesis to everything else here, and the cleanest evidence that quantization is a choice. See Quantization. SpaGKR changes both sides at once, a sparsity-aware GKR protocol whose proof time scales with the non-zero parameters, and a ternary network on top of it. Its (secondhand) numbers separate the two, and sparsity buys most of the win. It is still the strongest published evidence that narrower weights make proving cheaper, but it is not clean evidence. Artemis / Apollo attacks a different bottleneck again, the consistency check that ties a committed model to the circuit that runs it, and is therefore orthogonal to every prover in the table. Range-Arithmetic is an interactive sum-check descendant of SafetyNets that proves fixed-point rounding arithmetically rather than by bit-decomposition, and, like its ancestor, reports its costs only as log-scale plots, there is no absolute timing in it to compare against. And Lu et al. is the VOLE outlier, a very fast prover that emits proofs measured in gigabytes and can only convince the one verifier it talked to.

The shape of the field

Four observations that the table alone will not give you.

Sum-check won, for LLMs. Nearly every fast system in this section descends from SafetyNets by way of zkCNN: represent the network as an arithmetic circuit, prove it with sum-check and GKR rather than a general-purpose SNARK. The Halo2/PLONKish line (ZKML, ezkl, Artemis / Apollo) survives on tooling maturity, not on prover speed, and, per Bionetta's measurements of ezkl, not on tiny proofs either, which is what everyone thought it was surviving on. The R1CS/Groth16 line, meanwhile, was written off too early: it is the only line that delivers a sub-kilobyte proof and a millisecond verifier, and on a public model it is the fastest prover in this SoK. Proof systems breaks all of this down.

The hard part is not the matmul. It never was. Matrix multiplication is the one thing arithmetic circuits are naturally good at. The cost, the papers, and the bugs all live in Softmax, GeLU, LayerNorm and re-quantization, the non-arithmetic operations. Every technical contribution in the last five years (tlookup, zkAttn, result-as-witness, constraint fusion, neural teleportation) is an attack on the same handful of operators. Bionetta is the clean confirmation, arriving from the far side: with the matmuls at literally zero constraints, its proving cost reduces to a single quantity, the number of non-linearity calls. Two proof systems with nothing in common, one cost model. Strikingly, the private inference literature, which shares no citations with this one, is bottlenecked on exactly the same operators for entirely different reasons.

Bit width is unreported more often than not, and it moves proving cost. That makes the throughput column a comparison across an uncontrolled variable. See Quantization.

Nothing here has been analyzed as a deployed system. Every system in the table is an argument system compiled by Fiat–Shamir, or a circuit, or both. The Fiat–Shamir/GKR attack is a proven attack on the construction underneath most of this section, under a precondition nobody has checked against these systems, and the Halo2 query-collision bug was a real, exploitable bug in the stack two of them sit on. The gap between "no known break" and "analyzed" is where the work is.

Where to go next