A lightweight MLOps monitoring solution for edge devices
Project description
Lightweight Edge MLOps Monitor
A minimal Python library and agent designed specifically for monitoring machine learning models deployed on resource-constrained edge devices (e.g., IoT sensors, embedded systems running Linux).
Overview
The Lightweight Edge MLOps Monitor provides essential monitoring capabilities for ML models running on edge devices with limited resources:
- System Health Monitoring: Track CPU and memory usage with minimal overhead
- Model Input/Output Logging: Log model inputs and outputs for analysis
- Drift Detection: Detect statistical drift in model outputs using the Kolmogorov-Smirnov test
- Telemetry Upload: Efficiently batch and upload telemetry data to cloud storage when network connectivity is available
Key Features
- Resource Efficient: Optimized for devices with constrained CPU, memory, and power
- Minimal Dependencies: Uses only essential libraries (
psutil,scipy,boto3,PyYAML) - Type Safe: Fully typed with Python 3.10+ type hints and
mypycompatibility - Robust Error Handling: Graceful handling of network failures, disk full scenarios, and other edge cases
- Configurable: Easily adjust sampling rates, buffer sizes, and other parameters via YAML configuration
Installation
pip install edge-mlops-monitor
Or install from source:
git clone https://github.com/Edmon02/edge-mlops-monitor.git
cd edge-mlops-monitor
pip install -e .
Quick Start
- Create a configuration file
config.yaml:
system:
sampling_interval_seconds: 10
max_memory_buffer_mb: 50
model_logging:
buffer_size: 1000
log_level: INFO
drift_detection:
algorithm: ks_test
threshold: 0.05
reference_data_path: "/path/to/reference_data.json"
check_frequency: 100 # Check after every 100 predictions
telemetry:
upload_interval_seconds: 300
max_batch_size: 100
retry_base_delay_seconds: 1
retry_max_delay_seconds: 60
retry_max_attempts: 5
storage:
type: "s3"
bucket: "your-telemetry-bucket"
prefix: "edge-device-1/"
sqlite_path: "/path/to/local/buffer.db"
max_sqlite_size_mb: 100
- Use the monitor in your ML application:
from edge_mlops_monitor import EdgeMonitor
# Initialize the monitor
monitor = EdgeMonitor(config_path="config.yaml")
# Start system monitoring in the background
monitor.start_system_monitoring()
# In your ML inference loop
def predict(input_data):
# Log the input
input_id = monitor.log_model_input(input_data)
# Make prediction with your model
prediction = my_model.predict(input_data)
# Log the output
monitor.log_model_output(input_id, prediction)
return prediction
# When shutting down
monitor.stop()
Documentation
For detailed documentation, please see:
License
This project is licensed under the MIT License - see the LICENSE file for details.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
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 edge_mlops_monitor-0.1.1.tar.gz.
File metadata
- Download URL: edge_mlops_monitor-0.1.1.tar.gz
- Upload date:
- Size: 27.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
46d4b1c1a93609f918fa5ddb55273ce05d98f70ec9f10ed00f853d13a040c41c
|
|
| MD5 |
c47680ccc4917205e3aef82ef13bb8ce
|
|
| BLAKE2b-256 |
f6ba74aff81357078202b73e40f1e3e4bf78a26d4fb023ade78c629d01d0d8e9
|
File details
Details for the file edge_mlops_monitor-0.1.1-py3-none-any.whl.
File metadata
- Download URL: edge_mlops_monitor-0.1.1-py3-none-any.whl
- Upload date:
- Size: 34.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ac726b808302754ebd8ba48b3e891d9770d67ecb2f16b1f1c2e660e4c6eb133e
|
|
| MD5 |
c3b2cffb0a3cfb6e0164b46bed168e6f
|
|
| BLAKE2b-256 |
13016ffa1516eb4068cacf896cfb5c711a048d2d1b8b687f715ef1cf6b7e4327
|