MCPcopy Index your code
hub / github.com/ICME-Lab/jolt-atlas

github.com/ICME-Lab/jolt-atlas @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
3,939 symbols 13,403 edges 322 files 1,135 documented · 29%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

JOLT Atlas

JOLT Atlas is a zero-knowledge machine learning (zkML) framework that extends the JOLT proving system to support ML inference verification from ONNX models.

Made with ❤️ by ICME Labs.

icme_labs

Overview

JOLT Atlas enables practical zero-knowledge machine learning by leveraging Just One Lookup Table (JOLT) technology. Traditional circuit-based approaches are prohibitively expensive when representing non-linear functions like ReLU and SoftMax. Lookups eliminate the need for circuit representation entirely.

In JOLT Atlas, we eliminate the complexity that plagues other approaches: no quotient polynomials, no byte decomposition, no grand products, no permutation checks, and most importantly — no complicated circuits.

Our core ethos is to reduce commitment costs via sumcheck while committing only to small-value polynomials.

Examples

Examples live in jolt-atlas-core/examples/ and demonstrate end-to-end prove → verify flows for various ONNX models.

GPT-2

GPT-2 proof and verification flow.

cargo run --release --package jolt-atlas-core --example gpt2

nanoGPT

A ~0.25M-parameter GPT model (4 transformer layers). Loads the ONNX graph, generates a SNARK proof of inference, and verifies it.

cargo run --release --package jolt-atlas-core --example nanoGPT

Transformer (self-attention)

Single self-attention block proof.

cargo run --release --package jolt-atlas-core --example transformer

MiniGPT / MicroGPT

Smaller GPT variants useful for quick iteration and debugging.

cargo run --release --package jolt-atlas-core --example minigpt
cargo run --release --package jolt-atlas-core --example microgpt

Benchmarks

System specs: MacBook Pro M3, 16GB RAM

GPT-2 (125M params)

GPT-2 is a 125-million-parameter transformer model from OpenAI.

JOLT Atlas

Stage Wall clock
Proving/verifying key generation (setup_prover) 1.003 s
Witness + commitment phase (ONNXProof::commit_witness_polynomials) 0.762 s
IOP proving (ONNXProof::iop) 5.997 s
Reduction opening proof (excluding HyperKZG::prove) 1.899 s
HyperKZG prove (HyperKZG::prove) 2.392 s
Proof time (ONNXProof::prove) 14.889 s
Verify time (ONNXProof::verify) 1.038 s
End-to-end total (setup_prover + prove + verify) 16.930 s

nanoGPT (~0.25M params, 4 transformer layers)

nanoGPT is the standard workload we use for cross-project comparison. It is a ~250k-parameter GPT model with 4 transformer layers.

JOLT Atlas:

Stage Wall clock
Verifying key generation (setup_verifier) <0.001 s
Proving key generation (setup_prover) 0.263 s
Proof time (ONNXProof::prove) 2.288 s
Verify time (ONNXProof::verify) 0.127 s
End-to-end total (setup_prover + prove + verify) 2.678 s

ezkl on the same model (source):

Stage Wall clock
Verifying key generation 192 s
Proving key generation 212 s
Proof time 237 s
Verify time 0.34 s

JOLT Atlas produces a proof for nanoGPT in ~2.29 s versus ezkl's ~237 s proof time (not counting their 400+ s of key generation). That is roughly a 104× speed-up on proof generation alone.

How to reproduce locally

# from repo root
cargo run --release --package jolt-atlas-core --example gpt2

Add -- --trace for Chrome Tracing JSON output (view in chrome://tracing), or -- --trace-terminal for timing printed to the terminal.

Getting Started

GPT-2 (first run)

GPT-2 uses a Hugging Face–hosted ONNX model that is not checked into the repo. A helper script downloads and prepares it automatically.

  1. Clone the repository.
  2. Install Rust and Cargo.
  3. Download the model:
# Create a virtual environment (one-time)
python3 -m venv .venv
source .venv/bin/activate

# Run the download script
python scripts/download_gpt2.py

This exports GPT-2 via Hugging Face Optimum into atlas-onnx-tracer/models/gpt2/ and copies model.onnxnetwork.onnx.

  1. Test the model (trace only, no proof):
cargo run --release --package atlas-onnx-tracer --example gpt2

You should see the model graph printed and an output shape like [1, 16, 65536] (vocab size 50257 padded to the next power of two).

  1. Prove & verify GPT-2:
cargo run --release --package jolt-atlas-core --example gpt2

A successful run prints Proof verified successfully!.

Acknowledgments

Thanks to the Jolt team for their foundational work. We are standing on the shoulders of giants.

Extension points exported contracts — how you extend this code

OperatorProofTrait (Interface)
Trait for handling operator proving and verification. Each operator type implements this trait to encapsulate its speci [28 …
jolt-atlas-core/src/onnx_proof/ops/mod.rs
SmallScalar (Interface)
A trait for small scalars ({u/i}{8/16/32/64/128}) [11 implementers]
joltworks/src/utils/small_scalar.rs
Op (Interface)
Trait for all operators - defines how to execute the operation on input tensors. [34 implementers]
atlas-onnx-tracer/src/ops/mod.rs
RangeCheckingOperandsTrait (Interface)
Trait defining the interface for operations that require range-checking. This trait provides all the information needed [6 …
jolt-atlas-core/src/onnx_proof/range_checking/range_check_operands.rs
RaOneHotEncoding (Interface)
Describes the polynomial configuration for the three RA one-hot sumchecks (RaVirtual, HammingWeight, Booleanity). Implem [11 …
joltworks/src/subprotocols/shout.rs
TensorType (Interface)
The (inner) type of tensor elements. [3 implementers]
atlas-onnx-tracer/src/tensor/mod.rs
EinsumLayout (Interface)
Per-pattern description of an einsum contraction sumcheck. See the [module docs](self) for how the engine uses these ho [5 …
jolt-atlas-core/src/onnx_proof/ops/einsum/dot.rs
JoltLookupTable (Interface)
Core trait for all Jolt lookup tables. Provides methods to materialize table entries and evaluate the multilinear exten [7 …
joltworks/src/lookup_tables/mod.rs

Core symbols most depended-on inside this repo

map
called by 857
atlas-onnx-tracer/src/tensor/mod.rs
iter
called by 727
joltworks/src/poly/compact_polynomial.rs
clone
called by 695
joltworks/src/poly/dense_mlpoly.rs
unwrap
called by 691
joltworks/src/lookup_tables/prefixes/mod.rs
len
called by 346
joltworks/src/poly/ra_poly.rs
push
called by 293
joltworks/src/subprotocols/blindfold/r1cs.rs
into
called by 248
joltworks/src/poly/opening_proof.rs
with_min_len
called by 199
atlas-onnx-tracer/src/utils/parallel_utils.rs

Shape

Method 2,270
Function 1,109
Class 440
Enum 60
Interface 60

Languages

Rust93%
Python7%

Modules by API surface

atlas-onnx-tracer/src/tensor/mod.rs103 symbols
atlas-onnx-tracer/src/tensor/ops.rs89 symbols
jolt-atlas-core/src/onnx_proof/e2e_tests.rs73 symbols
joltworks/src/poly/opening_proof.rs56 symbols
joltworks/src/field/tracked_ark.rs51 symbols
joltworks/src/subprotocols/mles_product_sum.rs50 symbols
joltworks/src/subprotocols/blindfold/mod.rs49 symbols
joltworks/src/poly/unipoly.rs49 symbols
jolt-atlas-core/src/onnx_proof/ops/softmax_last_axis/mod.rs46 symbols
joltworks/src/utils/counters.rs44 symbols
joltworks/src/poly/dense_mlpoly.rs42 symbols
joltworks/src/subprotocols/blindfold/output_constraint.rs40 symbols

For agents

$ claude mcp add jolt-atlas \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact