Jolt Atlas
Jolt Atlas: Verifiable Inference via Lookup Arguments in Zero Knowledge
Reported benchmarks
| model | params | layers | proving time s | setup time s | tokens per minute | verification time s | baseline comparison | proving breakdown s | notes |
|---|---|---|---|---|---|---|---|---|---|
| nanoGPT | 250K | 4 | 14 | 0.492 | 4.3 | 0.517 | ezkl on the same model: 237s proof time (+ >400s key gen), 0.34s verify => ~17x speedup on proving alone. | — | — |
| GPT-2 | 125M | — | 38 | 0.872 | — | — | — | {'witness_generation': 7.5, 'commitment': 3.5, 'sum_check_proving': 16.0, 'reduction_opening_proof': 7.0, 'hyperkzg_prove': 3.0} | Table 3, p.19. Hardware is a MacBook Pro M3 / 16 GB -- far weaker than any other system in this table, which cuts the other way from the missing context window. |
tokens_per_minute_note: 60 / 14s single proof. Paper does not frame this as decode throughput; order-of-magnitude only.
proving_time_note: "End-to-end total ~38 s" (Table 3). Component stages are printed with a tilde, i.e. approximate.
tokens_per_minute_note: NOT derivable. The paper never states how many tokens the 38 s covers, nor the sequence length. Unlike DeepProve, it never discusses autoregression or KV caching, so it is unknown whether this is one forward pass or a full generation. Do not plot this against DeepProve's TPM.
Notes
Proves ONNX tensor operations directly instead of emulating a CPU, so there is no RISC-V trace. Zero-knowledge via the BlindFold technique: Sec 2 organises the proof "using BlindFold to hide the witness", and Sec 3 gives the construction (Pedersen-hidden sumcheck messages + Nova-style folding with a random satisfying instance). CORRECTED 2026-07-13: this note previously called Jolt Atlas "the only system here that actually hides the witness". That is FALSE, and this file's own entries refute it. zkLLM proves zero-knowledge with a simulator (Theorem 7.4) and hides the model parameters; ZEN is Groth16 and its schemes "leak no information of either the neural network model or the sensitive user input"; zkml-kang inherits "all security properties of halo2, including zero-knowledge"; mystique and hao-et-al both carry uses_zk: true. If anything Jolt Atlas is the WEAKEST of these on paper -- the PDF contains no theorem, no simulator and no security proof, and Table 3's stage breakdown shows no BlindFold/folding line item, so it is not even clear the ~38 s includes the ZK overhead. The real contrast is zkGPT, which DEFERS zero-knowledge ("The zero-knowledge property can be incorporated into the protocol by using masking polynomials", Sec 4) -- so what zkGPT measures is not a ZK protocol. Targets memory-constrained / on-device proving: prefix-suffix decomposition of lookup tables cuts peak prover memory from O(|T|) to ~O(|T|^(1/C)), which is how a 125M-parameter model proves inside 16 GB. CORRECTION (2026-07-10): a previous note here said Sec. 6.2 "contains no measurements". It does -- Table 3 carries the full GPT-2 stage breakdown, but LaTeX floated the table onto p.19, past the Sec. 7 heading, so it does not appear under the 6.2 header in a linear text scan. The GPT-2 row below is now populated.
Quantization, in full
| bits | None |
|---|---|
| widths_from_source | NOT IN THE PAPER -- read from the code. Accumulator is i64, saturating-clamped to i32 (lookup_tables/sat_clamp.rs: `64 => (index as i64).clamp(i32::MIN as i64, i32::MAX as i64)`, plus a 16->8 variant). The often-quoted "16-bit" figure is the ACTIVATION width only; the accumulator width is i64 and was never stated. Fixed-point scale = 128 = 2^7 (paper Sec 4.2, "128-scale fixed-point representation"). Lookup tables: 2^16 (tanh/erf/sigmoid), 2^12 (sin/cos), ~401 entries for the softmax exp via a two-table e^(a+b) = e^a * e^b split. Teleportation tau = 4 in the paper but tau = 2 in the code. |
| bits_note | Two incidental mentions only, both in Sec. 4.2 and both about the ACTIVATION LOOKUP TABLE rather than the model: the tau=4 table is "sufficient for 16-bit fixed-point activations", and the teleportation error bound is quoted "on a 128-scale fixed-point representation". No calibration procedure, scale-factor derivation, zero-point discussion, or bit-width sensitivity study appears anywhere in the paper. |
| scheme | Neural teleportation to compress lookup table sizes |
| accuracy_retention | "while preserving model accuracy" (no metric given) |
| note | Lookup-table size is the dominant cost here, and table size grows exponentially in the bit width of the lookup input -- so bit width matters more for this design than for pure sum-check systems. That it is unstated is a real gap. Separately, teleportation is by the authors' own admission LOSSY ("y' != y in general"), and its error is bounded only in raw output units (< 55 units on a 128-scale fixed-point representation at tau=4) -- never in model-level accuracy. There is NO perplexity or task-accuracy number for any model in this paper. |
Our reading
What is new
Three things, of which one is real, one is real-but-lossy, and one is real-but-unfinished.
Prefix-suffix decomposition for small-space lookups is the real one, and it is what the paper
should be read for. A lookup table's multilinear extension can be factored so that peak prover
memory drops from O(|T|) to roughly O(|T|^{1/C}) at the cost of C streaming passes. This is
inherited from Jolt rather than invented here, but the application is the point: it is why a
GPT-2-sized model proves inside a laptop's memory budget at all, and on-device proving is a
genuinely different product from every other system in this collection.
Neural teleportation is the lossy one, and the paper is honest about it. TeleSparse's original transform is two-sided and therefore exactly lossless, divide the pre-activation by λ, multiply the output back, rescale the downstream weights. Jolt Atlas cannot afford the weight rescaling (it would mean re-committing the weight tensors), so it uses a one-sided approximation: divide the input by τ and simply do not compensate. The justification is that saturating activations spend most of their range in the flat region where the transform is exact. It shrinks the activation lookup table by the same factor. It is a clean trade and it is clearly labelled as lossy.
BlindFold zero-knowledge is the unfinished one. Jolt Atlas is the only system in the proving-inference table that seriously attempts to hide the witness, Pedersen-committed sum-check round polynomials, an R1CS encoding of the sum-check verifier, folded via Nova. That ambition is correct and nobody else here has it. See below for what the code says about it.
What it actually proves
For nanoGPT: a proof of a forward pass, with a verifying key, a proving key, a proof time and a verify time. Clean.
For GPT-2: nobody knows. §6.2 consists of a heading and the words "JOLT Atlas (end-to-end)." Table 3 (which LaTeX floated past the §7 heading onto p.19, which is why an earlier read of this paper concluded there were no measurements at all) gives a five-stage prover breakdown and a total. It gives no sequence length, no token count, no proof size, no verifier time, and no accuracy. The paper never discusses autoregression or KV caching anywhere, so it is not knowable from the text whether that total buys one forward pass or a whole generation. This is the single fact that makes the GPT-2 result unplottable, and asking the authors what the number covers remains the highest-value open item on this paper.
And there is no accuracy number for any model, at any bit width, anywhere in the paper. The teleportation error is bounded only in raw output units on a fixed-point scale, never in perplexity, never in task accuracy. A system whose central optimization is admittedly lossy, which reports no accuracy metric, has not shown that the optimization is affordable.
What to distrust
The paper's central architectural claim is contradicted by the paper. The abstract's differentiator is that, unlike a zkVM, Jolt Atlas "applies [Jolt's lookup-centric approach] directly to ONNX tensor operations," and §1.2 says it verifies "tensor relations directly at the multilinear polynomial level" instead of "naively decomposing tensor operations into scalar computations." Then §5.4 opens:
Currently, to verify tensor operations such as addition, multiplication, or ReLU, we begin with the ONNX trace, decompose it into a CPU trace, and then feed this representation into the Jolt proof system.
Jolt Atlas · §5.4, CPU trace vs Tensor trace
Currently. The tensor-native proving that distinguishes Jolt Atlas from Jolt is aspirational. And
the architecture section confirms it: §2.2's Stage 3 includes a PCSumcheck, which "[e]nsures each
execution step (PC) transitions to the next instruction (NextPC)", a program counter, in a system
whose selling point is that it has no CPU to emulate.
The same section ends: "the approach neither uses nor requires R1CS." Stage 1 of the proof DAG is "the SpartanDag prov[ing] the outer R1CS constraint," and the whole of §3.2 is titled "R1CS Encoding of the Sumcheck Verifier." Both sentences are in the same paper.
The headline speedup over ezkl is not a measurement the authors made. "We report ezkl timings for the same model from their published benchmark", a blog post, run on ezkl's hardware, which is not the MacBook Pro M3 that Jolt Atlas ran on. The proof-time ratio compares a number the authors measured against a number they read. The key-generation comparison is more defensible (ezkl's key generation dwarfs its own proving time, and Jolt Atlas's is sub-second), but the headline is a cross-hardware ratio against a vendor blog.
The setup timings are suspicious on their face. Table 1 reports verifying-key generation and proving-key generation as the same value to three decimal places. That is either a coincidence, a single measurement reported twice, or a placeholder.
The bit width is unstated, and here it matters more than anywhere else in the repo. Lookup-table size is Jolt Atlas's dominant cost, and table size grows exponentially in the bit width of the lookup input. Two incidental mentions in §4.2, the τ=4 table is "sufficient for 16-bit fixed-point activations," and the teleportation error is quoted on a 128-scale fixed-point representation, are all there is. No calibration procedure, no scale-factor derivation, no zero-point discussion, no sensitivity study. For a design where bit width is the cost model, that is a hole.
From site/legacy/jolt-atlas-from-source.md, read against
jolt-atlas@b20cdce. The non-ZK path is tightly constrained by sum-checks, range checks and Shout
one-hot triples. The BlindFold ZK path is younger, and several bindings that hold in the clear are
not re-expressed as R1CS constraints:
- Softmax's
operand_link, the identity that pins the max, is intentionally skipped in ZK mode, with no replacement constraint (zk.rs:381-391). This is a genuine under-constraint in the ZK softmax flow. - The standalone ONNX
Clampoperator is an unproven passthrough (ops/clamp.rs), and the tanh/erf/sigmoid clamps use dummy advice plus a prover-sideassert!. - Public-node reduced claims are compared in cleartext only; the code itself notes that "full soundness against an active malicious prover additionally requires an R1CS constraint … tracked as future work."
- The γ-weighted
joint_claimscalar leaks in cleartext, an accepted, documented non-ZK leak, because no hiding HyperKZG exists.
None of this is a break of a shipped system; it is research code with self-documented TODOs. But "Jolt Atlas achieves zero-knowledge through the BlindFold technique" is a claim about a code path that is not yet fully constrained, and the SoK should say so before crediting Jolt Atlas as the one system here that hides its witness.
Credit where due: on-device proving is a real and under-served goal, the memory result that enables it is genuine, and this is the only paper in the proving-inference cluster that treats witness privacy as a first-class requirement rather than a footnote. The gap is between the ambition and the current implementation, not in the ambition.
Citation neighbourhood
Cited by, in this corpus
Edges are a proxy: paper A's text mentions B anywhere (body or bibliography). See the full graph.
Discussed in
Other recorded fields
claim_kind: full claim_kind_note: 'CORRECTED 2026-07-13 (was `pass # single forward pass`). Verified against the PDF: the strings "forward pass", "token", "sequence length", "autoregressive" and "prompt" do not occur ANYWHERE in the paper. Sec 6.2 (GPT-2) is two sentences plus a table, and nothing in it says what the ~38 s covers. `pass` was a claim the paper does not make, and it contradicted this entry''s own benchmarks[GPT-2].tokens_per_minute_note, which already admitted "it is unknown whether this is one forward pass or a full generation". Per the vocabulary at the top of this file, an unstated token count is `full` -- an ambiguity, recorded as one. (The claim that the PROVER only ever does one pass is separately supported, but by the SOURCE CODE, not the paper -- see content/zk-inference/ jolt-atlas-from-source.md.)'