Skip to main content

Distributed zkML Toolkit

Project description

DSperse: Distributed zkML

GitHub Discord Telegram Twitter Website Whitepaper

DSperse is a proving-system-agnostic intelligent slicer for verifiable AI. It decomposes ONNX neural network models into circuit-compatible segments and orchestrates compilation, inference, proving, and verification across pluggable ZK backends.

Features

  • Model Slicing: Split neural network models into individual layers or custom segments
  • ONNX Support: Slice and orchestrate ONNX models
  • Layered Inference: Run inference on sliced models, chaining the output of each segment
  • Zero-Knowledge Proofs: Generate and verify proofs for model execution via JSTprove
  • Tiling and Channel Splitting: Automatically decompose large convolutions for circuit-compatible execution
  • Proof System Agnostic: Pluggable backend architecture supporting Expander and Remainder proof systems

Documentation

  • Overview: High-level overview of the project, its goals, and features
  • JSTprove Backend: JSTprove integration and usage

Installation

From PyPI (includes CLI)

pip install dsperse

This installs both the dsperse CLI command and the Python library bindings. No additional dependencies required — everything is compiled into a single native extension.

From source (Rust binary)

cargo install --path crates/dsperse

As a Rust library

[dependencies]
dsperse = { git = "https://github.com/inference-labs-inc/dsperse.git" }

CLI Usage

DSperse provides six subcommands that form a complete pipeline:

Command Description
slice Split an ONNX model into segments
compile Compile slices into ZK circuits
run Execute chained inference across slices (--weights to inject consumer ONNX)
prove Generate ZK proofs for a completed run
verify Verify ZK proofs
full-run Execute compile, run, prove, verify in sequence (supports --weights)

Quickstart

dsperse slice --model-dir models/net
dsperse compile --model-dir models/net --parallel 4
dsperse run --model-dir models/net --input-file models/net/input.json
dsperse prove --model-dir models/net --run-dir models/net/run/run_*
dsperse verify --model-dir models/net --run-dir models/net/run/run_*

Or run the entire pipeline at once:

dsperse full-run --model-dir models/net --input-file models/net/input.json

To inject consumer weights from a fine-tuned ONNX model (same architecture, different weights):

dsperse run --model-dir models/net --input-file models/net/input.json --weights path/to/consumer.onnx
dsperse full-run --model-dir models/net --input-file models/net/input.json --weights path/to/consumer.onnx

Python Library Usage

import dsperse

metadata_json = dsperse.slice_model("models/net/model.onnx", output_dir="models/net/slices")
dsperse.compile_slices("models/net/slices", parallel=4)
run_json = dsperse.run_inference("models/net/slices", "models/net/input.json", "models/net/run")
proof_json = dsperse.prove_run("models/net/run", "models/net/slices")
verify_json = dsperse.verify_run("models/net/run", "models/net/slices")

To inject consumer weights at inference time, pass weights_onnx (path to a fine-tuned ONNX with the same architecture):

run_json = dsperse.run_inference(
    "models/net/slices", "models/net/input.json", "models/net/run",
    weights_onnx="path/to/consumer.onnx",
)

slice_model, run_inference, prove_run, and verify_run return JSON strings parseable with json.loads(). compile_slices returns None.

Project Structure

crates/dsperse/
  src/
    cli/          CLI argument parsing and command dispatch
    slicer/       ONNX model analysis, slicing, autotiling, channel splitting
    pipeline/     Compilation, inference, proving, verification orchestration
    backend/      JSTprove backend integration
    schema/       Metadata and execution result types (serde)
    converter.rs  Prepares JSTprove artifacts from ONNX files
    utils/        I/O helpers and path resolution
  tests/          Unit and integration tests
python/           Thin Python wrapper for PyO3 bindings

Contributing

Contributions are welcome. Please open issues and PRs on GitHub.

License

See the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

dsperse-3.6.0-cp312-cp312-manylinux_2_28_x86_64.whl (9.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

dsperse-3.6.0-cp312-cp312-macosx_11_0_arm64.whl (8.0 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

File details

Details for the file dsperse-3.6.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: dsperse-3.6.0-cp312-cp312-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 9.5 MB
  • Tags: CPython 3.12, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for dsperse-3.6.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4b083655dd72f6178f31b973f03b5d0b1a1a026a48de0d82302d9b88246f77ae
MD5 8cd68557fcec6f5f2c3c9d594a8cef90
BLAKE2b-256 01386dc35fe44f99a9b4bbd4694c810687db0e80f67f1cca07bca1b3430721c0

See more details on using hashes here.

File details

Details for the file dsperse-3.6.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

  • Download URL: dsperse-3.6.0-cp312-cp312-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 8.0 MB
  • Tags: CPython 3.12, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for dsperse-3.6.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a862c3c63c67f2b3e9acf3cdae95296f2bb9bc156b8ac33d8f23926373c73167
MD5 554f89b05599f8cf4b05089a8c84e3d9
BLAKE2b-256 20b6ce2c18c9da58a6e936ae96df9900845801bf8d759132ea0fad65a526927c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page