Skip to main content

Benchmark your models (latency + accuracy) on real edge devices — SDK + tinydevice CLI

Project description

tinyedge — the Python SDK

Benchmark your models on real edge devices from inside any Python pipeline, notebook or CI job. PyTorch (or any framework) stays on your machine — the SDK converts what you give it into the platform's wire formats (ONNX + labeled image archive) and real hardware does the measuring.

pip install git+https://github.com/lienertdemaeyer/tinyedge-agent#subdirectory=sdk
export TINYEDGE_API_KEY=tinyedge_sk_…        # TinyEdge console → New benchmark

In a PyTorch pipeline

import tinyedge

client = tinyedge.TinyEdge()

result = client.benchmark(
    model,                       # a live nn.Module (auto-exported to ONNX) or "model.onnx"
    devices=["oppo-a74"],        # or ["jetson-orin-nano:tensorrt", "raspberry-pi-5"]
    dataset=raw_test_set,        # torch Dataset of (image, label) — UNtransformed,
                                 # or a folder ("./testset"), or an archive (".zip/.tar.gz")
    precision="fp32",
)

print(result)                    # <BenchmarkResult oppo-a74 completed p50=56.6ms top1=83.3%>
print(result.latency_ms_p50, result.accuracy_top1)

Notes that make this work well:

  • Pass the dataset without transforms. Preprocessing (resize/crop/normalize) is part of the standardized job spec and runs on-device — that's what makes accuracy comparable across devices instead of depending on whatever transform happened to run on your laptop.
  • Labels are class indices. Folder names / integer labels map directly to your model's output indices (207/ = output neuron 207).
  • A custom example_input controls the ONNX export shape: client.benchmark(model, ..., example_input=torch.randn(1, 3, 320, 320)).

As a CI gate (pytest)

Fail the build when the model regresses on the hardware you ship on:

# test_edge_performance.py
import tinyedge

def test_detector_meets_edge_budget():
    client = tinyedge.TinyEdge()
    result = client.benchmark("artifacts/model.onnx",
                              devices=["jetson-orin-nano"],
                              dataset="testdata/eval_set.tar.gz")
    result.assert_latency(max_ms=50)
    result.assert_accuracy(min_top1=0.80)

assert_* raise AssertionError with a readable message, so any test runner (pytest, unittest, GitHub Actions) reports it natively.

Async style

jobs = client.benchmark(model, devices=["oppo-a74", "raspberry-pi-5"], wait=False)
# … do other work …
for j in jobs:
    print(client.get(j.id))

What runs where

Your machine (SDK) TinyEdge platform The device (agent)
torch → ONNX export stores artifacts, queues job downloads ONNX + images
dataset → image archive tracks pending/running runs inference, computes accuracy
poll / asserts stores the report uploads metrics only

Project details


Download files

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

Source Distribution

tinyedge-0.9.2.tar.gz (84.0 kB view details)

Uploaded Source

Built Distribution

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

tinyedge-0.9.2-py3-none-any.whl (72.8 kB view details)

Uploaded Python 3

File details

Details for the file tinyedge-0.9.2.tar.gz.

File metadata

  • Download URL: tinyedge-0.9.2.tar.gz
  • Upload date:
  • Size: 84.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for tinyedge-0.9.2.tar.gz
Algorithm Hash digest
SHA256 5aaafffddda4783cc7da4d30a306d3d6f21bf757a0ef57a6cc115cf36c5d356a
MD5 5f87cc42e40fe8d93b9f159b89b12e81
BLAKE2b-256 c4bb4fc02389ef9389954eac47f31e24e7f1dfa000728f6e41701a3d0bceeebb

See more details on using hashes here.

File details

Details for the file tinyedge-0.9.2-py3-none-any.whl.

File metadata

  • Download URL: tinyedge-0.9.2-py3-none-any.whl
  • Upload date:
  • Size: 72.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for tinyedge-0.9.2-py3-none-any.whl
Algorithm Hash digest
SHA256 af753cc3f489528c3f27f0f55e16469dbd94c48efec67a43de9ba94801772b05
MD5 cc1f4798c2fc26b03d6c151c9edff3e7
BLAKE2b-256 a5ecd4879736e9017723681b4f81e73065fded82614e6098b9bda1d1e1203bbc

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