TiGrIS - Tiled Graph Inference Scheduler for edge ML deployment
Project description
TiGrIS
Tiled Graph Inference Scheduler. An ahead-of-time compiler that tiles ML models to fit embedded devices with hard memory budgets.
Give it an ONNX model and a memory budget. It partitions the compute graph into stages, tiles spatial operations, and emits a flat binary plan that the tigris-runtime executes with zero dynamic allocation.
The problem
On an embedded device with a few hundred KB of SRAM, most interesting models simply don't fit. The usual answer is to shrink the model: quantize harder, prune, pick a smaller architecture, and hope the accuracy hit is acceptable.
TiGrIS takes the other approach. It keeps the model you trained and rearranges the computation so that only a small working set lives in SRAM at any moment. Weights and intermediate spills go to flash or PSRAM. What comes out is a binary plan that the runtime executes as a flat sequence of kernel calls, with no interpreter, no tensor allocator, and no dynamic memory at all.
Quick start
pip install tigris-ml
# Will this model fit in 256KB SRAM + 16MB flash?
tigris analyze mobilenetv2.onnx -m 256K -f 16M
╭──────────────────────── TiGrIS - mobilenetv2 ────────────────────────╮
│ Operators 65 │
│ Peak memory (naive) 4.59 MiB │
│ Largest tensor 1x96x112x112 (4.59 MiB) │
╰──────────────────────────────────────────────────────────────────────╯
╭──────────────────────────────── SRAM ────────────────────────────────╮
│ Budget 256.00 KiB │
│ Scheduled peak 254.62 KiB (5.4% of naive peak) │
│ Stages 42 │
│ Need tiling 31 of 42 stages │
╰──────────────── PASS - tiling resolves all stages ─────────────────╯
The naive peak is 4.59 MiB. TiGrIS schedules it into 256 KiB through temporal partitioning and spatial tiling. analyze runs on your laptop; no hardware required.
From ONNX to embedded
Three steps take a model from ONNX to a C file you can drop into your firmware project:
# 1. Analyze feasibility against a memory budget
tigris analyze model.onnx -m 256K -f 16M
# 2. Compile to a binary plan (weights read-in-place from flash)
tigris compile model.onnx -m 256K -f 16M --xip -o model.tgrs
# 3. Generate a backend-specific C harness for your target
tigris codegen model.tgrs --backend esp-nn -o model.c
The .tgrs plan is target-agnostic: it is the same file whether you run it on an ESP32, a Cortex-M, or a POSIX host for testing. The choice of kernel backend happens at codegen time and decides which kernel library the generated C calls into.
Several kernel backends are available (portable C99, ESP32 family, Cortex-M family); see tigris-runtime for the current list. Switching between them is a --backend flag, not a rewrite.
What you get
tigris compile writes a single .tgrs file that contains the operator schedule, tile parameters, quantization tables, and the weights. This file goes on flash at deployment time.
tigris codegen produces a small C harness that locates the plan on flash at runtime and hands it to the runtime:
- declarations for the input/output buffers and the arena
- a
tigris_run_once()entry point that sets up memory and calls the runtime - backend-specific glue for finding the plan: partition mmap on ESP-IDF, an
externflash symbol on Cortex-M, a file path on POSIX
Link the harness against tigris-runtime and your chosen kernel library, flash the .tgrs alongside the firmware, and you have a working inference binary.
Further reading
- Getting started: installation, first compile, deploying to ESP32
- Introducing TiGrIS: design, benchmarks, how tiling works
- CLI reference: every flag, every subcommand
Development
git clone https://github.com/raws-labs/tigris
cd tigris
pip install -e ".[dev]"
pytest
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tigris_ml-0.3.0.tar.gz.
File metadata
- Download URL: tigris_ml-0.3.0.tar.gz
- Upload date:
- Size: 79.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5fca02bc9e82b319febae8728f5150c08ffd3b71e301054ff9d0a911c88db076
|
|
| MD5 |
ccb108d021913124f98331cbe7a40321
|
|
| BLAKE2b-256 |
54675bb040e7eefc04167a39984dc3b28650ef4edbbb4ec600f3c413f5094b0f
|
Provenance
The following attestation bundles were made for tigris_ml-0.3.0.tar.gz:
Publisher:
publish.yml on raws-labs/tigris
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tigris_ml-0.3.0.tar.gz -
Subject digest:
5fca02bc9e82b319febae8728f5150c08ffd3b71e301054ff9d0a911c88db076 - Sigstore transparency entry: 1370025148
- Sigstore integration time:
-
Permalink:
raws-labs/tigris@1cf43c65677a52cb11ad6f3c019cab17559fddad -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/raws-labs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1cf43c65677a52cb11ad6f3c019cab17559fddad -
Trigger Event:
release
-
Statement type:
File details
Details for the file tigris_ml-0.3.0-py3-none-any.whl.
File metadata
- Download URL: tigris_ml-0.3.0-py3-none-any.whl
- Upload date:
- Size: 66.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3dbf726d8bf933d2e3fa2583ee7068d06623dc9a2ca31144754803a27f619a9e
|
|
| MD5 |
ec4773797600392149f86b0965ae939e
|
|
| BLAKE2b-256 |
dea47e56ad6e9b585bd08696c63a6bc3cbb40ed5e422c6de1bda8658b2d314ab
|
Provenance
The following attestation bundles were made for tigris_ml-0.3.0-py3-none-any.whl:
Publisher:
publish.yml on raws-labs/tigris
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tigris_ml-0.3.0-py3-none-any.whl -
Subject digest:
3dbf726d8bf933d2e3fa2583ee7068d06623dc9a2ca31144754803a27f619a9e - Sigstore transparency entry: 1370025250
- Sigstore integration time:
-
Permalink:
raws-labs/tigris@1cf43c65677a52cb11ad6f3c019cab17559fddad -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/raws-labs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1cf43c65677a52cb11ad6f3c019cab17559fddad -
Trigger Event:
release
-
Statement type: