Skip to content

Commit bbc3351

Browse files
release: v0.3.0 — Production edge inference milestone
12 AxonML models (6 LSTM autoencoders + 6 GRU failure predictors) running live inference on Raspberry Pi edge controllers across 5 buildings. Includes autograd graph fixes, named_parameters for LSTM/GRU/StateDict, version bump to 0.3.0, CHANGELOG and README updates with deployment details. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 122a6c6 commit bbc3351

8 files changed

Lines changed: 194 additions & 58 deletions

File tree

CHANGELOG.md

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,58 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [0.3.0] - 2026-02-27
11+
12+
### Milestone: Production Edge Inference
13+
14+
AxonML models are running live production inference on 6 edge controllers (Raspberry Pi),
15+
monitoring HVAC equipment across 5 buildings. 12 models (6 anomaly detectors + 6 failure
16+
predictors) deployed via cross-compiled ARM binaries, each running at ~2-3 MB RSS.
17+
18+
### Added
19+
20+
#### Autograd Fixes (`axonml-autograd`, `axonml-nn`)
21+
- Fixed critical autograd graph-severing bug where `Variable::new()` was used for
22+
intermediate results, creating leaf variables that blocked gradient flow
23+
- Fixed LSTM/GRU weight transpose operations (6 instances in `rnn.rs`)
24+
- Fixed `stack_outputs` in RNN/LSTM/GRU to use `unsqueeze` + `Variable::cat`
25+
- Added `CrossEntropyBackward` gradient function for proper backpropagation
26+
- Made `Variable::from_operation` public for custom gradient-tracked operations
27+
28+
#### Tensor Operations (`axonml-tensor`)
29+
- `Tensor::cat(tensors, dim)` with `CatBackward` gradient function
30+
- `Variable::cat(vars, dim)` for autograd-tracked concatenation
31+
- `Tensor::sum_dim(dim, keepdim)` with `SumDimBackward` gradient function
32+
- `Variable::sum_dim(dim)` for autograd-tracked dimension reduction
33+
34+
#### CUDA Backend (`axonml-core`, `axonml-tensor`)
35+
- CUDA matrix multiplication dispatch via cuBLAS GEMM
36+
37+
#### Serialization (`axonml-serialize`)
38+
- Model save/load for production deployment (`.axonml` format)
39+
- StateDict extraction for weight export
40+
41+
#### Production Edge Inference
42+
- Pure-tensor inference daemons (no autograd overhead) for ARM deployment
43+
- Cross-compilation pipeline for `armv7-unknown-linux-musleabihf` (static musl)
44+
- HTTP API endpoints (`/health`, `/api/inference/latest`) for integration
45+
- Rolling window buffers for time-series LSTM/GRU inference
46+
- PM2 process management for production uptime
47+
48+
### Production Deployments
49+
50+
| Building | Unit | Anomaly Model | Failure Predictor | Controller |
51+
|----------|------|---------------|-------------------|------------|
52+
| FCOG | Mechroom | Erebus (128K params) | Kairos (288K params) | 100.123.60.69 |
53+
| Warren | AHU-1 | Aether (32K params) | Moros (73K params) | 100.124.76.93 |
54+
| Warren | AHU-2 | Phanes (71K params) | Hecate (162K params) | 100.95.58.104 |
55+
| Warren | AHU-4 | Nyctos (32K params) | Cassandra (73K params) | 100.121.143.51 |
56+
| Warren | AHU-7 | Poseidon (32K params) | Triton (73K params) | 100.125.245.8 |
57+
| Huntington | Mechroom | Plutus (127K params) | Moira (288K params) | 100.73.201.107 |
58+
59+
### Changed
60+
- Bumped version from 0.2.8 to 0.3.0
61+
1062
## [0.1.0] - 2024-XX-XX
1163

1264
### Added
@@ -120,7 +172,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
120172

121173
## Version History
122174

175+
- **0.3.0**: Production edge inference — 12 models deployed across 6 controllers
123176
- **0.1.0**: Initial release with complete ML framework
124177

125-
[Unreleased]: https://github.com/automatanexus/axonml/compare/v0.1.0...HEAD
126-
[0.1.0]: https://github.com/automatanexus/axonml/releases/tag/v0.1.0
178+
[Unreleased]: https://github.com/AutomataNexus/AxonML/compare/v0.3.0...HEAD
179+
[0.3.0]: https://github.com/AutomataNexus/AxonML/compare/v0.1.0...v0.3.0
180+
[0.1.0]: https://github.com/AutomataNexus/AxonML/releases/tag/v0.1.0

Cargo.lock

Lines changed: 22 additions & 22 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
# A PyTorch-equivalent machine learning framework written in pure Rust.
66
# Provides tensors, automatic differentiation, neural networks, and more.
77
#
8-
# @version 0.1.0
8+
# @version 0.3.0
99
# @author AutomataNexus Development Team
1010
# @license MIT OR Apache-2.0
1111
# =============================================================================
@@ -38,7 +38,7 @@ members = [
3838
]
3939

4040
[workspace.package]
41-
version = "0.2.8"
41+
version = "0.3.0"
4242
edition = "2021"
4343
rust-version = "1.75"
4444
authors = ["AutomataNexus Development Team"]
@@ -52,24 +52,24 @@ readme = "README.md"
5252

5353
[workspace.dependencies]
5454
# Internal crates
55-
axonml-core = { path = "crates/axonml-core", version = "0.2.8" }
56-
axonml-tensor = { path = "crates/axonml-tensor", version = "0.2.8" }
57-
axonml-autograd = { path = "crates/axonml-autograd", version = "0.2.8" }
58-
axonml-nn = { path = "crates/axonml-nn", version = "0.2.8" }
59-
axonml-optim = { path = "crates/axonml-optim", version = "0.2.8" }
60-
axonml-data = { path = "crates/axonml-data", version = "0.2.8" }
61-
axonml-vision = { path = "crates/axonml-vision", version = "0.2.8" }
62-
axonml-audio = { path = "crates/axonml-audio", version = "0.2.8" }
63-
axonml-text = { path = "crates/axonml-text", version = "0.2.8" }
64-
axonml-distributed = { path = "crates/axonml-distributed", version = "0.2.8" }
65-
axonml-serialize = { path = "crates/axonml-serialize", version = "0.2.8" }
66-
axonml-onnx = { path = "crates/axonml-onnx", version = "0.2.8" }
67-
axonml-quant = { path = "crates/axonml-quant", version = "0.2.8" }
68-
axonml-fusion = { path = "crates/axonml-fusion", version = "0.2.8" }
69-
axonml-profile = { path = "crates/axonml-profile", version = "0.2.8" }
70-
axonml-llm = { path = "crates/axonml-llm", version = "0.2.8" }
71-
axonml-jit = { path = "crates/axonml-jit", version = "0.2.8" }
72-
axonml-tui = { path = "crates/axonml-tui", version = "0.2.8" }
55+
axonml-core = { path = "crates/axonml-core", version = "0.3.0" }
56+
axonml-tensor = { path = "crates/axonml-tensor", version = "0.3.0" }
57+
axonml-autograd = { path = "crates/axonml-autograd", version = "0.3.0" }
58+
axonml-nn = { path = "crates/axonml-nn", version = "0.3.0" }
59+
axonml-optim = { path = "crates/axonml-optim", version = "0.3.0" }
60+
axonml-data = { path = "crates/axonml-data", version = "0.3.0" }
61+
axonml-vision = { path = "crates/axonml-vision", version = "0.3.0" }
62+
axonml-audio = { path = "crates/axonml-audio", version = "0.3.0" }
63+
axonml-text = { path = "crates/axonml-text", version = "0.3.0" }
64+
axonml-distributed = { path = "crates/axonml-distributed", version = "0.3.0" }
65+
axonml-serialize = { path = "crates/axonml-serialize", version = "0.3.0" }
66+
axonml-onnx = { path = "crates/axonml-onnx", version = "0.3.0" }
67+
axonml-quant = { path = "crates/axonml-quant", version = "0.3.0" }
68+
axonml-fusion = { path = "crates/axonml-fusion", version = "0.3.0" }
69+
axonml-profile = { path = "crates/axonml-profile", version = "0.3.0" }
70+
axonml-llm = { path = "crates/axonml-llm", version = "0.3.0" }
71+
axonml-jit = { path = "crates/axonml-jit", version = "0.3.0" }
72+
axonml-tui = { path = "crates/axonml-tui", version = "0.3.0" }
7373

7474
# External dependencies
7575
thiserror = "1.0"

README.md

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ AxonML provides comprehensive PyTorch-equivalent functionality with 1076+ passin
2323

2424
## Features
2525

26-
### Core (v0.2.8)
26+
### Core (v0.3.0)
2727

2828
- **Tensor Operations** (`axonml-tensor`)
2929
- N-dimensional tensors with arbitrary shapes
@@ -423,7 +423,7 @@ Add Axonml to your `Cargo.toml`:
423423
424424
```toml
425425
[dependencies]
426-
axonml = "0.1"
426+
axonml = "0.3"
427427
```
428428
429429
### Basic Usage
@@ -538,6 +538,23 @@ let v = t.slice_dim0(0, 1).unwrap();
538538
let n = t.narrow(1, 0, 2).unwrap();
539539
```
540540
541+
## Production Edge Deployment
542+
543+
AxonML powers real-time predictive maintenance on HVAC systems across commercial buildings. 12 models (6 LSTM autoencoders for anomaly detection + 6 GRU failure predictors) run live inference on Raspberry Pi edge controllers, processing sensor data at 1 Hz.
544+
545+
| Building | Unit | Anomaly Detector | Failure Predictor | Params | RSS |
546+
|----------|------|-------------------|-------------------|--------|-----|
547+
| FCOG | Mechroom | Erebus (LSTM-AE) | Kairos (GRU-FDD) | 416K | 2.5 MB |
548+
| Warren | AHU-1 | Aether | Moros | 105K | 2.1 MB |
549+
| Warren | AHU-2 | Phanes | Hecate | 233K | 2.4 MB |
550+
| Warren | AHU-4 | Nyctos | Cassandra | 105K | 2.1 MB |
551+
| Warren | AHU-7 | Poseidon | Triton | 105K | 2.1 MB |
552+
| Huntington | Mechroom | Plutus | Moira | 415K | 3.2 MB |
553+
554+
**Stack:** AxonML training (CPU) → `.axonml` model files → cross-compiled ARM inference daemons (`armv7-unknown-linux-musleabihf`) → PM2-managed services on Raspberry Pi → REST API (`/api/inference/latest`)
555+
556+
Each daemon runs pure-tensor inference (no autograd overhead), polls local NexusEdge for sensor data, maintains rolling time-series buffers, and exposes anomaly scores + failure predictions via HTTP.
557+
541558
## Architecture
542559
543560
```

crates/axonml-cli/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
# Provides a unified CLI for project scaffolding, training, evaluation,
66
# model management, and deployment of Axonml ML models.
77
#
8-
# @version 0.1.0
8+
# @version 0.3.0
99
# @author AutomataNexus Development Team
1010
# @license MIT OR Apache-2.0
1111
# =============================================================================
@@ -42,7 +42,7 @@ axonml-optim = { workspace = true }
4242
axonml-data = { workspace = true }
4343
axonml-vision = { workspace = true }
4444
axonml-serialize = { workspace = true }
45-
axonml-onnx = { path = "../axonml-onnx", version = "0.2.8" }
45+
axonml-onnx = { path = "../axonml-onnx", version = "0.3.0" }
4646
axonml-tui.workspace = true
4747

4848
# CLI framework

0 commit comments

Comments
 (0)