Python client for benchmarking and validating ML models on real devices via RunLocal API
Project description
Python client for benchmarking and validating ML models on real devices via RunLocal API.
🎯 Key Features
- ⚡ Real Hardware Testing - No simulators or emulators. Test on real devices maintained in our devices lab
- 🌍 Cross-Platform Coverage - Access MacBooks, iPhones, iPads, Android, and Windows devices from a single API
- 🔧 Multiple ML Formats - Support for CoreML, ONNX, OpenVINO, TensorFlow Lite, and GGUF models. More frameworks coming soon.
- 📊 Detailed Metrics - Measure inference time, memory usage, and per-layer performance data
- 🚦 CI/CD Ready - Integrate performance and accuracy testing into your deployment pipeline
🔍 Evaluate Results
All benchmarks performed through the python client can be evaluated on the web platform by logging into your account. Check out our public demo for comprehensive benchmark evaluation across different devices and model formats.
🛠 Installation
Using uv
Add to your project with uv:
uv add runlocal-hub
Then run:
uv sync
Using pip
pip install runlocal-hub
Development Installation
For development or to install from source using uv:
git clone https://github.com/neuralize-ai/runlocal_hub.git
cd runlocal_hub
uv sync
🔑 Authentication
Get your API key from the RunLocal dashboard:
- Log in to RunLocal
- Click your avatar → User Settings
- Navigate to "API Keys"
- Click "Create New API Key"
- Save your key securely
export RUNLOCAL_API_KEY=<your_api_key>
🕹 Usage Guide
Simple Benchmark
from runlocal_hub import RunLocalClient, display_benchmark_results
client = RunLocalClient()
# Benchmark on any available device
response = client.benchmark("model.mlpackage")
display_benchmark_results(response.results)
Device Filtering
Target specific devices with intuitive filters:
from runlocal_hub import DeviceFilters, RunLocalClient
client = RunLocalClient()
# High-end MacBooks with M-series chips
mac_filters = DeviceFilters(
device_name="MacBook",
soc="Apple M", # Matches M1, M2, M3, etc.
ram_min=16, # At least 16GB RAM
year_min=2021 # Recent models only
)
# Latest iPhones with Neural Engine
iphone_filters = DeviceFilters(
device_name="iPhone",
year_min=2022,
compute_units=["CPU_AND_NE"]
)
# Run benchmarks
response = client.benchmark(
"model.mlpackage",
device_filters=[mac_filters, iphone_filters],
count=None # Use all matching devices
)
🧮 Running Predictions
Test your model with real inputs:
import numpy as np
# Prepare input
image = np.random.rand(1, 3, 224, 224).astype(np.float32)
inputs = {"image": image}
# Run prediction on iPhone
response = client.predict(
inputs=inputs,
model_path="model.mlpackage",
device_filters=DeviceFilters(device_name="iPhone 15", compute_units=["CPU_AND_NE"])
)
outputs = response.results.outputs
tensors = outputs["CPU_AND_NE"]
for name, path in tensors.items():
tensor = np.load(path)
print(f" {name}: {tensor.shape} ({tensor.dtype})")
print(f" First values: {tensor.flatten()[:5]}")
📚 Examples
Check out the example scripts:
bench.py- Simple benchmarking examplepredict.py- Prediction with custom inputs, serialised outputs
To run the examples:
# Make sure you have set your API key
export RUNLOCAL_API_KEY=<your_api_key>
# Run benchmark example
uv run examples/bench.py
# Run prediction example
uv run examples/predict.py
💠 Supported Formats
| Format | Extension | Platforms |
|---|---|---|
| CoreML | .mlpackage/.mlmodel |
macOS, iOS |
| ONNX | .onnx |
Windows, MacOS |
| OpenVINO | directory (.xml + .bin) |
Windows (Intel) |
| TensorFlow Lite | .tflite |
Android |
| GGUF | .gguf |
All platforms |
More frameworks coming soon.
📜 License
This project is licensed under the MIT License - see the LICENSE.txt 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 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 runlocal_hub-0.1.7.tar.gz.
File metadata
- Download URL: runlocal_hub-0.1.7.tar.gz
- Upload date:
- Size: 34.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1de2140582d20f073ab86d2ab6b23f8a242d6db05c28b7de5b18b504d87eaf91
|
|
| MD5 |
387558ab813b2b090a371e350bcbc4f0
|
|
| BLAKE2b-256 |
9fa9f09907549cfb12c73527695a360874fff8f1637e722b68f573e10c359e83
|
File details
Details for the file runlocal_hub-0.1.7-py3-none-any.whl.
File metadata
- Download URL: runlocal_hub-0.1.7-py3-none-any.whl
- Upload date:
- Size: 46.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c38daf5d592d158fde3fb6a4371912a6c72074d3137228139dc38aa5faaa5043
|
|
| MD5 |
3c021688228669b40384c58ae11d2483
|
|
| BLAKE2b-256 |
689a175ffe0be9efc36c714ebbdaee770d75587334cfae3c92b8145ead9e0a7b
|